Guía para entender chmod

En esta guía, analizamos la propiedad y los permisos de los archivos en los sistemas Unix/Linux, y cómo cambiarlos con chmod, a través de ejemplos prácticos y explicaciones.

Introducción

Los permisos de acceso a archivos y la seguridad están en el corazón de los sistemas operativos basados ​​en *nix. Los objetos de archivo pueden pertenecer a usuarios y/o grupos y, en ocasiones, deben compartirse con varias combinaciones de esos dos. Hay varias formas en los sistemas *nix de reforzar el uso compartido seguro de estos objetos.

Usamos la utilidad chmod para cambiar o modificar los permisos del archivo.

Esta guía analiza los permisos de archivo y cómo podemos cambiarlos con chmod. Si bien las explicaciones y el código deberían funcionar para casi todos los sistemas basados ​​en *nix, esta guía se escribió específicamente para Linux.

Propiedad y permisos

Antes de que podamos entrar en chmod, repasemos los conceptos básicos de la propiedad de archivos y directorios en Linux. Los archivos y directorios que encuentre o cree tienen permisos de acceso proporcionados en tres categorías de propietarios:

Propietarios Representación simbólica Descripción


Usuarios u El propietario principal del objeto de archivo/directorio Grupos g Un usuario puede ser parte de uno o varios grupos Otros o Otros usuarios que tampoco forman parte del grupo

Estos propietarios pueden tener uno o varios de los siguientes permisos de acceso asignados:

Permiso Representación simbólica Representación octal Descripción


Leer r 4 Permiso para leer, copiar del directorio Escribir w 2 Permiso para escribir/editar, eliminar, agregar nuevos archivos al directorio Ejecutar x 1 Permiso para ejecutar el binario

Obtengamos experiencia práctica con los comandos y permisos chmod creando primero un archivo vacío:

1
$ touch temp.txt

También usaremos el comando ls -l con mucha frecuencia para verificar los permisos de acceso. El comando ls se usa para listar archivos, pero el indicador -l los devuelve en el formato largo, que también incluye la información sobre los permisos de acceso:

1
2
$ ls -l temp.txt
-rw-r--r-- 1 ubuntu ubuntu 0 Apr 20 22:17 temp.txt

El lado izquierdo del resultado contiene información sobre los permisos de acceso. Sin embargo, no son tan intuitivas como las dos tablas de hace un momento. El resultado tiene varios componentes:

Fig.1 Lista larga y explicación de permisos

Los permisos se pueden dividir en tres partes, cada una correspondiente a los propietarios en el pedido: Usuarios, Grupos y Otros. Es posible que también haya notado el nombre de los propietarios, es decir, el usuario y el grupo al que pertenece el objeto.

El orden del permiso para cada codón de 3 es de estructura rwx. Si uno de estos permisos no está disponible, el permiso que falta se reemplaza con un guión (-) como rw-. Los otros detalles están relacionados con el archivo en sí: su tamaño, fecha de creación y nombre.

La utilidad chmod

La utilidad chmod nos ayuda a asignar permisos a objetos de archivo/directorio. Tiene un conjunto especial de argumentos, correspondientes a la propiedad y los permisos:

Permiso Representación simbólica Representación octal


leer r 4 escribir w 2 ejecutar x1 sin permiso - 0

Para cada propietario, estos permisos se pueden sumar (para Representación octal, por ejemplo, 4+2 = 6 denota permisos de lectura y escritura) o combinados (para Representación simbólica, por ejemplo, rw denota permisos de lectura y escritura).

Esta es la clave para comprender cómo funciona el comando chmod. Modifiquemos los permisos de acceso del archivo temp.txt, y permitamos permisos de lectura, escritura y ejecución al Usuario, pero no permitamos cualquier acceso al Grupo y Otros.

Puede usar Representación octal o Representación simbólica para esto:

1
$ chmod 700 temp.txt

Fig.2 representación de chmod

La notación octal - 700 se puede descomponer como:

  • La primera posición del entero octal corresponde al Usuario y el número 7 en sí mismo es una representación octal de todos los permisos (rwx), es decir, 4+2+1 = 7.
  • Las posiciones del segundo y tercer octal entero corresponden al Grupo y Otros, donde el número 0 indica que no hay permisos para acceder al objeto.

Echemos un vistazo al permiso en el archivo temp.txt ahora:

1
2
$ ls -l temp.txt
-rwx------ 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt

