Permisos especiales (setuid, setgid, sticky bit)
1. Setuid (Set User ID)
Explicación:
- Cuando se establece el setuid en un archivo ejecutable, cualquier usuario que lo ejecute temporalmente adquiere los privilegios del propietario del archivo, no los suyos propios.
- Esto es útil para programas que requieren permisos elevados para realizar ciertas tareas, incluso si son ejecutados por usuarios con menos privilegios.
Ejemplo típico: Comando passwd
- Propósito: El comando
passwdpermite a los usuarios cambiar su propia contraseña. Este programa necesita modificar el archivo/etc/shadow, que solo es accesible para el usuarioroot. - Visualización de permisos:
ls -l /usr/bin/passwd- Resultado:
-rwsr-xr-x 1 root root 54232 sep 12 12:34 /usr/bin/passwd
- Resultado:
- Cómo funciona:
- Cuando un usuario ejecuta
passwd, el programa hereda los permisos del usuarioroot(propietario del archivo) para modificar el archivo protegido/etc/shadow.
- Cuando un usuario ejecuta
Configuración de Setuid:
- Activa el bit setuid:
chmod u+s archivo - Activa el bit setuid:
chmod 4XXX archivo
2. Setgid (Set Group ID)
Explicación:
- Cuando se aplica a un archivo ejecutable, permite que el programa se ejecute con los permisos del grupo propietario del archivo, en lugar del grupo del usuario que lo ejecuta.
- Cuando se aplica a un directorio, asegura que todos los archivos creados dentro de él hereden el grupo del directorio, lo que es útil para proyectos colaborativos.
Ejemplo 1: Directorio compartido
- Propósito: Crear un directorio donde todos los archivos pertenezcan al mismo grupo, independientemente de quién los cree.
- Pasos:
- Crea el directorio:
mkdir /shared/projects - Cambia el grupo del directorio:
chgrp developers /shared/projects - Activa el bit setgid:
chmod g+s /shared/projects
- Crea el directorio:
- Visualización de permisos:
ls -ld /shared/projects - Resultado:
drwxr-sr-x 2 usuario developers 4096 ene 9 14:56 /shared/projects- La
sen los permisos del grupo indica que setgid está activo.
- La
Ejemplo 2: Comando crontab
- Propósito: Permite que los usuarios editen sus tareas programadas almacenadas en directorios administrados por el grupo
crontab. - Visualización de permisos:
ls -l /usr/bin/crontab- Resultado:
-rwxr-sr-x 1 root crontab 37520 sep 12 12:34 /usr/bin/crontab
- Resultado:
Configuración de Setgid:
- Activa el bit setgid:
chmod g+s archivo_o_directorio - Activa el bit setgid:
chmod 2XXX archivo_o_directorio
3. Sticky Bit
Explicación:
- Cuando se aplica a un directorio, el sticky bit garantiza que los archivos dentro del directorio solo puedan ser eliminados o renombrados por el propietario del archivo, el propietario del directorio o el administrador.
- Es útil en directorios donde varios usuarios tienen permisos de escritura, como
/tmp, para evitar interferencias entre usuarios.
Ejemplo 1: Directorio /tmp
- Propósito:
/tmpes un directorio de uso común donde los usuarios almacenan archivos temporales. Para evitar que un usuario elimine los archivos de otro, el sticky bit está activado. - Visualización de permisos:
ls -ld /tmp- Resultado:
drwxrwxrwt 1 root root 4096 ene 9 14:56 /tmp- La
ten los permisos de «otros» indica que el sticky bit está activo.
- La
- Resultado:
Ejemplo 2: Directorio compartido
- Propósito: Un directorio llamado
/shared/uploadspermite a varios usuarios subir archivos, pero cada usuario solo puede eliminar sus propios archivos. - Pasos:
- Crea el directorio:
mkdir /shared/uploads - Cambia los permisos para que todos puedan escribir:
chmod 777 /shared/uploads - Activa el sticky bit:
chmod +t /shared/uploads
- Crea el directorio:
- Visualización de permisos:
ls -ld /shared/uploads- Resultado:
drwxrwxrwt 2 usuario usuario 4096 ene 9 14:56 /shared/uploads
- Resultado:
Configuración del Sticky Bit:
- Activa el sticky bit:
chmod o+t directorio - Activa el sticky bit:
chmod 1XXX directorio
Ejemplos
| Permiso | Explicación | Ejemplo | Ubicación | Comando para verificar |
|---|---|---|---|---|
| setuid | Ejecuta como el propietario del archivo | passwd |
/usr/bin/passwd |
ls -l /usr/bin/passwd |
| setgid | Ejecuta como el grupo del archivo; hereda grupo | projects o crontab |
/shared/projects, /usr/bin/crontab |
ls -ld o ls -l |
| sticky | Solo el propietario puede eliminar sus archivos | Directorio /tmp o /uploads |
/tmp, /shared/uploads |
ls -ld |