Permisos de archivos especiales en Linux: SUID, GUID y Sticky Bit

Los permisos y la propiedad de los archivos son el concepto de seguridad básico y esencial en Linux. Probablemente ya estés familiarizado con estos términos. Por lo general, se ve así:

Permisos de archivo regulares

Además de estos permisos regulares, hay algunos permisos de archivos especiales y no muchos usuarios de Linux lo saben.

Permisos especiales de Linux: SUID, GUID y Sticky Bit

Para comenzar a hablar de permisos especiales, voy a suponer que tiene algún conocimiento de los permisos básicos de archivos. De lo contrario, lea nuestra excelente guía que explica el permiso de archivo de Linux.

Ahora les mostraré algunos permisos especiales con letras nuevas en el sistema de archivos de Linux.

En esto exampleel comando passwd, encargado de cambiar la contraseña de un usuario, tiene la letra s en el mismo lugar que esperamos ver x o -, para permisos de usuario. Es importante notar que este archivo pertenece al usuario raíz y al grupo raíz.

Con este permiso no es necesario dar sudo acceda a un usuario específico cuando desee que ejecute algún script raíz.

¿Qué es SUID?

Cuando el bit SUID se establece en un archivo ejecutable, esto significa que el archivo se ejecutará con los mismos permisos que el propietario del archivo ejecutable.

Permiso de archivo especial Suid en Linux

Hagamos una práctica example. Si observa el archivo ejecutable binario del comando passwd, tiene el bit SUID establecido.

linuxhandbook:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 22  2019 /usr/bin/passwd

Esto significa que cualquier usuario que ejecute el comando passwd lo ejecutará con el mismo permiso que el root.

¿Cuál es el beneficio? El comando passwd necesita editar archivos como /etc/passwd, /etc/shadow para cambiar la contraseña. Estos archivos son propiedad de root y solo pueden ser modificados por root. Pero gracias a la bandera setuid (bit SUID), un usuario regular también podrá modificar estos archivos (que son propiedad de root) y cambiar su contraseña.

Esta es la razón por la que puede usar el comando passwd para cambiar su propia contraseña a pesar de que los archivos que modifica este comando son propiedad de root.

¿Por qué un usuario normal no puede cambiar la contraseña de otros usuarios?

Tenga en cuenta que un usuario normal no puede cambiar las contraseñas de otros usuarios, solo para sí mismo. ¿Pero por qué? Si puede ejecutar el comando passwd como un usuario normal con los mismos permisos que root y modificar los archivos como /etc/passwd, ¿por qué no puede cambiar la contraseña de otros usuarios?

Si revisas el código para el comando passwd, encontrará que verifica el UID del usuario cuya contraseña se modifica con el UID del usuario que ejecutó el comando. Si no coincide y si el root no ejecutó el comando, arroja un error.

El concepto setuid/SUID es engañoso y debe utilizarse con la máxima cautela, de lo contrario dejará brechas de seguridad en su sistema. Es un concepto de seguridad esencial y muchos comandos (como el comando ping) y programas (como sudo) utilizarlo.

Ahora que comprende el concepto SUID, veamos cómo configurar el bit SUID.

¿Cómo configurar el bit SUID?

Encuentro la forma simbólica más fácil al configurar el bit SUID. Puede usar el comando chmod de esta manera:

chmod u+s file_name

Aquí hay un example:

linuxhandbook:~$ ls -l test.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

También puede utilizar la forma numérica. Solo necesita agregar un cuarto dígito a los permisos normales. El número octal utilizado para establecer SUID es siempre 4.

linuxhandbook:~$ ls -l test2.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:53 test2.txt
linuxhandbook:~$ chmod 4766 test2.txt
linuxhandbook:~$ ls -l test2.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:54 test2.txt

¿Cómo eliminar SUID?

Puede usar el modo simbólico en el comando chmod de esta manera:

chmod u-s test.txt

O bien, use la forma numérica con 0 en lugar de 4 con los permisos que desea establecer:

chmod 0766 test2.txt

Diferencia entre s minúscula y S mayúscula como bit SUID

¿Recuerda la definición de SUID? Permite que un archivo sea ejecutado con los mismos permisos que el propietario del archivo.

Pero, ¿qué pasa si el archivo no tiene un bit de ejecución establecido en primer lugar? Me gusta esto:

linuxhandbook:~$ ls -l test.txt
-rw-rw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt

Si configura el bit SUID, mostrará una S mayúscula, no una s pequeña:

linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwSrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

El indicador S como SUID significa que hay un error que debe investigar. Desea que el archivo se ejecute con el mismo permiso que el propietario, pero no hay permiso de ejecución en el archivo. Lo que significa que ni siquiera el propietario puede ejecutar el archivo y si el archivo no se puede ejecutar, no obtendrá el permiso como propietario. Esto falla todo el punto de establecer el bit SUID.

