333.1 Control de Acceso Discrecional (DAC)
Introduccion
El Control de Acceso Discrecional (DAC) es el modelo de seguridad tradicional de Unix donde el propietario de un recurso decide quien puede acceder a el. Incluye permisos rwx, bits especiales (SUID, SGID, sticky), umask, ACLs POSIX y atributos extendidos.
Para el examen: Domina los permisos especiales (SUID/SGID/sticky), las ACLs POSIX (getfacl/setfacl) incluyendo ACLs por defecto y mascara, y los atributos extendidos con chattr.
Permisos Tradicionales Unix
Permisos Basicos (rwx)
| Permiso | Archivo | Directorio |
|---|---|---|
| r (4) | Leer contenido | Listar contenido |
| w (2) | Modificar contenido | Crear/eliminar archivos |
| x (1) | Ejecutar | Acceder (cd) al directorio |
# Ver permisos
ls -la archivo.txt
# -rw-r--r-- 1 usuario grupo 1024 Jan 15 10:00 archivo.txt
# Cambiar permisos (octal)
chmod 750 archivo.sh # rwxr-x---
# Cambiar permisos (simbolico)
chmod u+x,g-w,o= archivo.sh
# Cambiar propietario
chown usuario:grupo archivo.txt
# Cambiar solo grupo
chgrp nuevo_grupo archivo.txt
# Recursivo
chmod -R 750 /var/www/
chown -R www-data:www-data /var/www/Bits Especiales
SUID (Set User ID) - 4000
Cuando se establece en un ejecutable, el proceso se ejecuta con los permisos del propietario del archivo, no del usuario que lo ejecuta.
# Establecer SUID
chmod u+s archivo
chmod 4755 archivo
# Ejemplo: passwd tiene SUID para modificar /etc/shadow
ls -la /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
# Buscar archivos con SUID
find / -perm -4000 -type f 2>/dev/nullSGID (Set Group ID) - 2000
En ejecutables: el proceso hereda el grupo del archivo. En directorios: los nuevos archivos heredan el grupo del directorio.
# Establecer SGID
chmod g+s directorio/
chmod 2770 directorio/
# Ejemplo: directorio compartido
mkdir /datos/proyecto
chgrp equipo /datos/proyecto
chmod 2770 /datos/proyecto
# Todos los archivos nuevos tendran grupo "equipo"
# Buscar directorios con SGID
find / -perm -2000 -type d 2>/dev/nullSticky Bit - 1000
En directorios: solo el propietario del archivo (o root) puede eliminarlo, aunque otros tengan permiso de escritura en el directorio.
# Establecer sticky bit
chmod +t directorio/
chmod 1777 directorio/
# Ejemplo clasico: /tmp
ls -ld /tmp
# drwxrwxrwt 15 root root ... /tmp
# Buscar directorios con sticky bit
find / -perm -1000 -type d 2>/dev/nullPara el examen: SUID en archivos ejecutables es un riesgo de seguridad potencial. Audita regularmente archivos con SUID/SGID. SUID no funciona en scripts interpretados por seguridad.
umask
La umask define los permisos que se eliminan al crear nuevos archivos y directorios.
# Ver umask actual
umask # Formato octal (ej: 0022)
umask -S # Formato simbolico (ej: u=rwx,g=rx,o=rx)
# Establecer umask
umask 0027 # Archivos: 640, Directorios: 750
# Calcular permisos resultantes:
# Archivos: 666 - umask = permisos
# Directorios: 777 - umask = permisos
# Ejemplo con umask 0022:
# Archivos: 666 - 022 = 644 (rw-r--r--)
# Directorios: 777 - 022 = 755 (rwxr-xr-x)
# Ejemplo con umask 0077:
# Archivos: 666 - 077 = 600 (rw-------)
# Directorios: 777 - 077 = 700 (rwx------)| umask | Archivos | Directorios | Uso |
|---|---|---|---|
| 0022 | 644 | 755 | Por defecto |
| 0027 | 640 | 750 | Restrictivo |
| 0077 | 600 | 700 | Muy restrictivo |
| 0002 | 664 | 775 | Colaborativo |
Configuracion persistente:
# Para todos los usuarios: /etc/profile o /etc/bashrc
umask 0027
# Para un usuario: ~/.bashrc
umask 0077
# Para PAM: /etc/pam.d/common-session
session optional pam_umask.so umask=0027ACLs POSIX (Listas de Control de Acceso)
Las ACLs POSIX extienden el modelo de permisos tradicional permitiendo definir permisos para usuarios y grupos adicionales.
Requisitos
# El sistema de archivos debe montarse con soporte ACL
mount -o acl /dev/sda1 /datos
# O en /etc/fstab:
/dev/sda1 /datos ext4 defaults,acl 0 2
# Nota: ext4 y xfs soportan ACLs por defectoComandos Basicos
# Ver ACLs de un archivo
getfacl archivo.txt
# Salida ejemplo:
# file: archivo.txt
# owner: maria
# group: equipo
# user::rw-
# user:juan:rw-
# group::r--
# group:auditores:r--
# mask::rw-
# other::---
# Establecer ACL para un usuario
setfacl -m u:juan:rw archivo.txt
# Establecer ACL para un grupo
setfacl -m g:auditores:r archivo.txt
# Eliminar ACL de un usuario
setfacl -x u:juan archivo.txt
# Eliminar todas las ACLs
setfacl -b archivo.txt
# Copiar ACLs de un archivo a otro
getfacl archivo1.txt | setfacl --set-file=- archivo2.txtACLs por Defecto (Default ACLs)
Las ACLs por defecto se aplican a directorios y se heredan automaticamente por los nuevos archivos y subdirectorios creados dentro.
# Establecer ACL por defecto en directorio
setfacl -d -m u:juan:rwx /datos/proyecto/
setfacl -d -m g:equipo:rx /datos/proyecto/
# Ver ACLs por defecto
getfacl /datos/proyecto/
# default:user::rwx
# default:user:juan:rwx
# default:group::r-x
# default:group:equipo:r-x
# default:mask::rwx
# default:other::---
# Eliminar ACLs por defecto
setfacl -k /datos/proyecto/La Mascara (mask)
La mascara establece los permisos maximos efectivos para usuarios y grupos adicionales (no el propietario ni “otros”).
# Establecer mascara
setfacl -m m::rx archivo.txt
# Permisos efectivos:
# Si un usuario tiene ACL rw- pero la mascara es r-x
# Los permisos efectivos son r-- (interseccion)| Entrada ACL | Afectada por mask |
|---|---|
| user:: (propietario) | No |
| user:nombre: | Si |
| group:: (grupo propietario) | Si |
| group:nombre: | Si |
| mask:: | N/A (es la mascara) |
| other:: | No |
Para el examen:
chmoden un archivo con ACLs modifica la mascara, no los permisos del grupo propietario. Un+al final dels -lindica presencia de ACLs.
Opciones Avanzadas de setfacl
# Aplicar recursivamente
setfacl -R -m u:juan:rx /datos/
# Establecer ACLs desde archivo
setfacl --restore=backup_acls.txt
# Backup de ACLs
getfacl -R /datos/ > backup_acls.txt
# Modificar multiples entradas a la vez
setfacl -m u:juan:rwx,g:equipo:rx,o::- archivo.txtAtributos Extendidos (Extended Attributes)
xattr con getfattr / setfattr
Los atributos extendidos permiten almacenar metadatos adicionales en archivos.
# Establecer atributo
setfattr -n user.descripcion -v "Datos confidenciales" archivo.txt
# Ver atributos
getfattr archivo.txt
getfattr -n user.descripcion archivo.txt
# Listar todos los atributos con valores
getfattr -d archivo.txt
# Eliminar atributo
setfattr -x user.descripcion archivo.txtchattr - Atributos de Sistema de Archivos
chattr modifica atributos especiales del sistema de archivos (ext2/ext3/ext4).
# Hacer archivo inmutable (ni root puede modificarlo)
chattr +i archivo.txt
# Quitar inmutabilidad
chattr -i archivo.txt
# Solo permitir añadir contenido (append-only)
chattr +a archivo.log
# Ver atributos
lsattr archivo.txt
# ----i--------e-- archivo.txt
# Aplicar recursivamente
chattr -R +i /etc/configuracion/| Atributo | Letra | Descripcion |
|---|---|---|
| Immutable | i | No se puede modificar, eliminar, renombrar ni enlazar |
| Append-only | a | Solo se puede añadir contenido (ideal para logs) |
| No dump | d | Excluido de backups con dump |
| Secure deletion | s | Los bloques se sobreescriben al eliminar |
| Undeletable | u | El contenido se guarda al eliminar (permite recuperar) |
| No atime | A | No actualizar tiempo de acceso |
| Synchronous | S | Escrituras sincronas |
Para el examen:
chattr +ihace un archivo completamente inmutable: ni siquiera root puede modificarlo o eliminarlo sin quitar primero el atributo. Esto es muy util para proteger archivos criticos como/etc/passwd.
Trampas del examen
Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:
- SUID en directorios no tiene efecto — SUID (4000) solo funciona en archivos ejecutables binarios. En scripts interpretados (bash, python) se ignora por seguridad. SGID en directorios si tiene efecto (herencia de grupo). Nunca confundir los tres bits especiales y donde aplican
- SGID en directorios vs archivos — en ejecutables, SGID hace que el proceso herede el grupo del archivo; en directorios, los nuevos archivos heredan el grupo del directorio (no del creador). Esta distincion es critica para directorios compartidos
- Sticky bit solo en directorios — el sticky bit (1000) en directorios impide que usuarios borren archivos de otros (ejemplo clasico: /tmp). En archivos modernos no tiene efecto practico. Si se ve
ten el bit de ejecucion de otros (drwxrwxrwt), es sticky bit chmodmodifica la mascara ACL, no el grupo — en un archivo con ACLs POSIX, ejecutarchmod g=rxmodifica la mascara (mask), no los permisos del grupo propietario directamente. Esto afecta los permisos efectivos de todos los usuarios y grupos adicionales en las ACLs- ACL mask y permisos efectivos — la mask limita los permisos maximos de usuario nombrado, grupo propietario y grupo nombrado. Los permisos del propietario (user::) y otros (other::) NO se ven afectados por la mask. Los permisos efectivos son la interseccion de la ACL con la mask
+enls -lindica ACLs — si aparece un+al final de los permisos (ej:-rw-r--r--+), el archivo tiene ACLs extendidas. Sin el+, solo tiene permisos tradicionales. Un.indica contexto SELinux pero sin ACLs- ACLs por defecto solo en directorios — las default ACLs (
setfacl -d -m) solo se aplican a directorios y se heredan por archivos y subdirectorios nuevos creados dentro. No se pueden establecer default ACLs en archivos regulares chattr +ivschattr +a—+i(immutable) impide cualquier modificacion, eliminacion, renombramiento o enlace, incluso para root;+a(append-only) permite añadir contenido pero no modificar ni eliminar (ideal para logs). El examen puede presentar escenarios donde root no puede borrar un archivo, y la causa es+i- umask no es una resta aritmetica exacta — aunque se suele decir “666 - umask” para archivos, tecnicamente es una operacion AND NOT a nivel de bits. Con umask 0033, los archivos obtienen 644 (no 633). Para el examen, la simplificacion funciona en la mayoria de casos pero conoce la excepcion
setfacl -bvssetfacl -k—-belimina TODAS las ACLs (incluidas las por defecto);-kelimina solo las ACLs por defecto del directorio, manteniendo las ACLs de acceso. Confundir ambos puede dejar archivos sin las ACLs heredadas esperadas