Skip to content

Permisos de Archivos

Comandos esenciales para gestionar permisos, propietarios y control de acceso en sistemas Linux.

  • r (read): Permiso de lectura (4)
  • w (write): Permiso de escritura (2)
  • x (execute): Permiso de ejecución (1)
  • u (user): Propietario del archivo
  • g (group): Grupo propietario
  • o (others): Otros usuarios
  • a (all): Todos los usuarios

Muestra listas de control de acceso extendidas. Permite ver permisos granulares más allá del modelo tradicional.

Muestra permisos, propietarios y metadatos de archivos. Comando fundamental para auditoría de seguridad.

Terminal window
# Listar con permisos
ls -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 permisos
ls -la
# Formato numérico de permisos
stat -c "%a %n" *
# Información detallada de archivos
stat filename
# Solo permisos en formato octal
stat -c "%a" filename
# Formato personalizado
stat -c "Permisos: %a, Propietario: %U, Grupo: %G" filename

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

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 una s en el permiso de ejecución del propietario:

    Terminal window
    -rwsr-xr-x 1 root root 64424 Mar 9 2019 /usr/bin/passwd
Terminal window
# Modo Octal (4xxx)
chmod 4755 archivo
# Modo Simbólico
chmod u+s archivo

El permiso SGID (Set Group ID) tiene comportamientos distintos en archivos y directorios:

  1. 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).
  2. 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 una s en el permiso de ejecución del grupo:
    Terminal window
    drwxrwsr-x 2 root developers 4096 Sep 21 15:00 /var/equipo/
Terminal window
# Modo Octal (2xxx)
chmod 2775 directorio
# Modo Simbólico
chmod g+s directorio
CaracterísticaSUIDSGID
AplicaciónSolo archivos ejecutablesArchivos ejecutables y directorios
HerenciaPermisos del propietarioPermisos del grupo propietario
Uso principalEjecución temporal privilegiadaCompartir archivos en grupo
Representacións en permisos de usuarios en permisos de grupo
Valor octal40002000

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 /tmp o /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 una T (mayúscula).

    Terminal window
    # Ejemplo de /tmp, que tiene el Sticky Bit correctamente configurado
    ls -ld /tmp
    # drwxrwxrwt 15 root root 12288 sep 19 10:00 /tmp
  • Modo Octal: Se añade un 1 al principio del código de permisos (valor 1000).

    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 directorio
    chmod +t mi_directorio_compartido
    # Quita el Sticky Bit
    chmod -t mi_directorio_compartido

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

  1. 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
  2. Abuso de Directorios Compartidos para Staging: Aunque /tmp y /var/tmp suelen 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.

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

Modifica permisos de archivos y directorios. Comando crítico para gestión de seguridad y acceso.

Terminal window
# Formato numérico (octal)
chmod 755 filename # rwxr-xr-x
chmod 644 filename # rw-r--r--
chmod 600 filename # rw-------
chmod 777 filename # rwxrwxrwx (¡PELIGROSO!)
# Formato simbólico
chmod u+x filename # Agregar ejecución al usuario
chmod g-w filename # Quitar escritura al grupo
chmod o=r filename # Solo lectura para otros
chmod a+r filename # Lectura para todos
# Combinaciones
chmod u+x,g-w,o=r filename
chmod ug+rw,o-rwx filename
# Recursivo
chmod -R 755 directory/
# Preservar permisos de directorios vs archivos
find /path -type f -exec chmod 644 {} \;
find /path -type d -exec chmod 755 {} \;

Modifica atributos especiales de archivos. Puede hacer archivos inmutables o con otras características especiales.

Terminal window
# Establecer atributo inmutable
chattr +i filename
# Quitar atributo inmutable
chattr -i filename
# Establecer atributo de solo lectura
chattr +a filename
# Quitar atributo de solo lectura
chattr -a filename
# Recuperar archivo eliminado
chattr +u filename
# Recursivo
chattr -R /dirname/

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.

Terminal window
# Sintaxis básica
lsattr [opciones] [archivo|directorio]
  • -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)
Terminal window
# Listar atributos de un archivo específico
lsattr /etc/passwd
# Listar atributos recursivamente en un directorio
lsattr -R /etc/
# Mostrar atributos de un directorio (no su contenido)
lsattr -d /var/log/
# Listar todos los archivos (incluyendo ocultos) en un directorio
lsattr -a ~/.ssh/
  • 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
  1. Identificar archivos críticos protegidos con atributos (inmutables)
  2. Detectar configuraciones de seguridad que previenen modificaciones
  3. Buscar archivos de logs con atributo ‘a’ (solo añadir) que podrían ser manipulados
  4. Verificar si archivos sensibles (/etc/shadow, /etc/passwd) tienen atributos de protección
  5. Identificar directorios del sistema con atributos especiales

