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
passwd
permite 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
s
en 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:
/tmp
es 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
t
en los permisos de «otros» indica que el sticky bit está activo.
- La
- Resultado:
Ejemplo 2: Directorio compartido
- Propósito: Un directorio llamado
/shared/uploads
permite 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 |