Permisos de Archivos
Comandos esenciales para gestionar permisos, propietarios y control de acceso en sistemas Linux.
Conceptos Básicos de Permisos
Section titled “Conceptos Básicos de Permisos”Tipos de permisos
Section titled “Tipos de permisos”- r (read): Permiso de lectura (4)
- w (write): Permiso de escritura (2)
- x (execute): Permiso de ejecución (1)
Categorías de usuarios
Section titled “Categorías de usuarios”- u (user): Propietario del archivo
- g (group): Grupo propietario
- o (others): Otros usuarios
- a (all): Todos los usuarios
Visualización de Permisos
Section titled “Visualización de Permisos”getfacl - Mostrar ACL
Section titled “getfacl - Mostrar ACL”Muestra listas de control de acceso extendidas. Permite ver permisos granulares más allá del modelo tradicional.
ls -l - Listar permisos detallados
Section titled “ls -l - Listar permisos detallados”Muestra permisos, propietarios y metadatos de archivos. Comando fundamental para auditoría de seguridad.
# Listar con permisosls -l
# Formato de salida:# -rwxr-xr-x 1 user group size date filename# |||||||||# ||||||||└─ Otros: r-x (lectura y ejecución)# |||||└──── Grupo: r-x (lectura y ejecución)# ||||└───── Usuario: rwx (lectura, escritura y ejecución)# |||└────── Tipo: - (archivo regular)# ||└─────── Sticky bit, SGID, SUID# |└──────── Número de enlaces# └───────── Tipo de archivo
# Mostrar archivos ocultos con permisosls -la
# Formato numérico de permisosstat -c "%a %n" *
# Información detallada de archivosstat filename
# Solo permisos en formato octalstat -c "%a" filename
# Formato personalizadostat -c "Permisos: %a, Propietario: %U, Grupo: %G" filenamePermisos Especiales (SUID, SGID, Sticky Bit)
Section titled “Permisos Especiales (SUID, SGID, Sticky Bit)”Además de los permisos básicos de lectura, escritura y ejecución, Linux utiliza tres bits de modo especiales para funcionalidades avanzadas. Estos son SUID (Set User ID), SGID (Set Group ID) y el Sticky Bit.
SUID (Set User ID)
Section titled “SUID (Set User ID)”El permiso SUID (Set User ID) se aplica a archivos ejecutables. Cuando un archivo con SUID se ejecuta, el proceso resultante hereda los permisos del propietario del archivo, no del usuario que lo ejecuta.
-
Uso Legítimo: Permite a usuarios normales realizar tareas que requieren privilegios elevados temporalmente. Ejemplos comunes:
/usr/bin/passwd: Permite a los usuarios cambiar su contraseña (modificando /etc/shadow, que es root-only)./bin/ping: Requiere acceso a sockets de red en modo raw.
-
Riesgos de Seguridad: Si un binario SUID tiene vulnerabilidades o permite ejecución de comandos arbitrarios, puede convertirse en vector de escalada de privilegios.
-
Visualización: En
ls -l, se muestra como unasen el permiso de ejecución del propietario:Terminal window -rwsr-xr-x 1 root root 64424 Mar 9 2019 /usr/bin/passwd
Establecer SUID
Section titled “Establecer SUID”# Modo Octal (4xxx)chmod 4755 archivo
# Modo Simbólicochmod u+s archivoSGID (Set Group ID)
Section titled “SGID (Set Group ID)”El permiso SGID (Set Group ID) tiene comportamientos distintos en archivos y directorios:
-
Archivos Ejecutables: Similar a SUID, pero el proceso hereda los permisos del grupo propietario del archivo.
- Ejemplo:
/usr/bin/wall(envía mensajes a todos los terminales, requiere acceso a dispositivos tty).
- Ejemplo:
-
Directorios: Los archivos creados dentro de un directorio con SGID heredarán el grupo propietario del directorio, no el grupo primario del usuario.
- Útil para directorios compartidos en equipos (ej: /var/www/html).
- Visualización: En
ls -l, se muestra como unasen el permiso de ejecución del grupo:Terminal window drwxrwsr-x 2 root developers 4096 Sep 21 15:00 /var/equipo/
Establecer SGID
Section titled “Establecer SGID”# Modo Octal (2xxx)chmod 2775 directorio
# Modo Simbólicochmod g+s directorioDiferencias Clave entre SUID y SGID
Section titled “Diferencias Clave entre SUID y SGID”| Característica | SUID | SGID |
|---|---|---|
| Aplicación | Solo archivos ejecutables | Archivos ejecutables y directorios |
| Herencia | Permisos del propietario | Permisos del grupo propietario |
| Uso principal | Ejecución temporal privilegiada | Compartir archivos en grupo |
| Representación | s en permisos de usuario | s en permisos de grupo |
| Valor octal | 4000 | 2000 |
Sticky Bit
Section titled “Sticky Bit”El Sticky Bit (o bit adhesivo) es un permiso que se aplica principalmente a directorios. Cuando un directorio tiene el Sticky Bit activado, los archivos dentro de ese directorio solo pueden ser renombrados o eliminados por su propietario, el propietario del directorio o el usuario root, incluso si otros usuarios tienen permisos de escritura sobre el directorio.
-
Propósito Principal: Proteger el contenido de directorios compartidos y de escritura pública, como
/tmpo/var/tmp. En estos directorios, múltiples usuarios necesitan crear archivos, pero no deben poder borrar o modificar los archivos de los demás. -
Uso Histórico (Obsoleto): Originalmente, el Sticky Bit se aplicaba a archivos ejecutables para indicarle al sistema operativo que mantuviera el programa en el área de intercambio (swap) después de su ejecución, agilizando cargas posteriores. Con los sistemas de memoria modernos, este uso ya no es relevante.
-
Visualización: Se muestra como una
t(minúscula) en la sección de permisos de “otros” si el permiso de ejecución también está presente. Si el permiso de ejecución para otros no está activo, se muestra como unaT(mayúscula).Terminal window # Ejemplo de /tmp, que tiene el Sticky Bit correctamente configuradols -ld /tmp# drwxrwxrwt 15 root root 12288 sep 19 10:00 /tmp
Cómo Establecer el Sticky Bit
Section titled “Cómo Establecer el Sticky Bit”-
Modo Octal: Se añade un
1al principio del código de permisos (valor1000).Terminal window # Establece permisos rwxrwxrwt (777 + Sticky Bit)chmod 1777 mi_directorio_compartido -
Modo Simbólico: Se utiliza el operador
+t.Terminal window # Añade el Sticky Bit al directoriochmod +t mi_directorio_compartido# Quita el Sticky Bitchmod -t mi_directorio_compartido
Aplicaciones en Pentesting
Section titled “Aplicaciones en Pentesting”El Sticky Bit es un mecanismo de defensa. Por lo tanto, desde la perspectiva de un pentester, el interés radica en encontrar directorios donde debería estar pero no está.
-
Búsqueda de Directorios Vulnerables: Un atacante buscará directorios que sean “world-writable” (cualquiera puede escribir en ellos) pero que no tengan el Sticky Bit. En estos directorios, un usuario malintencionado podría eliminar o renombrar archivos cruciales de otros usuarios o del sistema, lo que podría llevar a un ataque de Denegación de Servicio (DoS), secuestro de archivos o manipulación de datos.
Terminal window # Buscar directorios world-writable (permiso 2) sin Sticky Bit (permiso t)find / -type d -perm -o=w ! -perm +t -exec ls -ld {} \; 2>/dev/null -
Abuso de Directorios Compartidos para Staging: Aunque
/tmpy/var/tmpsuelen tener el Sticky Bit, son lugares comunes para que los atacantes guarden payloads, scripts o archivos temporales (staging) porque son directorios de escritura global. El Sticky Bit no impide que un atacante escriba y ejecute sus propios archivos. Es un lugar clave a monitorear durante una investigación forense y un buen sitio para alojar herramientas durante un pentest. -
Race Conditions: En escenarios muy específicos, la capacidad de crear archivos en directorios compartidos puede ser abusada en ataques de race condition, por ejemplo, intentando crear un archivo o un enlace simbólico con un nombre predecible antes de que un servicio con mayores privilegios lo haga.
Modificación de Permisos
Section titled “Modificación de Permisos”chmod - Cambiar permisos
Section titled “chmod - Cambiar permisos”Modifica permisos de archivos y directorios. Comando crítico para gestión de seguridad y acceso.
# Formato numérico (octal)chmod 755 filename # rwxr-xr-xchmod 644 filename # rw-r--r--chmod 600 filename # rw-------chmod 777 filename # rwxrwxrwx (¡PELIGROSO!)
# Formato simbólicochmod u+x filename # Agregar ejecución al usuariochmod g-w filename # Quitar escritura al grupochmod o=r filename # Solo lectura para otroschmod a+r filename # Lectura para todos
# Combinacioneschmod u+x,g-w,o=r filenamechmod ug+rw,o-rwx filename
# Recursivochmod -R 755 directory/
# Preservar permisos de directorios vs archivosfind /path -type f -exec chmod 644 {} \;find /path -type d -exec chmod 755 {} \;chattr - Cambiar atributos
Section titled “chattr - Cambiar atributos”Modifica atributos especiales de archivos. Puede hacer archivos inmutables o con otras características especiales.
# Establecer atributo inmutablechattr +i filename
# Quitar atributo inmutablechattr -i filename
# Establecer atributo de solo lecturachattr +a filename
# Quitar atributo de solo lecturachattr -a filename
# Recuperar archivo eliminadochattr +u filename
# Recursivochattr -R /dirname/lsattr - Listar atributos extendidos
Section titled “lsattr - Listar atributos extendidos”Muestra los atributos extendidos de archivos y directorios en sistemas de ficheros compatibles (como ext2, ext3, ext4). Estos atributos incluyen características como inmutabilidad (i), solo añadir (a), entre otros.
# Sintaxis básicalsattr [opciones] [archivo|directorio]Opciones comunes:
Section titled “Opciones comunes:”-R: Listar recursivamente directorios-a: Mostrar todos los archivos, incluyendo ocultos-d: Mostrar atributos de directorios en lugar de su contenido-v: Mostrar versión del archivo (para sistemas con versión de archivos)
Ejemplos:
Section titled “Ejemplos:”# Listar atributos de un archivo específicolsattr /etc/passwd
# Listar atributos recursivamente en un directoriolsattr -R /etc/
# Mostrar atributos de un directorio (no su contenido)lsattr -d /var/log/
# Listar todos los archivos (incluyendo ocultos) en un directoriolsattr -a ~/.ssh/Atributos comunes:
Section titled “Atributos comunes:”- i (Inmutable): Archivo no puede ser modificado, renombrado, borrado o enlazado
- a (Append Only): Solo se puede añadir contenido, no modificar ni borrar
- e (Extent format): Indica que el archivo usa extents para mapear bloques
- A (No atime updates): No actualiza el tiempo de acceso (atime) al archivo
Aplicaciones en Pentesting:
Section titled “Aplicaciones en Pentesting:”- Identificar archivos críticos protegidos con atributos (inmutables)
- Detectar configuraciones de seguridad que previenen modificaciones
- Buscar archivos de logs con atributo ‘a’ (solo añadir) que podrían ser manipulados
- Verificar si archivos sensibles (/etc/shadow, /etc/passwd) tienen atributos de protección
- Identificar directorios del sistema con atributos especiales
Nota:
lsattrsolo funciona en sistemas de ficheros que soportan atributos extendidos (ext*). No está disponible en todos los sistemas de ficheros.
Gestión de Propietarios
Section titled “Gestión de Propietarios”chown - Cambiar propietario
Section titled “chown - Cambiar propietario”Cambia el propietario y grupo de archivos. Fundamental para gestión de ownership y seguridad.
# Cambiar propietariochown newuser filename
# Cambiar propietario y grupochown newuser:newgroup filename
# Solo cambiar grupo (alternativa a chgrp)chown :newgroup filename
# Recursivochown -R user:group directory/
# Preservar enlaces simbólicoschown -h user:group symlinkchgrp - Cambiar grupo
Section titled “chgrp - Cambiar grupo”Cambia únicamente el grupo propietario de archivos. Útil para gestión granular de permisos de grupo.
# Cambiar grupochgrp newgroup filename
# Recursivochgrp -R newgroup directory/
# Cambiar a grupo del usuario actualchgrp $(id -gn) filenameControl de Acceso Avanzado
Section titled “Control de Acceso Avanzado”umask - Máscara de permisos por defecto
Section titled “umask - Máscara de permisos por defecto”Establece permisos por defecto para nuevos archivos. Importante para configuración de seguridad del sistema.
# Mostrar umask actualumask
# Establecer umaskumask 022 # Archivos: 644, Directorios: 755umask 077 # Archivos: 600, Directorios: 700
# Umask en formato simbólicoumask -Ssetfacl - Establecer ACL
Section titled “setfacl - Establecer ACL”Configura listas de control de acceso extendidas. Proporciona control de permisos más fino que chmod.
# Establecer permiso de lectura para un usuariosetfacl -m u:user:r filename
# Establecer permiso de escritura para un gruposetfacl -m g:group:w filename
# Quitar permiso de ejecución para otrossetfacl -m o:x filename
# Ver ACL de un archivogetfacl filenamesu - Cambiar usuario
Section titled “su - Cambiar usuario”# Cambiar a rootsu
# Cambiar a usuario específicosu username
# Cambiar con entorno completosu - username
# Ejecutar comando como otro usuariosu -c "command" usernamesudo - Ejecutar como superusuario
Section titled “sudo - Ejecutar como superusuario”# Ejecutar comando como rootsudo command
# Ejecutar como usuario específicosudo -u username command
# Cambiar a shell de rootsudo -i
# Editar archivo con privilegiossudo -e /etc/hosts
# Listar permisos sudo del usuariosudo -lAnálisis de Permisos para Pentesting
Section titled “Análisis de Permisos para Pentesting”Buscar archivos con permisos peligrosos
Section titled “Buscar archivos con permisos peligrosos”# Archivos world-writablefind / -perm -002 -type f 2>/dev/null
# Directorios world-writablefind / -perm -002 -type d 2>/dev/null
# Archivos SUID/SGIDfind / \( -perm -4000 -o -perm -2000 \) -type f 2>/dev/null
# Archivos sin propietariofind / -nouser -o -nogroup 2>/dev/null
# Archivos ejecutables por todosfind / -perm -111 -type f 2>/dev/nullAnálisis de configuración sudo
Section titled “Análisis de configuración sudo”# Verificar configuración sudosudo -l
# Archivos de configuración sudocat /etc/sudoersls -la /etc/sudoers.d/
# Usuarios con acceso sudogrep -E '^sudo|^admin|^wheel' /etc/groupBuscar vectores de escalada de privilegios
Section titled “Buscar vectores de escalada de privilegios”# Archivos SUID interesantesfind / -perm -4000 -type f 2>/dev/null | grep -E "(nmap|vim|find|bash|sh|python|perl|ruby)"
# Archivos de configuración modificablesfind /etc -writable -type f 2>/dev/null
# Scripts ejecutables en PATHecho $PATH | tr ':' '\n' | xargs -I {} find {} -writable -type f 2>/dev/nullEjemplos Prácticos
Section titled “Ejemplos Prácticos”Configuración segura de archivos web
Section titled “Configuración segura de archivos web”# Estructura típica de servidor webchown -R www-data:www-data /var/www/html/find /var/www/html -type d -exec chmod 755 {} \;find /var/www/html -type f -exec chmod 644 {} \;
# Archivos de configuración sensibleschmod 600 /etc/ssh/sshd_configchmod 600 /etc/shadowchmod 644 /etc/passwdAnálisis forense de permisos
Section titled “Análisis forense de permisos”# Generar reporte de permisosfind /home -type f -exec ls -l {} \; > permisos_home.txt
# Buscar cambios recientes en permisosfind / -type f -newermt "2024-01-01" -exec ls -l {} \; 2>/dev/null
# Comparar permisos con baselinediff <(find /etc -type f -exec stat -c "%a %n" {} \;) baseline_permisos.txtScripts de auditoría de seguridad
Section titled “Scripts de auditoría de seguridad”#!/bin/bashecho "=== AUDITORÍA DE PERMISOS ==="
echo "Archivos SUID:"find / -perm -4000 -type f 2>/dev/null
echo -e "\nArchivos world-writable:"find / -perm -002 -type f 2>/dev/null | head -10
echo -e "\nArchivos sin propietario:"find / -nouser -o -nogroup 2>/dev/null | head -10
echo -e "\nUsuarios con sudo:"grep -E '^sudo|^admin|^wheel' /etc/groupGestión de Contraseñas
Section titled “Gestión de Contraseñas”passwd - Cambiar contraseñas
Section titled “passwd - Cambiar contraseñas”# Cambiar contraseña propiapasswd
# Cambiar contraseña de otro usuario (root)passwd username
# Bloquear cuentapasswd -l username
# Desbloquear cuentapasswd -u username
# Forzar cambio en próximo loginpasswd -e usernameInformación de cuentas
Section titled “Información de cuentas”# Información de aging de contraseñaschage -l username
# Establecer expiración de contraseñachage -M 90 username
# Ver último cambio de contraseñapasswd -S usernameComandos de Emergencia
Section titled “Comandos de Emergencia”Recuperación de permisos
Section titled “Recuperación de permisos”# Restaurar permisos básicos del sistemachmod 755 /bin /usr/bin /sbin /usr/sbinchmod 644 /etc/passwdchmod 600 /etc/shadowchmod 755 /homechmod 1777 /tmp
# Reparar permisos de directorio homechmod 755 /home/usernamechown -R username:username /home/usernameVerificación de integridad
Section titled “Verificación de integridad”# Verificar permisos de archivos críticosls -l /etc/passwd /etc/shadow /etc/sudoers
# Verificar propietarios de archivos del sistemafind /bin /usr/bin -not -user root -exec ls -l {} \;Advertencia de Seguridad: Los permisos incorrectos pueden comprometer seriamente la seguridad del sistema. Siempre verifica los cambios antes de aplicarlos en producción. El comando
chmod 777nunca debe usarse en archivos sensibles.