Todo lo que debes saber sobre los permisos en Linux

Introducción

En este artículo aprenderemos sobre cómo establecer permisos de Linux en archivos y directorios. Los permisos especifican lo que una persona en particular puede o no hacer con respecto a un archivo o directorio.

Como tal, los permisos son importantes para crear un entorno seguro. Por ejemplo, no deseas que otras personas cambien tus archivos y también deseas que los archivos del sistema estén a salvo de daños (ya sea accidental o deliberadamente). Afortunadamente, los permisos en un sistema Linux son bastante fáciles de trabajar.

¿Qué son?

Los permisos de Linux dictan 3 cosas que puedes hacer con un archivo, leer, escribir y ejecutar. Se hace referencia a ellos en Linux con una sola letra cada uno.

  • r leer: puedes ver el contenido del archivo.
  • w escribir: puedes cambiar el contenido del archivo.
  • x ejecutar: puedes ejecutar el archivo si es un programa o script.

Para cada archivo definimos 3 conjuntos de personas para quienes podemos especificar permisos.

  • owner: una sola persona propietaria del archivo. (normalmente la persona que creó el archivo, pero ciertos usuarios pueden otorgarle la propiedad a otra persona)
  • group: cada archivo pertenece a un solo grupo.
  • others: todos los demás que no están en el grupo o el propietario.

Tres permisos y tres grupos de personas. Eso es todo lo que hay realmente para los permisos. Ahora veamos cómo podemos verlos y cambiarlos.

Ver permisos

Para ver los permisos de un archivo, utilizamos la opción de listado largo para el comando ls.

ls -l [ruta]

En el ejemplo anterior, los primeros 10 caracteres de la salida son lo que observamos para identificar los permisos.

  • El primer caracter identifica el tipo de archivo. Si es un guión (-), entonces es un archivo normal. Si es una d, entonces es un directorio.
  • Los siguientes 3 caracteres representan los permisos para el propietario. Una letra representa la presencia de un permiso y un guión (-) representa la ausencia de un permiso. En este ejemplo, el propietario tiene todos los permisos (leer, escribir y ejecutar).
  • Los siguientes 3 caracteres representan los permisos para el grupo. En este ejemplo, el grupo tiene la capacidad de leer, pero no escribir o ejecutar. Ten en cuenta que en el orden de los permisos siempre es primero lectura, luego escritura y finalmente ejecución.
  • Finalmente, los últimos 3 caracteres representan los permisos para otros (o para todos los demás). En este ejemplo tienen el permiso de ejecución y nada más.

Cambiar permisos

Para cambiar los permisos en un archivo o directorio, usamos un comando llamado chmod. Esto significa change mode.

chmod [permisos] [ruta]

chmod tiene argumentos de permiso que se conforman de 3 componentes

  • ¿Para quién estamos cambiando el permiso? [ugoa]: usuario (o propietario), grupo, otros, todos
  • ¿Estamos otorgando o revocando el permiso, indicado con un signo más (+) o menos (-)
  • ¿Qué permiso estamos estableciendo? – leer (r), escribir (w) o ejecutar (x)

Los siguientes ejemplos aclararán su uso.

Otorga el permiso de ejecución al grupo. Luego, elimina el permiso de escritura para el propietario.

¿No quieres asignar permisos individualmente? Podemos asignar múltiples permisos a la vez.

Puede parecer extraño que, como propietario de un archivo, podamos eliminar nuestra capacidad de leer, escribir y ejecutar ese archivo, pero hay razones válidas por las que podemos desear hacer esto.

Tal vez tenemos un archivo con datos que no queremos cambiar accidentalmente, por ejemplo. Si bien podemos eliminar estos permisos, es posible que no eliminemos nuestra capacidad para establecer esos permisos y, como tal, siempre tenemos control sobre todos los archivos de nuestra propiedad.

Configuración de permisos abreviados

El método descrito anteriormente no es demasiado difícil para establecer permisos, pero puede ser un poco tedioso si tenemos un conjunto específico de permisos que nos gustaría aplicar regularmente a ciertos archivos (por ejemplo, scripts que veremos más adelante). Afortunadamente, hay una forma abreviada de especificar permisos que lo hace fácil.

Para entender cómo funciona este método abreviado, primero necesitamos un poco de experiencia en sistemas numéricos. Nuestro sistema numérico típico es decimal.

Sistemas numéricos

Es un sistema de números de base 10 y como tal tiene 10 símbolos (0 – 9) utilizados. Otro sistema de números es octal, que es la base 8 (0-7). Ahora sucede que con 3 permisos y cada uno activado o desactivado, tenemos 8 combinaciones posibles (2 ^ 3).

Ahora también podemos representar nuestros números usando binarios que solo tienen 2 símbolos (0 y 1). El mapeo de octal a binario está en la tabla a continuación.

Octal Binario
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1

Ahora, el punto interesante a tener en cuenta es que podemos representar los 8 valores octales con 3 bits binarios y que cada combinación posible de 1 y 0 está incluida en él.

