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 passwd permite a los usuarios cambiar su propia contraseña. Este programa necesita modificar el archivo /etc/shadow, que solo es accesible para el usuario root.
  • Visualización de permisos: ls -l /usr/bin/passwd

    • Resultado: -rwsr-xr-x 1 root root 54232 sep 12 12:34 /usr/bin/passwd

  • Cómo funciona:

    • Cuando un usuario ejecuta passwd, el programa hereda los permisos del usuario root (propietario del archivo) para modificar el archivo protegido /etc/shadow.

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:

    1. Crea el directorio: mkdir /shared/projects
    2. Cambia el grupo del directorio: chgrp developers /shared/projects
    3. Activa el bit setgid: chmod g+s /shared/projects

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

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

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.

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:

    1. Crea el directorio: mkdir /shared/uploads
    2. Cambia los permisos para que todos puedan escribir: chmod 777 /shared/uploads
    3. Activa el sticky bit: chmod +t /shared/uploads

  • Visualización de permisos: ls -ld /shared/uploads

    • Resultado: drwxrwxrwt 2 usuario usuario 4096 ene 9 14:56 /shared/uploads

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