Permisos en Linux – Comando chmod

Hoy vamos a hablar acerca de los permisos en GNU/Linux, uno de los grandes bloques de la seguridad en este sistema. El objetivo de los permisos es controlar qué usuario puede leer, escribir o ejecutar un archivo o directorio en nuestro sistema. De esta forma se logra que en el caso que un malware infectara a un usuario, no logre infectar al resto, o en el peor de los casos al usuario administrador (root). Podemos comprobar como muchos programas nos crean un nombre de usuario para ser usado sólo por ese programa, un claro ejemplo puede ser TOR, cuyo usuario suele ser debian-tor, o el servidor web Apache, cuyo usuario frecuentemente es www-data. Para administrar permisos en nuestro sistema GNU/Linux usaremos el comando chmod.

Tipos de permisos

Existen 3 clases de permisos principales:

r : Permiso de sólo lectura, este permiso se usa para indicar que el archivo sólo se puede leer, ni escribir ni ejecutar

w : Permiso de escritura, indica que se puede escribir en el fichero o dentro del directorio.

x : Permiso de ejecución, indica que el fichero sólo se puede ejecutar, es decir, no puedes abrirlo y leer su contenido, sólo puedes ejecutarlo desde la consola.

Estos permisos se aplican a través de identidades, una identidad puede abarcar desde un grupo a un usuario determinado, en el caso de GNU/Linux distinguimos los siguientes tipos:

Usuario (u): Se refiere al usuario propietario del archivo, es decir, el dueño del archivo, podemos cambiar el dueño de un archivo o directorio mediante el comando chown

Grupos (g): Esta identidad afecta a todos los usuarios del mismo grupo que el usuario creador

Otros (o): Se refiere a todos los usuarios distintos del usuario propietarios y que además no estén en su grupo.

Todos (a): Se usa para indicar todos los anteriores, es decir, todos.

Introducción al comando chmod

Chmod es el comando usado para modificar los permisos de ficheros y directorios, lo tendremos disponible por defecto en nuestra consola de GNU/Linux. La sintaxis del comando no es muy complicada:

chmod [OPCIÓN]... MODO[,MODO]... FICHERO...

Para poder ver la ayuda del comando utilizaremos el modificador – -help, para comprobar la versión usaremos – -version. Si queremos hacer una asignación de permisos recursiva (que afecte a todos los subdirectorios desde donde estemos) lo haremos con el modificador -R o – -recursive.

Asignación de permisos con chmod

Permisos en octal: A la hora de asignar permisos con el comando chmod podemos hacerlo de dos formas, una es a través de tres número consecutivos en notación octal, cada permiso posible es un número, que al pasarlo a bits podrían abarcar desde 000 a 111. Cada uno de esos bits representa un permiso (lectura, escritura o ejecución), su traducción la tenemos en la siguiente tabla:

tablapermisos

Ahora bien, el número que necesitamos para lanzar el comando son 3 dígitos octales, por ejemplo 655, 110, 777… es decir, necesitamos indicarle un número octal por cada identidad (usuarios, grupos y otros). Todo esto lo veremos mejor más abajo en los ejemplos prácticos.

Asignación estándar de permisos: Si no entendemos muy bien cómo funciona la asignación en octal podemos realizarlo por la manera estándar que es algo más comprensible. Para ello usaremos las letras de las identidades (u,g,o,a) y las letras de los permisos (w,r,x) combinándolos con signos de suma o resta dependiendo de si queremos añadir el permiso o desactivarlo, aquí tenemos algunos ejemplos:

a+x : Añadiría permisos de ejecución a todas las identidades.
g-w : Quitaría los permisos de escritura del grupo.
u-r : Quitaría el permiso de lectura al usuario propietario.
u+rx : Añadiría lectura y escritura al usuario propietario.
ug+x : Añade al propietario y a su grupo permisos de ejecución.

Ejemplos prácticos

Para poder visualizar los permisos de un fichero utilizaremos el comando “ls -l”, en la primera parte de cada línea veremos los permisos, la primera letra indica si es un directorio (d) un enlace (l) o un archivo binario (b), el resto de caracteres son los permisos en grupos de tres en el siguiente orden: Usuarios, Grupos, Otros. Os adjunto una captura:

PermisosComandoLs

En los dos siguientes comandos asignaremos sólo el permiso de lectura a a todos los usuarios, podemos ver en el siguiente ejemplo las dos formas de cambiar los permisos, el archivo que vamos a modificar se llama archivo1.txt (recordad que tenéis que usar el comando chmod desde la cuenta del administrador usando el comando “sudo” o “su root”).

chmod a=r ./archivo1.txt
chmod 444 ./archivo1.txt

Ahora vamos a quitar los permisos de lectura y le asignaremos permisos de escritura y ejecución con un sólo comando:

chmod a=wx ./archivo1.txt

Para quitar un permiso usaremos el símbolo de resta, tomando como ejemplo el primer comando, le añadiremos los permisos de escritura y ejecución, una vez hecho esto quitaremos los permisos de lectura:

chmod a+wx ./archivo1.txt
chmod a-r ./archivo1.txt

Ahora vamos a quitar los permisos de escritura a un directorio y a sus respectivos subdirectorios:

chmod a-w ./carpeta -R

Podemos añadir en el mismo comando más de una identidad separándolas por coma, en el siguiente comando asignaremos a la carpeta del comando anterior permisos de lectura y escritura de propietario y permiso de ejecución en el grupo:

chmod u=rw,g=x ./carpeta

Si deseamos quitar todos los permisos podemos hacerlo con el siguiente comando:

chmod a=- ./carpeta

En un próximo post hablaremos de los permisos especiales, y cambios de grupo y propietarios. Un saludo!