Podemos realizar el mismo comando y asignar los permisos de la misma manera si reescribimos el argumento 700 usando la notación simbólica:

1
$ chmod u+rwx,g-rwx,o-rwx temp.txt

Quitamos permisos usando un signo - y agregamos +. Cuando se utiliza la representación simbólica, los propietarios se separan con comas ,. Aquí, hemos agregado el permiso rwx a u, pero lo hemos eliminado de g y o.

Esto da como resultado los mismos permisos de acceso:

1
2
$ ls -l temp.txt
-rwx------ 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt

Ahora, consideremos otro comando:

1
$ chmod u+rwx,g-rw+x,o-rw+x temp.txt

Aquí, hemos entrelazado ventajas y desventajas:

  • 'u+rwx' indica que los permisos de lectura, escritura y ejecución se otorgan al Usuario.
  • 'g-rw+x' y 'o-rw+x' muestran que el Grupo y los Otros tienen prohibido realizar cualquiera de las operaciones de lectura/escritura pero pueden realizar ejecuciones.

Esto es equivalente a chmod 711 temp.txt usando representación octal.

Revisemos el archivo nuevamente:

1
2
$ ls -l temp.txt
-rwx--x--x 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt

También podemos usar un signo '=' para establecer/sobrescribir permisos para el propietario correspondiente. El comando mencionado anteriormente también podría escribirse como:

1
$ chmod u=rwx,g=x,w=x temp.txt

Esto, una vez más, da como resultado:

1
2
$ ls -l temp.txt
-rwx--x--x 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt

Uso avanzado de chmod: SUID, GUID y Sticky Bits

Ahora que los conceptos básicos de chmod están claros, avancemos un paso más revisando un conjunto adicional de permisos especiales de ejecución/eliminación que actúan como el cuarto nivel de seguridad para el existente. permisos de lectura, escritura y ejecución. Éstos incluyen:

Permiso especial Representación simbólica Representación octal Descripción


SUID (Establecer ID de usuario) rw**s**------ 4 Permiso de solo ejecución definido en el nivel de Usuario. Se utiliza para proporcionar privilegios de usuario a quienquiera que ejecute los archivos dentro de los objetos del directorio. SGID (Establecer ID de grupo) ---rw**s**--- 2 Permiso de solo ejecución definido en el nivel de Grupo. Se utiliza para proporcionar privilegios similares a los de un grupo a quien ejecuta los archivos dentro de los objetos del directorio. Sticky Bit ------rw**t** 1 Definido en el nivel Otros. Evita que el archivo u objeto se elimine. Solo el Propietario o Raíz puede eliminar el archivo u objeto.

Al llamar a la utilidad chmod y establecer el argumento, el permiso especial precede a los permisos normales. Si queremos agregar un permiso especial a nuestro argumento regular 700, simplemente agregamos un dígito de antemano:

1
2
3
$ chmod 5700 temp.txt
$ ls -l temp.txt
-rws-----T 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt

Aquí, el 5 define la suma de 4+1, que es una combinación de los permisos SUID y Sticky Bit. 700 representa el permiso 'rwx' solo para el Propietario. SUID anula el permiso del propietario, y quienquiera que ejecute el archivo siempre se ejecutará como el propietario del archivo. Además de esto, solo el propietario del archivo podrá eliminarlo. En la salida, observe la presencia del carácter 'T', que denota que el Sticky Bit está activado.

Reescribamos el comando, usando representación simbólica:

1
2
3
$ chmod u+srwx,g-rwx,o+t-rwx temp.txt
$ ls -l temp.txt
-rws-----T 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt

Desglosemos el argumento por comas, ya que se está haciendo un poco largo:

  • u+srwx: el usuario tiene un permiso SUID adjunto, junto con rwx.
  • g-rwx: El grupo carece de los permisos rwx.
  • o+t-rwx: +t denota la adición de un permiso Sticky Bit y los demás están desprovistos de los permisos rwx.

Si tiene otro usuario, intente cambiar a ese usuario y verifique si puede eliminar el archivo. Debería recibir un mensaje como este:

1
2
3
$ sudo su unknown
$ rm temp.txt
rm: remove write-protected regular empty file 'temp.txt'?

Conclusión

En esta guía, aprendimos sobre la propiedad y los permisos de archivos y directorios en Linux. Luego usamos chmod para modificarlos. Estos comandos pueden ser bastante útiles para proteger los archivos o directorios con mucha facilidad en los sistemas operativos basados ​​en *nix. *nix.