Find Files and Directories - Linux Fundamentals
Objetivo
Dominar las herramientas de búsqueda de archivos en Linux: which, find y locate. Aprender a filtrar resultados por nombre, tamaño, fecha, permisos y propietario.
Introducción
En auditorías de seguridad, la capacidad de encontrar archivos específicos es fundamental. Ya sea buscando archivos de configuración, backups, scripts o binarios, conocer las herramientas de búsqueda adecuadas puede ahorrar horas de trabajo manual.
Escenario
Estás realizando una auditoría en un servidor Linux. Necesitas encontrar: 1. Archivos de configuración modificados recientemente 2. Backups que puedan contener información sensible 3. Binarios específicos disponibles en el sistema
Ejercicios Prácticos
Ejercicio 1: Búsqueda Avanzada con Filtros
Objetivo: Encontrar archivo .conf creado después de 2020-03-03 con tamaño entre 25k y 28k.
find / -type f -name "*.conf" -newermt 2020-03-03 -size +25k -size -28k 2>/dev/nullResultado:
/usr/share/drirc.d/00-mesa-defaults.conf
Respuesta: 00-mesa-defaults.conf
Explicación de filtros:
| Filtro | Significado |
|---|---|
-type f |
Solo archivos |
-name "*.conf" |
Extensión .conf |
-newermt 2020-03-03 |
Modificado después de fecha |
-size +25k |
Mayor a 25KB |
-size -28k |
Menor a 28KB |
Ejercicio 2: Contar Archivos por Extensión
Objetivo: Determinar cuántos archivos .bak existen en el sistema.
find / -type f -name "*.bak" 2>/dev/null | wc -lResultado:
4
Respuesta: 4
Ejercicio 3: Ubicar Binary
Objetivo: Encontrar la ruta completa del binary xxd.
which xxdResultado:
/usr/bin/xxd
Respuesta: /usr/bin/xxd
Conceptos Teóricos
Herramientas de Búsqueda
| Comando | Propósito | Velocidad | Uso típico |
|---|---|---|---|
which |
Binarios en PATH | Instantáneo | Verificar si comando existe |
find |
Búsqueda con filtros | Lento | Búsquedas complejas |
locate |
Búsqueda en DB | Rápido | Búsquedas por nombre |
whereis |
Binarios + man + source | Rápido | Documentación |
type |
Tipo de comando | Instantáneo | Aliases y funciones |
Opciones de find Más Usadas
# Por tipo
-type f # Archivos
-type d # Directorios
-type l # Symlinks
# Por nombre
-name "*.conf" # Exacto (case sensitive)
-iname "*.CONF" # Case insensitive
# Por tamaño
-size +100M # Mayor a 100MB
-size -1k # Menor a 1KB
-size +25k -size -28k # Entre 25KB y 28KB
# Por tiempo
-mtime -7 # Modificado en últimos 7 días
-mtime +30 # Modificado hace más de 30 días
-newermt DATE # Más nuevo que fecha
# Por permisos
-perm 777 # Permisos exactos
-perm -4000 # Tiene SUID
-perm -o+w # Escribible por otros
# Por propietario
-user root # Propietario root
-group sudo # Grupo sudo
-nouser # Sin propietarioOperadores de Tamaño
| Sufijo | Valor |
|---|---|
c |
Bytes |
k |
Kilobytes (1024) |
M |
Megabytes |
G |
Gigabytes |
Ejecutar Comandos en Resultados
# Ejecutar ls -l en cada resultado
find / -name "*.conf" -exec ls -l {} \;
# Buscar contenido dentro de archivos
find / -name "*.log" -exec grep -l "error" {} \;
# Contar resultados
find / -name "*.bak" -exec echo . \; | wc -cBúsquedas Útiles para Pentesting
Archivos SUID/SGID
find / -perm -4000 2>/dev/null # SUID
find / -perm -2000 2>/dev/null # SGID
find / -perm -6000 2>/dev/null # AmbosArchivos Escribibles
find / -writable 2>/dev/null # Escribibles por usuario actual
find / -perm -o+w 2>/dev/null # Escribibles por otros
find /etc -writable 2>/dev/null # Configs escribiblesArchivos Sensibles
find / -name "password*" 2>/dev/null
find / -name "*backup*" 2>/dev/null
find / -name "*.key" 2>/dev/null
find / -name "id_rsa" 2>/dev/nullArchivos Recientes
find / -mtime -1 2>/dev/null # Modificados hoy
find / -mmin -60 2>/dev/null # Última hora
find / -newermt 2024-01-01 2>/dev/nullDiferencias: find vs locate
| Aspecto | find | locate |
|---|---|---|
| Velocidad | Lento (escanea FS) | Rápido (usa DB) |
| Precisión | Tiempo real | Puede estar desactualizado |
| Filtros | Múltiples | Limitados |
| Uso | Búsquedas complejas | Búsquedas rápidas |
| Actualización | Siempre actual | Requiere updatedb |
# Actualizar base de datos de locate
sudo updatedb
# Búsqueda rápida con locate
locate "*.conf"¿Qué Aprendimos?
- find es versátil: Combina múltiples filtros para búsquedas precisas
- Redirección de errores:
2>/dev/nulloculta errores de permisos - Rangos de tamaño: Usar dos opciones
-sizepara crear rangos - locate para velocidad: Ideal cuando la DB está actualizada
- which para binarios: Verifica rápidamente si un comando existe
Autoevaluación
- ¿Cuál es la diferencia entre
-namee-iname? - ¿Cómo buscarías archivos modificados en las últimas 24 horas?
- ¿Qué hace
-perm -4000? - ¿Por qué es importante
2>/dev/nullen búsquedas? - ¿Cuándo usarías
locateen lugar defind?