← Blog

Administrar Permisos en Linux

Modelo de permisos POSIX: setuid/setgid, sticky bit, chmod simbólico y octal, umask y auditoría de bits privilegiados.

Administrar Permisos en Linux

Operational Scope & Technical Objective

Los permisos POSIX se resuelven sobre tres clases de sujeto — owner (u), group (g) y other (o) — y tres bits por clase: read (r=4), write (w=2) y execute (x=1). El mnemónico 421 ugo traduce cualquier modo octal a sus bits: 7=rwx, 6=rw-, 5=r-x, 4=r--. La semántica del bit x depende del tipo de objeto: en un archivo habilita su ejecución; en un directorio permite atravesarlo y resolver nombres en su interior, de modo que sin x sobre un directorio no se puede cd ni acceder a sus entradas aunque r esté fijado.

Sobre los nueve bits base se superponen tres special bits, codificados en un cuarto dígito octal y visibles como s/t en ls -l:

  • setuid (SUID, chmod 4000, s en clase owner): el proceso se ejecuta con el effective UID (EUID) del propietario del archivo, no el del usuario que lo invoca.
  • setgid (SGID, chmod 2000, s en clase group): el proceso se ejecuta con el effective GID del grupo del archivo; además, cualquier archivo creado dentro de un directorio con SGID hereda el grupo de ese directorio en lugar del grupo primario del creador.
  • sticky bit (chmod 1000, t en clase other): sobre un directorio world-writable (p.ej. /tmp), solo el propietario del archivo, el propietario del directorio o root pueden borrarlo o renombrarlo.

En ls -l una letra mayúscula (S, T) indica special bit fijado sin el bit x correspondiente; minúscula (s, t) indica que x también está presente. setuid sobre directorios no tiene efecto: los directorios solo reaccionan a setgid (herencia de grupo) y a sticky.

High-Impact Syntax & Command Cheatsheet

# Modo simbólico (relativo y absoluto)
chmod g-w ChangeLog            # quita write al grupo
chmod u+rwx,g+r,o= ChangeLog  # owner rwx, grupo r, others sin bits
chmod a=,u=r ChangeLog        # todos a 0; owner con solo r

# Modo octal (absoluto)
chmod 744 ChangeLog           # rwxr--r--
chmod 664 hello.txt           # rw-rw-r--

# Special bits (cuarto dígito octal)
chmod 4755 ./prog             # setuid + rwxr-xr-x
chmod 2755 ./dir              # setgid + rwxr-xr-x
chmod 1777 /tmp               # sticky + rwxrwxrwx

# Propiedad
chown mike hello.txt          # cambia el owner
chgrp mike hello.txt          # cambia el grupo
chown mike:mike hello.txt     # ambos de una vez

# Inspección y auditoría
ls -la
stat -c '%a %U:%G %n' hello.txt              # modo octal, owner:group, nombre
find / -type f -perm -4000 -ls 2>/dev/null   # binarios con SUID
find / -type f -perm -2000 -ls 2>/dev/null   # binarios con SGID
find / -type d -perm -1000 -ls 2>/dev/null   # directorios con sticky

# Máscara de creación de archivos
umask           # octal actual, p.ej. 022
umask 027       # fija la máscara de la sesión

Relación umask ↔ modo: los archivos se crean como 666 & ~umask y los directorios como 777 & ~umask. Con umask 022 los archivos nuevos quedan 644 y los directorios 755; con umask 077, 600/700.

Real-World Offensive/Defensive Scenarios

  • Escalada por SUID/SGID (ofensivo): un binario con modo -rwsr-xr-x se ejecuta con EUID del propietario. Si el propietario es root y el binario admite shell escape (GTFOBins), el proceso obtiene EUID 0; bash -p conserva los EUID sin reinicializarlos. Auditoría inicial de bits:

    find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null   # SUID
    find / -user root -perm -6000 -exec ls -ldb {} \; 2>/dev/null   # SETGID
    
  • Archivos y directorios world-writable (defensivo/ofensivo): el bit o+w sobre un archivo ejecutado por root (cron, script SUID) o sobre su ruta de carga permite sustituir el ejecutable:

    find / -path /proc -prune -o -type f -perm -o+w -print 2>/dev/null
    find / -path /proc -prune -o -type d -perm -o+w -print 2>/dev/null
    
  • Hardening: retirar SUID de binarios no imprescindibles con chmod -s <binario>; fijar umask 027/077 en /etc/profile y /etc/bash.bashrc; aplicar SGID en directorios compartidos de equipo para que los archivos nuevos hereden el grupo correcto.

Referencia del modelo chmod/umask: http://www.tutonics.com/2012/12/linux-file-permissions-chmod-umask.html