Nota: lsattr solo funciona en sistemas de ficheros que soportan atributos extendidos (ext*). No está disponible en todos los sistemas de ficheros.

Cambia el propietario y grupo de archivos. Fundamental para gestión de ownership y seguridad.

Terminal window
# Cambiar propietario
chown newuser filename
# Cambiar propietario y grupo
chown newuser:newgroup filename
# Solo cambiar grupo (alternativa a chgrp)
chown :newgroup filename
# Recursivo
chown -R user:group directory/
# Preservar enlaces simbólicos
chown -h user:group symlink

Cambia únicamente el grupo propietario de archivos. Útil para gestión granular de permisos de grupo.

Terminal window
# Cambiar grupo
chgrp newgroup filename
# Recursivo
chgrp -R newgroup directory/
# Cambiar a grupo del usuario actual
chgrp $(id -gn) filename

Establece permisos por defecto para nuevos archivos. Importante para configuración de seguridad del sistema.

Terminal window
# Mostrar umask actual
umask
# Establecer umask
umask 022 # Archivos: 644, Directorios: 755
umask 077 # Archivos: 600, Directorios: 700
# Umask en formato simbólico
umask -S

Configura listas de control de acceso extendidas. Proporciona control de permisos más fino que chmod.

Terminal window
# Establecer permiso de lectura para un usuario
setfacl -m u:user:r filename
# Establecer permiso de escritura para un grupo
setfacl -m g:group:w filename
# Quitar permiso de ejecución para otros
setfacl -m o:x filename
# Ver ACL de un archivo
getfacl filename
Terminal window
# Cambiar a root
su
# Cambiar a usuario específico
su username
# Cambiar con entorno completo
su - username
# Ejecutar comando como otro usuario
su -c "command" username
Terminal window
# Ejecutar comando como root
sudo command
# Ejecutar como usuario específico
sudo -u username command
# Cambiar a shell de root
sudo -i
# Editar archivo con privilegios
sudo -e /etc/hosts
# Listar permisos sudo del usuario
sudo -l
Terminal window
# Archivos world-writable
find / -perm -002 -type f 2>/dev/null
# Directorios world-writable
find / -perm -002 -type d 2>/dev/null
# Archivos SUID/SGID
find / \( -perm -4000 -o -perm -2000 \) -type f 2>/dev/null
# Archivos sin propietario
find / -nouser -o -nogroup 2>/dev/null
# Archivos ejecutables por todos
find / -perm -111 -type f 2>/dev/null
Terminal window
# Verificar configuración sudo
sudo -l
# Archivos de configuración sudo
cat /etc/sudoers
ls -la /etc/sudoers.d/
# Usuarios con acceso sudo
grep -E '^sudo|^admin|^wheel' /etc/group

Buscar vectores de escalada de privilegios

Section titled “Buscar vectores de escalada de privilegios”
Terminal window
# Archivos SUID interesantes
find / -perm -4000 -type f 2>/dev/null | grep -E "(nmap|vim|find|bash|sh|python|perl|ruby)"
# Archivos de configuración modificables
find /etc -writable -type f 2>/dev/null
# Scripts ejecutables en PATH
echo $PATH | tr ':' '\n' | xargs -I {} find {} -writable -type f 2>/dev/null
Terminal window
# Estructura típica de servidor web
chown -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 sensibles
chmod 600 /etc/ssh/sshd_config
chmod 600 /etc/shadow
chmod 644 /etc/passwd
Terminal window
# Generar reporte de permisos
find /home -type f -exec ls -l {} \; > permisos_home.txt
# Buscar cambios recientes en permisos
find / -type f -newermt "2024-01-01" -exec ls -l {} \; 2>/dev/null
# Comparar permisos con baseline
diff <(find /etc -type f -exec stat -c "%a %n" {} \;) baseline_permisos.txt
#!/bin/bash
echo "=== 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/group
Terminal window
# Cambiar contraseña propia
passwd
# Cambiar contraseña de otro usuario (root)
passwd username
# Bloquear cuenta
passwd -l username
# Desbloquear cuenta
passwd -u username
# Forzar cambio en próximo login
passwd -e username
Terminal window
# Información de aging de contraseñas
chage -l username
# Establecer expiración de contraseña
chage -M 90 username
# Ver último cambio de contraseña
passwd -S username
Terminal window
# Restaurar permisos básicos del sistema
chmod 755 /bin /usr/bin /sbin /usr/sbin
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 755 /home
chmod 1777 /tmp
# Reparar permisos de directorio home
chmod 755 /home/username
chown -R username:username /home/username
Terminal window
# Verificar permisos de archivos críticos
ls -l /etc/passwd /etc/shadow /etc/sudoers
# Verificar propietarios de archivos del sistema
find /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 777 nunca debe usarse en archivos sensibles.