Cómo usar el comando chmod en Linux

Introducción

Puedes controlar quién accede a los archivos, busca directorios y ejecuta scripts con el comando chmod de Linux.

Este comando modifica los permisos de archivos de Linux, que parecen complicados a primera vista, pero en realidad son bastante simples una vez que sabes cómo funcionan.

chmod modifica los permisos de archivo

En Linux, quién puede hacer qué con un archivo o directorio se controla mediante conjuntos de permisos. Hay tres conjuntos de permisos. Un conjunto para el propietario del archivo, otro conjunto para los miembros del grupo del archivo y un conjunto final para todos los demás.

Los permisos controlan las acciones que se pueden realizar en el archivo o directorio. Permiten o impiden que un archivo sea leído, modificado o, si es un script o programa, ejecutado. Para un directorio, los permisos administran quién puede usar cd en un directorio y quién puede crear o modificar archivos dentro del directorio.

Debes utilizar el comando chmod para establecer cada uno de estos permisos. Para ver qué permisos se han establecido en un archivo o directorio, podemos usar ls.

Ver y comprender los permisos de archivos

Podemos usar la opción –l (formato largo) que tiene ls para listar de los permisos de archivos y directorios.

En cada línea, el primer caracter identifica el tipo de entrada que se enumera. Si es un guión (-) es un archivo. Si es la letra d, es un directorio.

Los siguientes nueve caracteres representan la configuración de los tres conjuntos de permisos.

  • Los primeros tres caracteres muestran los permisos para el usuario propietario del archivo (permisos de usuario).
  • Los tres caracteres del medio muestran los permisos para los miembros del grupo del archivo (permisos de grupo).
  • Los últimos tres caracteres muestran los permisos para otra persona que no esté en las dos primeras categorías (permisos de otros).

Hay tres caracteres en cada conjunto de permisos. Los caracteres son indicadores de la presencia o ausencia de uno de los permisos. Son un guión (-) o una letra. Si el caracter es un guion, significa que no se otorga el permiso. Si el caracter es una rw o una x, ese permiso ha sido otorgado.

Las letras representan:

  • r: permisos de lectura. Se puede abrir el archivo y ver su contenido.
  • w: permisos de escritura. El archivo se puede editar, modificar y eliminar.
  • x: permisos de ejecución. Si el archivo es un script o un programa, se puede ejecutar.

Por ejemplo:

  •  – – – significa que no se han otorgado permisos en absoluto.
  •  rwx significa que se han otorgado permisos completos. Los indicadores de lectura, escritura y ejecución están presentes.

En nuestra captura de pantalla, la primera línea comienza con una d. Esta línea se refiere a un directorio llamado “archive”. El propietario del directorio es “dave”, y el nombre del grupo al que pertenece el directorio también se llama “dave”.

Permisos de usuario

Los siguientes tres caracteres son los permisos de usuario para este directorio. Estos muestran que el propietario tiene permisos completos. Están presentes todos los caracteres rwx. Esto significa que el usuario Dave tiene permisos de lectura, escritura y ejecución para ese directorio.

Permisos de grupo

El segundo conjunto de tres caracteres son los permisos de grupo, estos son r-x. Estos muestran que los miembros del grupo Dave tienen permisos de lectura y ejecución para este directorio.

Eso significa que pueden ver los archivos y sus contenidos en el directorio, y pueden usar cd (ejecutar) en ese directorio. No tienen permisos de escritura, por lo que no pueden crear, editar o eliminar archivos.

Permisos de otros

El conjunto final de tres caracteres también son r-x. Estos permisos se aplican a las personas que no se rigen por los dos primeros conjuntos de permisos. Estas personas (llamadas “otros”) tienen permisos de lectura y ejecución en este directorio.

Entonces, para resumir, los miembros del grupo y otros tienen permisos de lectura y ejecución. El propietario, un usuario llamado Dave, también tiene permisos de escritura.

Para todos los demás archivos (aparte del archivo de script mh.sh) dave y los miembros del grupo dave tienen propiedades de lectura y escritura en los archivos, y los demás solo tienen permisos de lectura.

Para el caso especial del archivo de script mh.sh, el propietario Dave y los miembros del grupo tienen permisos de lectura, escritura y ejecución, y los demás solo tienen permisos de lectura y ejecución.

Comprendiendo la sintaxis de los permisos

Para usar chmod para establecer permisos, necesitamos decirte:

  • Para quién: para quién estamos estableciendo permisos.
  • Qué: ¿Qué cambio estamos haciendo? ¿Estamos agregando o eliminando el permiso?
  • Cuál: ¿Cuál de los permisos estamos configurando?

Usamos indicadores para representar estos valores, y formamos “declaraciones de permisos” breves como u+x, por ejemplo, “u” significa “usuario” (quién), “+” significa agregar (qué) y “x” significa el permiso de ejecución (que).

