Usar chmod en Linux
Todos los sistemas de archivos basados en Unix, como lo es Linux, manejan tres tipos de permisos: lectura, escritura y ejecución. Los mismos se otorgan a tres categorías posibles: el usuario (usuario), el grupo al que pertenece el usuario (grupo) y todos los demás usuarios del sistema (global).
Para ver los permisos de un directorio podemos ejecutar el comando ls -l en un terminal y obtener una salida como la siguiente:
$ ls -l
lrwxrwxrwx 1 usuario grupo 14 may 21 2018 Datos -> /datos/usuario/
-rw-r--r-- 1 usuario grupo 0 abr 11 17:11 ejemplo.txt
drwxr-xr-x 2 usuario grupo 4096 mar 24 11:19 Escritorio
Los primeros 10 caracteres representan los permisos, para el ejemplo anterior corresponden a:
| Tipo de archivo | Usuario | Grupo | Global |
|---|---|---|---|
l Enlace simbólico | rwx | rwx | rwx |
- Archivo | rw- | r-- | r-- |
d Directorio | rwx | r-x | r-x |
El primero corresponde al tipo de archivo. Los restantes 9 agrupados en 3 grupos de 3 letras representan los permisos del usuario, el grupo y todos los demás (global) respectivamente. Cada letra representa:
rLectura (read)wEscritura (write)xEjecución (execute)
Ya comprendido lo anterior, la sintaxis a seguir para asignar permisos a un archivo o directorio es la siguiente:
$ chmod [u,g,o,a][+,-,=][r,w,x] archivo_o_directorio
Donde los parámetros corresponden a:
| Parámetro | Significado |
|---|---|
u | Usuario |
g | Grupo |
o | Global |
a | Todos |
+ | Otorgar |
- | Revocar |
= | Copiar |
r | Lectura |
w | Escritura |
x | Ejecución |
Por ejemplo, si un usuario quiere otorgarle permisos de escritura al archivo ejemplo.txt a todos los usuarios de su mismo grupo, debe ejecutar chmod con los parámetros g+w de la siguiente manera:
$ chmod g+w ejemplo.txt
Para revocar el permiso se cambiar el parámetro por g-w:
$ chmod g-w ejemplo.txt
Si lo que desea es que el grupo tenga los mismos permisos que el usuario sobre el directorio Escritorio, debe ejecutar chmod con los parámetros g=u:
$ chmod g=u Escritorio
Si se indica la categoría a o no se indica ninguna categoría, los permisos se aplica a todas las categorías:
# Se otorga permiso de ejecución a usuario, grupo y global
$ chmod a+x ejemplo.txt
# Equivalente a
$ chmod +x ejemplo.txt
Se pueden especificar diferentes permisos al mismo tiempo utilizando coma:
$ chmod g+w,o-rw,a+x ejemplo.txt
Y se pueden aplicar permisos recursivamente utilizando el parámetro -R:
$ chmod -R +r Escritorio
El anterior ejemplo, le otorga permisos de lectura al directorio Escritorio al igual que a todo su contenido.
Otro método de establecer permisos es mediante el uso de la notación octal, la cual consiste en representar los 3 permisos (lectura, escritura y ejecución) en binario, donde 0 es que no tiene el permiso y 1 que si tiene el permiso y pasarlos luego a su representación en base 8, utilizando los dígitos del 0 al 7.
| Binario | Octal | Permiso |
|---|---|---|
| 000 | 0 | --- |
| 001 | 1 | --x |
| 010 | 2 | -w- |
| 011 | 3 | -wx |
| 100 | 4 | r-- |
| 101 | 5 | r-x |
| 110 | 6 | rw- |
| 111 | 7 | rwx |
La sintaxis de la notación octal sería igual a la anterior, remplazado los parámetros por el valor octal:
$ chmod 750 ejemplo.txt
Así por ejemplo el parámetro 750 significa que el usuario tiene permisos rwx, el grupo tiene permisos r-x y los otros no tiene permisos ---.
Las notaciones octales más frecuentes son:
| Octal | Permisos |
|---|---|
| 777 | rwxrwxrwx Todos tienen todos los permisos |
| 755 | rwxr-xr-x Usuario tiene todos los permisos, los demás solo leer y ejecutar |
| 644 | rw-r--r-- Usuario puede leer y escribir, los demás solo leer |
| 600 | rw------- Usuario puede leer y escribir, los demás sin permisos |