Gestionar adecuadamente los modos o permisos en Linux es algo fundamental. Tener bien administrados los permisos de los directorios y archivos no solo permite que todos los usuarios o grupos que comparten el sistema puedan acceder a lo que necesitan, sino que también se pueden proteger ciertos archivos o carpetas para que no puedan ser manipulados por ciertos usuarios o grupos sin permiso.
Además, tener una buena gestión de los permisos en tu sistema te podría incluso salvar de ciertos ataques cibernéticos que aprovechan los permisos mal configurados de ciertos archivos críticos para poder realizar sus fechorías.
¿Qué son los permisos en Linux?
Los modos o permisos en Linux no son más que un sistema de control por bits asignados a cada archivo y directorio del sistema y que indicará quién puede leer, escribir o ejecutar cada uno de ellos.
Cuando se habla de permisos básicos, habrás visto que se pueden expresar en su forma numérica octal o con letras. Pero en un caso y en otro estará dividido en tres partes fundamentales:
- Usuario: la primera cifra numérica o los tres primeros símbolos indican los permisos que tiene el propietario que creó el archivo o directorio. Puede ser root o cualquier otro usuario del sistema.
- Grupo: la segunda cifra numérica o los tres siguientes símbolos identifican al grupo propietario. Todos los usuarios miembros de ese grupo tendrán unos permisos definidos según este valor.
- Otros: la última cifra, o los tres últimos símbolos, se corresponden con los permisos que podría tener cualquier otro usuario del sistema.
Los permisos básicos, sin entrar en Sticky Bit, SUID y SGID, que serían algo más avanzados, simplemente indican lo que se puede hacer sobre el archivo o directorio afectado:
- Lectura: solo se permite leer o ver el contenido.
- Escritura: admite modificar el contenido.
- Ejecución: si fuese un ejecutable, como un binario o un script, se podría ejecutar el programa.
Para poder visualizar estos permisos de ciertos archivos o directorios, podrías usar:
ls -l
Esto te listará el contenido del directorio actual y en la columna de la derecha podrás ver los permisos de cada archivo o directorio. También puedes especificar un archivo o carpeta concreta:
ls -l winehq.key
Pues bien, si te fijas en la salida, podría mostrarte algo así:
rwxrw-r–
- Esto está indicando que el usuario o propietario de ese archivo o directorio tendría permisos de lectura (r), escritura (w) y ejecución (x).
- En cambio, los siguientes tres símbolos indican lo que puede hacer el grupo, y en este caso solo permite lectura y escritura, ya que en lugar de la x de ejecución aparece un -, que indica que no tiene ese permiso activo.
- Por último, en el campo otros solo tiene permisos de lectura en este caso.
Para la nomenclatura octal o numérica, tan solo tienes que tener en cuenta el valor de cada una de esas letras:
- 0 = –
- 1 = x
- 2 = w
- 4 = r
Por ejemplo, para rwxrw-r– tendrías un equivalente de 764. Ten en cuenta que se suma en cada trupla, por tanto, r+w+x es 4+2+1=7, mientras que r+w+- es 4+2+0=6, y r– sería simplemente 4 (4+0+0).
Cómo usar chmod para gestionar los permisos en Linux
Ahora que ya sabes lo básico para saber interpretar los permisos de un archivo o directorio, ahora el siguiente paso es saber cómo modificarlos con el comando chmod.
Antes de nada, tienes que saber que para dirigirte a los permisos de usuario, grupo u otros, tienes que especificarlo con:
- u = para usuario
- g = para grupo
- o = para otros
- a = todos (usuario/grupo/otros)
Y para operar, puedes usar las letras que ya conoces (r,w,x, o los números octales) y los operadores:
- + = agregar permiso
- – = quitar permiso
Recuerda que en algunos casos necesitarás privilegios, por lo que debes usar sudo delante de chmod o ser root.
Por ejemplo, imagina que tienes un script llamado prueba.sh y quieres darle permisos de ejecución para todos:
chmod a+x prueba.sh
Para quitar el permiso de ejecución de ese mismo script a otros:
chmod o-x prueba.sh
Se puede quitar o poner varios permisos a la vez:
chmod u+rwx prueba.sh
O también puedes quitar o poner permisos sobre varios roles a la vez:
chmod g-x,o-x prueba.sh
chmod u+x,g+w prueba.sh
También puedes poner un permiso particular a todo el contenido de un directorio de forma recursiva:
chmod -R 755 /home/usuario/prueba