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,sen 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,sen 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,ten 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-xse ejecuta con EUID del propietario. Si el propietario esrooty el binario admite shell escape (GTFOBins), el proceso obtiene EUID 0;bash -pconserva 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+wsobre 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>; fijarumask 027/077en/etc/profiley/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