¿Cómo encontrar todos los archivos con SUID establecido?

Si desea buscar archivos con este permiso, use el comando de búsqueda en la terminal con la opción -perm.

find / -perm /4000

¿Qué es SGID?

SGID es similar a SUID. Con el conjunto de bits SGID, cualquier usuario que ejecute el archivo tendrá los mismos permisos que el propietario del grupo del archivo.

Su beneficio está en el manejo del directorio. Cuando se aplica el permiso SGID a un directorio, todos los subdirectorios y archivos creados dentro de este directorio obtendrán la misma propiedad de grupo que el directorio principal (no la propiedad de grupo del usuario que creó los archivos y directorios).

Permiso de archivo especial SGID en Linux

Abra su terminal y verifique el permiso en el archivo /var/local:

linuxhandbook:~$ ls -ld /var/local
drwxrwsr-x 1 root staff 512 Apr 24  2018 /var/local

Esta carpeta /var/local tiene la letra ‘s’ en el mismo lugar donde espera ver ‘x’ o ‘-‘ para los permisos de grupo.

Un práctico example de SGID es con servidor samba para compartir archivos en su red local. Se garantiza que todos los archivos nuevos no perderán los permisos deseados, sin importar quién los haya creado.

¿Cómo configurar SGID?

Puede configurar el bit SGID en modo simbólico de esta manera:

chmod g+s directory_name

Aquí hay un example:

linuxhandbook:~$ ls -ld folder/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
linuxhandbook:~$ chmod g+s folder
linuxhandbook:~$ ls -ld folder/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/

También puede utilizar la forma numérica. Solo necesita agregar un cuarto dígito a los permisos normales. El número octal utilizado para SGID es siempre 2.

linuxhandbook:~$ ls -ld folder2/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
linuxhandbook:~$ chmod 2775 folder2
linuxhandbook:~$ ls -ld folder2/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/

¿Cómo quitar el bit SGID?

Simplemente use -s en lugar de +s así:

chmod g-s folder

Eliminar SGID es lo mismo que eliminar SGID. Use el 0 adicional antes de los permisos que desea establecer:

chmod 0755 folder

Cómo encontrar archivos con SGID configurado en Linux

Para encontrar todos los archivos con el conjunto de bits SGID, use este comando:

find . -perm /2000

¿Qué es un bit adhesivo?

El sticky bit funciona en el directorio. Con el sticky bit establecido en un directorio, todos los archivos en el directorio solo pueden ser eliminados o renombrados por los propietarios del archivo o por la raíz.

Bit adhesivo en Linux

Esto se usa normalmente en el directorio /tmp que funciona como la papelera de archivos temporales.

linuxhandbook:~$ ls -ld /tmp
drwxrwxrwt 1 root root 512 Apr 12 13:24 /tmp

Como puede ver, la carpeta /tmp, tiene la letra t en el mismo lugar que esperamos ver X o para otros permisos. Esto significa que un usuario (excepto root) no puede eliminar los archivos temporales creados por otros usuarios en el directorio /tmp.

¿Cómo configurar el bit adhesivo?

Como siempre, puede usar tanto el modo simbólico como el numérico para configurar el sticky bit en Linux.

chmod +t my_dir

Aquí hay un example:

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
linuxhandbook:~$ chmod +t my_dir/
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/

La forma numérica es agregar un cuarto dígito a los permisos normales. El número octal utilizado para sticky bit es siempre 1.

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
linuxhandbook:~$ chmod 1775 tmp2/
linuxhandbook:~$ ls -ld tmp2/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/

Cómo quitar la parte adhesiva:

Puedes usar el modo simbólico:

chmod -t my_dir

O el modo numérico con 0 antes de los permisos regulares:

chmod 0775 tmp2

Cómo encontrar archivos con sticky bit configurado en Linux

Este comando devolverá todos los archivos/directorios con el conjunto de bits adhesivos:

linuxhandbook:~$ find . -perm /1000

Si el directorio no tiene el permiso de ejecución establecido para todos, establecer un bit fijo hará que se muestre T en lugar de t. Una indicación de que las cosas no son del todo correctas con el bit pegajoso.

Conclusión

Pondré esta imagen aquí para recordar lo que acabas de aprender:

Explicación de los permisos especiales de Linux

Esta flexibilidad para administrar carpetas, archivos y todos sus permisos es tan importante en el trabajo diario de un administrador de sistemas. Puede ver que todos esos permisos especiales no son tan difíciles de entender, pero deben usarse con la mayor precaución.

Espero que este artículo le haya dado una buena comprensión de SUID, GUID y Sticky Bit en Linux. Si tiene preguntas o sugerencias, por favor deje un comentario a continuación.

Related Posts