Los valores de “quién” que podemos usar son:

  • u: Usuario, es decir, el propietario del archivo.
  • g: Grupo, es decir, miembros del grupo al que pertenece el archivo.
  • o: Otros, es decir, personas no regidas por los permisos u y g.
  • a: Todo, lo que significa todo lo anterior.

Si no se usa ninguno de estos, chmod se comporta como si se hubiera usado “a”.

Los valores de “qué” que podemos usar son:

  • : Signo menos. Elimina el permiso.
  • +: Signo más. Concede el permiso. El permiso se agrega a los permisos existentes. Si deseas tener este permiso y solo este conjunto de permisos, utiliza la opción = que se describe a continuación.
  • =: Signo igual. Establece un permiso y elimina otros.

Los valores “cuál” que podemos usar son:

  • r: El permiso de lectura.
  • w: El permiso de escritura.
  • x: El permiso de ejecución.

Establecer y modificar permisos

Digamos que tenemos un archivo donde todos tienen permisos completos.

Queremos que el usuario tenga permisos de lectura y escritura y que el grupo y otros usuarios solo tengan permisos de lectura. Podemos hacerlo usando el siguiente comando:

El uso del operador “=” significa que eliminamos todos los permisos existentes y luego establecemos los especificados.

Vamos a ver el nuevo permiso en este archivo:

Se eliminaron los permisos existentes y se establecieron los nuevos permisos, como esperábamos.

¿Qué tal agregar un permiso sin eliminar la configuración de permisos existente? Podemos hacer eso fácilmente también.

Digamos que tenemos un archivo de script que hemos terminado de editar. Necesitamos hacerlo ejecutable para todos los usuarios. Sus permisos actuales se ven así:

Podemos agregar el permiso de ejecución para todos con el siguiente comando:

Si echamos un vistazo a los permisos, veremos que el permiso de ejecución ahora se otorga a todos, y los permisos existentes todavía están vigentes.

Podríamos haber logrado lo mismo sin la “a” en la declaración “a + x“. El siguiente comando habría funcionado igual de bien.

Establecer permisos para varios archivos

Podemos aplicar permisos a múltiples archivos a la vez.

Estos son los archivos en el directorio actual:

Digamos que queremos eliminar los permisos de escritura para los usuarios “otros” de los archivos que tienen una extensión “.page”. Podemos hacer esto con el siguiente comando:

Veamos qué efecto ha tenido:

Como podemos ver, el permiso de lectura se ha eliminado de los archivos “.page” para la categoría de usuarios “otros”. Ningún otro archivo ha sido afectado.

Si hubiéramos querido incluir archivos en subdirectorios, podríamos haber usado la opción –R (recursiva).

Taquigrafía numérica

Otra forma de usar chmod es proporcionar los permisos que deseas otorgar al propietario, grupo y otros como un número de tres dígitos. El dígito más a la izquierda representa los permisos para el propietario. El número del medio representa los permisos para los miembros del grupo. El dígito más a la derecha representa los permisos para los demás.

Los dígitos que puedes usar y lo que representan se enumeran aquí:

  • 0: (000) Sin permiso.
  • 1: (001) Permiso de ejecución.
  • 2: (010) Permiso de escritura.
  • 3: (011) Permisos de escritura y ejecución.
  • 4: (100) Permiso de lectura.
  • 5: (101) Permisos de lectura y ejecución.
  • 6: (110) Permisos de lectura y escritura.
  • 7: (111) Permisos de lectura, escritura y ejecución.

Cada uno de los tres permisos está representado por uno de los bits en el equivalente binario del número decimal. Entonces 5, que es 101 en binario, significa leer y ejecutar. 2, que es 010 en binario, significaría el permiso de escritura.

Con este método, puedes establecer los permisos que deseas tener; no agregar estos permisos a los permisos existentes. Entonces, si los permisos de lectura y escritura ya estaban establecidos, tendrías que usar 7 (111) para agregar permisos de ejecución. El uso de 1 (001) eliminaría los permisos de lectura y escritura y agregaría el permiso de ejecución.

Ejemplo

Agreguemos nuevamente el permiso de lectura en los archivos “.page” para la categoría de otros usuarios. También debemos establecer los permisos de usuario y grupo, por lo que debemos establecerlos en lo que ya están. Estos usuarios ya tienen permisos de lectura y escritura, que es 6 (110). Queremos que “otros” tengan lectura y permisos, por lo que deben establecerse en 4 (100).

El siguiente comando logrará esto:

Esto establece los permisos que solicitamos para usuario, miembros del grupo y otros para lo que requerimos. El usuario y los miembros del grupo tienen sus permisos restablecidos a lo que ya tenían, y “otros” tienen el permiso de lectura restaurado.

Opciones avanzadas

Si lees la página del manual para chmod verás que hay algunas opciones avanzadas relacionadas con SETUID y SETGID. También hallarás opciones de eliminación restringida.

Para el 99% de los casos en que necesitarás chmod, las opciones descritas aquí te serán suficientes.