Linux

Linux : ¿cómo gestionar los permisos con el comando chmod?

I. Introducción

En este tutorial, aprenderemos a gestionar permisos en Linux, utilizando el comando chmod. Se trata de un comando indispensable que debes conocer y dominar si quieres administrar un servidor o una estación de trabajo en Linux (Ubuntu, Debian, AlmaLinux, etc.).

Los permisos se utilizan para gestionar el acceso a archivos y directorios. El comando chmod se utiliza para modificar estos permisos. Hablaremos sobre el modelo de permisos de Linux, antes de ver cómo utilizar el comando chmod a través de varios ejemplos. El comando chmod puede ser usado para cambiar permisos, ya sea simbólica o numéricamente, así que veremos ambas posibilidades.

Este tutorial se basa en una máquina Debian, pero puede utilizar cualquier otra distribución de Linux.

II. Entender los permisos de Linux

Antes de discutir el uso del comando chmod en sí, creo que es importante recordarle cómo funcionan los permisos en Linux. Aquí, sólo cubriremos lo básico a través de los permisos de lectura, escritura y ejecución.

Cada archivo o directorio tiene tres tipos de permisos:

  1. Leer (r): ver el contenido de un archivo o listar un directorio.
  2. Escribir (w): modificar un archivo o su contenido, o añadir/eliminar archivos en un directorio.
  3. Ejecutar (x): ejecuta un archivo o entra en un directorio (permiso necesario para ejecutar un script Bash, por ejemplo).

Estos permisos se aplican a tres categorías de usuarios:

  • Propietario (usuario): el usuario propietario del fichero.
  • Grupo: miembros del grupo asociado al fichero.
  • Otros: todos los demás usuarios.

A partir de aquí, es posible definir el acceso a los datos, en particular quién puede leer y/o modificar un fichero específico.

III. Visualización e interpretación de los permisos

A. Permisos de lectura en Linux

Para mostrar los permisos de un archivo o directorio, necesitamos utilizar el comando ls. En un Terminal, ejecute el comando "ls -l" para mostrar los permisos de un archivo o directorio. Por ejemplo, para obtener esta información sobre el archivo "/etc/shadow" presente en todas las máquinas Linux, ejecutaremos este comando :

ls -l /etc/shadow

A continuación se muestra un resultado típico de este archivo:

-rw-r----- 1 root shadow 1191  3 janv. 11:14 /etc/shadow

Esta línea muestra los permisos actuales establecidos en este archivo (rw-r-----), así como el nombre del propietario (root) y el nombre del grupo (shadow). He aquí cómo interpretar el resultado de este comando:

Linux - Interpretar los permisos de los archivos

B. Permisos: r,w, x

Lo que hay que recordar es que los permisos se definen en una cadena de 9 caracteres dividida en 3 bloques que corresponden a los permisos de propietario, grupo y otros.

  • r: permiso de lectura
  • w: permiso de escritura (modificación)
  • x: permiso de ejecución
  • - sin permisos

Los permisos siempre se construyen de esta manera: lectura, escritura, ejecución, es decir, "rwx". Si el permiso es "r--" en un archivo, esto significa que el archivo puede ser leído, pero no modificado (o ejecutado). El mismo permiso en una carpeta significa que se puede visualizar el contenido del directorio, pero el usuario no puede crear, modificar o borrar un archivo o carpeta en ese directorio.

En nuestro caso, por tanto, podemos afirmar que la cuenta "root" tiene permisos de lectura y escritura sobre el archivo "/etc/shadow", mientras que los miembros del grupo "shadow " pueden leer su contenido. Todos los demás usuarios no tienen acceso a este archivo.

C. Permisos especiales: setuid, setgid y sticky bit

Por último, y brevemente, ya que no es el tema principal de este artículo, veremos los permisos especiales. Estos se encuentran en el tercer valor de un grupo de permisos (en lugar de la "x").

Estos bits especiales añaden una funcionalidad extra:

  • Setuid : ejecuta un archivo con privilegios de propietario.
  • Setgid : los ficheros creados en un directorio heredan el grupo del directorio.
  • Sticky bit : impide que los usuarios borren los archivos de un directorio a menos que sean de su propiedad.

Aquí hay un ejemplo donde el "Setuid" se establece en un binario :

ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 68248 23 mars   2023 /usr/bin/passwd

Como resultado, el valor "x" se sustituye por "s". Es probable que se encuentre con otros valores: s, S, t, T.

IV. Modificación de permisos con chmod: modo simbólico

A. Chmod: sintaxis en modo simbólico

En modo simbólico, utilizamos el comando chmod especificando los permisos con texto, es decir, para añadir permisos de lectura, podemos especificar "+r". A la inversa, para quitar permisos de escritura, podemos escribir "-w".

La sintaxis general es :

chmod [OPCIONES] [PERMISOS] archivo
chmod [OPCIONES] [ugoa][-+=][rwx...] archivo

El primer conjunto de banderas ([ugoa]) corresponde a los usuarios:

Nombre de la banderaCorrespondencia
uEl propietario-usuario
gEl grupo (y, por tanto, los usuarios miembros del grupo)
oTodos los demás usuarios
aTodos los usuarios (equivalente a "ugo")

