Permisos especiales

El permiso setuid (o setgid) en un archivo ejecutable significa que el comando se ejecutará como usuario (o grupo) del archivo, no como el usuario que ejecutó el comando. Un ejemplo de este caso es el comando passwd:

[root@localhost ~]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 35504 Jul 16  2010 /usr/bin/passwd

En una larga lista, puede detectar los permisos setuid con una s minúscula, donde normalmente esperaría ver la x (permisos de ejecución del propietario). Si el propietario no posee permisos de ejecución, será reemplazada por una S mayúscula.

El sticky bit para un directorio establece una restricción especial sobre la eliminación de archivos: solo el propietario del archivo (y root) puede eliminar archivos del directorio. Un ejemplo es /tmp:

[root@localhost ~]$ ls -ld /tmp
drwxrwxrwt. 39 root root 4096 Feb  8 20:52 /tmp

En una lista larga, puede detectar los permisos sticky con una t minúscula, donde normalmente esperaría ver la x (otros permisos de ejecución). Si el otro no posee permisos de ejecución, será reemplazada por una T mayúscula.

Por último, setgid en un directorio significa que los archivos creados en el directorio heredarán la afiliación de grupos del directorio, en lugar de heredarla del usuario que la creó. Esto generalmente se usa en directorios colaborativos grupales para poder cambiar automáticamente un archivo del grupo privado predeterminado al grupo compartido.

En una larga lista, puede detectar los permisos setgid con una s minúscula, donde normalmente esperaría ver la x (permisos de ejecución del grupo). Si el grupo no posee permisos de ejecución, será reemplazada por una S mayúscula.

Tabla 4.1. Efectos de los permisos especiales en archivos y directorios

Permiso especial Efecto en los archivos Efecto en los directorios
u+s (suid) El archivo se ejecuta como el usuario propietario, no como el usuario que lo ejecutó. No hay efectos.
g+s (sgid) El archivo se ejecuta como el grupo propietario.
o+t (sticky) No hay efectos. Los usuarios con escribir en el directorio solo pueden eliminar los archivos de los que son propietarios, pero no pueden eliminar ni forzar el guardado de archivos cuyos propietarios sean otros usuarios.

Establecer permisos especiales

  • Simbólicamente: setuid = u+s; setgid = g+s; sticky = o+t
  • Numéricamente (cuarto dígito precedente): setuid = 4 ; setgid = 2 ; sticky = 1

Ejemplos

  • Agregue el setgid bit en directory:
[root@localhost ~]# chmod g+s directory
  • Establezca el setgid bit y los permisos de lectura/escritura/ejecución para el usuario y el grupo en directory:
[root@localhost ~]# chmod 2770 directory