Entonces tenemos 3 bits y también tenemos 3 permisos. Si piensas que 1 representa activado y 0 desactivado, se puede usar un solo número octal para representar un conjunto de permisos para un conjunto de personas.

Tres números y podemos especificar permisos para el usuario, grupo y otros. Veamos algunos ejemplos. (consulta la tabla de arriba para ver cómo coinciden).

La gente a menudo recuerda secuencias de números de uso común para diferentes tipos de archivos y encuentra este método bastante conveniente. Por ejemplo, 755 o 750 se usan comúnmente para los scripts.

Permisos para directorios

La misma serie de permisos se puede usar para directorios, pero tienen un comportamiento ligeramente diferente.

  • r: tiene la capacidad de leer el contenido del directorio (es decir, hacer un ls)
  • w: tiene la capacidad de escribir en el directorio (es decir, crear archivos y directorios)
  • x: tiene la capacidad de ingresar a ese directorio (es decir, cd)

Veamos algunos de estos en acción.

Ten en cuenta que en las líneas 5 y 14 anteriores cuando ejecutamos ls incluí la opción -d que significa directorio. Normalmente, si le damos a ls un argumento que es un directorio, enumerará los contenidos de ese directorio.

En este caso, sin embargo, estamos interesados ​​en los permisos del directorio directamente y la opción -d nos permite obtener eso.

Estos permisos pueden parecer un poco confusos al principio. Lo que debemos recordar es que estos permisos son para el directorio en sí, no para los archivos dentro.

Entonces, por ejemplo, puedes tener un directorio para el que no tienes permiso de lectura. Puedes tener archivos dentro de los cuales tienes permiso de lectura. Mientras sepas que el archivo existe y su nombre, aún puedes leer el archivo.

El usuario root

En un sistema Linux, solo hay 2 personas que normalmente pueden cambiar los permisos de un archivo o directorio. El propietario del archivo o directorio y el usuario root.

El usuario root es un superusuario al que se le permite hacer cualquier cosa y todo en el sistema. Normalmente, los administradores de un sistema serían los únicos que tendrían acceso a la cuenta root y la usarían para mantener el sistema.

Por lo general, los usuarios normales solo tendrían acceso a archivos y directorios en su directorio de inicio y tal vez a algunos otros con el fin de compartir y colaborar en el trabajo y esto ayuda a mantener la seguridad y la estabilidad del sistema.

Seguridad básica

Tu directorio de inicio es tu propio espacio personal en el sistema. Debes asegurarte de que siga siendo así.

La mayoría de los usuarios se otorgarían permisos completos de lectura, escritura y ejecución para su directorio de inicio y ningún permiso para grupos u otros, sin embargo, algunas personas por diversas razones pueden tener una configuración ligeramente diferente.

Normalmente, para una seguridad óptima, no debes otorgarle al grupo ni a otros acceso de escritura a tu directorio de inicio, pero ejecutarlo sin leer puede ser útil a veces.

Esto permite que las personas accedan a tu directorio personal pero no les permite ver lo que hay allí. Un ejemplo de cuándo se usa esto es para páginas web personales.

Es típico que un sistema ejecute un servidor web y permita a los usuarios tener cada uno su propio espacio web. Una configuración común es que si colocas un directorio en tu directorio principal llamado public_html, el servidor web leerá y mostrará su contenido.

Sin embargo, el servidor web se ejecuta como un usuario diferente para ti, por lo que, de forma predeterminada, no tendrá acceso para ingresar y leer esos archivos. Esta es una situación en la que es necesario otorgar la ejecución en tu directorio de inicio para que el usuario del servidor web pueda acceder a los recursos requeridos.

Resumen

Lo que aprendimos

chmod

Cambiar permisos en un archivo o directorio.

ls -ld

Ver los permisos para un directorio específico.

Conceptos importantes

Seguridad

Los permisos correctos son importantes para la seguridad de un sistema.

Uso

Establecer los permisos correctos es importante para el buen funcionamiento de ciertas tareas en Linux. (veremos un ejemplo de esto en el artículo sobre secuencias de scripting)

Practicando lo aprendido

Juguemos con algunos permisos.

  • En primer lugar, echa un vistazo a los permisos de tu directorio de inicio, luego echa un vistazo a los permisos de varios archivos allí.
  • Ahora vamos a tu directorio linuxtutorialwork y cambiemos los permisos de algunos de los archivos allí. Asegúrate de usar tanto la forma abreviada como la forma larga para establecer permisos y también usa una variedad de rutas absolutas y relativas. Intenta eliminar el permiso de lectura de un archivo y luego leerlo. O elimina el permiso de escritura y debes abrirlo en vi.
  • Juguemos con directorios ahora. Crea un directorio y coloca algunos archivos en él. Ahora practica con la eliminación de varios permisos de ti mismo en ese directorio y observa lo que puedes y no puedes hacer.
  • Finalmente, explora el sistema y observa cuáles son los permisos generales para los archivos en otros directorios del sistema como /etc y /bin