GNU/Linux >> Tutoriales Linux >  >> Linux

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. Suele tener este aspecto:

Además de estos permisos regulares, existen algunos permisos de archivo especiales y no muchos usuarios de Linux lo conocen.

Para comenzar a hablar de permisos especiales, voy a suponer que tiene algún conocimiento de los permisos básicos de archivos. Si no es así, 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 este ejemplo, el comando passwd, responsable de cambiar la contraseña de un usuario, tiene la letra s en el mismo lugar 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 necesita 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.

Pongamos un ejemplo práctico. 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 al indicador setuid (bit SUID), un usuario normal 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 verifica el código del 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) lo utilizan.

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

He aquí un ejemplo:

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 siempre es 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, utilice la forma numérica con 0 en lugar de 4 con los permisos que desee 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? Así:

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).

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 permisos de grupo.

Un ejemplo práctico de SGID es con el 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 así:

chmod g+s directory_name

He aquí un ejemplo:

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 siempre es 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 eliminar el bit SGID?

Solo usa -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-sticky?

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

Normalmente se usa en el directorio /tmp que funciona como 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 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 sticky bit?

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

chmod +t my_dir

He aquí un ejemplo:

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 el sticky bit siempre es 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 el bit adhesivo:

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 fijos:

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 adhesivo.

Conclusión

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

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 máxima 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, deje un comentario a continuación.


Linux
  1. Conceptos básicos de los permisos de archivos de Linux

  2. Permisos de Linux:una introducción a chmod

  3. Permisos de Linux:SUID, SGID y sticky bit

  4. Linux chmod y chown:cómo cambiar los permisos y la propiedad de los archivos en Linux

  5. ¿Qué es Sticky Bit, SUID y SGID en Linux?

Comprender los permisos de archivos de Linux

Comando Chmod en Linux (Permisos de archivo)

Permisos y propiedad de archivos de Linux explicados con ejemplos

UNIX/Linux:Cómo usar Sticky Bit en directorios y archivos

Comprender los permisos básicos de archivos y la propiedad en Linux

Cómo administrar permisos/propiedades de archivos y directorios en Linux