Nota : si no se especifica esta bandera en el comando chmod, la bandera por defecto es"a". Sólo los permisos definidos por umask no se ven afectados.

El segundo conjunto de indicadores ([-+=]) corresponde a la operación que debe realizarse sobre los permisos:

Nombre de la banderaCorrespondencia
-Retirar el permiso especificado
+Añade el permiso especificado
=Modifica el permiso actual con el permiso especificado (sobrescribir)
aTodos los usuarios (equivalente a "ugo")

El tercer conjunto de banderas ([rwx]) corresponde al :

Nombre de la banderaCorrespondencia
rPermiso de lectura
wAutorización por escrito
xPermiso de ejecución
s, S, etc...Permisos especiales

B. Ejemplos de uso de chmod

Estos son algunos ejemplos de cómo utilizar el comando chmod.

Puedes crear un archivo en blanco en tu máquina para practicar.

cd /tmp
touch fichier.txt
  • Dar al grupo permisos de lectura sobre el archivo "fichier.txt ":
chmod g+r fichier.txt
  • Elimina el permiso de ejecución para todos los usuarios en el script"script.sh":
chmod a-x script.sh
  • Añade permisos de lectura, escritura y ejecución al propietario :
chmod u+rwx script.sh
  • Eliminar todos los permisos para otros usuarios :
chmod o= fichier.txt
  • Añade derechos de lectura, escritura y ejecución al propietario, derechos de sólo lectura al grupo y ningún derecho a los demás:
chmod u=rwx,g=r,o= fichier.txt

V. Modificación de permisos con chmod: modo numérico

A. Chmod: la sintaxis del modo numérico

Hay otra forma de utilizar el comando chmod: el modo numérico. Aquí, usamos sólo valores numéricos para establecer permisos.

La sintaxis general es :

chmod [OPCIONES] [NUMERO] archivo

En realidad, el número es un valor formado por 3 o 4 dígitos. Cada valor se utiliza para especificar permisos para el usuario, luego el grupo y otros (en el orden habitual).

He aquí una tabla resumen con los tres permisos básicos:

Nombre del permisoCorrespondencia
lectura4
escribir2
ejecución1
no0

A cada permiso se le asigna un número específico. Dependiendo de los permisos que se definan, puede ser necesario realizar un "cálculo" para sumar el valor correspondiente a cada permiso.

Aquí tienes un ejemplo que te ayudará a entender esta lógica:

Linux - Permisos digitales

Este es un ejemplo de número de 3 dígitos. Si pasa 4 dígitos, el primero puede utilizarse para determinar un permiso especial.

Nombre del permiso especialCorrespondencia
SetUid4
SetGid2
StickyBit1
Sin cambios0

Esto significa que los valores "0750" y "750" son idénticos cuando se utiliza el comando chmod en modo numérico. Por el contrario, el valor "1777" se utiliza para determinar el sticky bit de un directorio.

Nota : el sticky bit es un atributo aplicado a un directorio que permite restringir el borrado o renombrado de archivos a su propietario, el propietario del directorio, o un administrador. Esto es válido incluso si otros usuarios tienen permisos de escritura en el directorio.

Por último, como regla general, debes evitar utilizar el valor "777", ya que da permisos de lectura, escritura y ejecución a todos los usuarios: es un permiso muy peligroso.

B. Ejemplos de uso de chmod

Ahora veremos algunos ejemplos de cómo utilizar el comando chmod en modo digital.

  • Asigna los permisos "rwx" al propietario, "rx" al grupo y "r" a los demás:
chmod 754 archivo.txt
  • Establecer permisos "rwx" al propietario de un directorio, de forma recursiva (modificar los permisos del árbol en masa):
chmod -R 700 carpeta/
  • Asigna derechos de lectura y escritura al propietario de una carpeta, y acceso de lectura sólo a los miembros del grupo y al resto de usuarios:
chmod 644 carpeta/

VI. Modificación de permisos masivos en Linux

Como extra, vamos a terminar con un ejemplo de cómo cambiar permisos en masa en una máquina Linux. Además de utilizar el comando chmod, también vamos a utilizar el comando find para identificar los archivos en los que queremos trabajar. Esto se puede aplicar a archivos o carpetas.

Aquí, definimos permisos de lectura/escritura para el propietario y permisos de lectura para el grupo y otros, en todos los archivos del directorio "/var/www/application".

# Método numérico
find /var/www/application -type f -exec chmod 644 {} ;

# Método simbólico
find /var/www/application -type f -exec chmod u=rw,go=r {} ;

Para seleccionar directorios en lugar de archivos, sustituya "-type f" por "-type d" en el comando find.

VII. Conclusión

Gracias a este tutorial, deberías ser capaz no sólo de entender mejor cómo funcionan los permisos en Linux, sino también de establecer permisos en un directorio, un archivo o un conjunto de elementos según tus necesidades. Para más información sobre el comando chmod, consulte la página man con "man chmod".

author avatar
Florian Burnel Co-founder of IT-Connect
Systems and network engineer, co-founder of IT-Connect and Microsoft MVP "Cloud and Datacenter Management". I'd like to share my experience and discoveries through my articles. I'm a generalist with a particular interest in Microsoft solutions and scripting. Enjoy your reading.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.