Fundamentos de Linux
Introducción
Linux es un sistema operativo de código abierto basado en Unix. Comprender Linux es esencial en ciberseguridad porque:
- La mayoría de los servidores web utilizan Linux
- Las herramientas de seguridad suelen desarrollarse para Linux
- WSL permite utilizar Linux en Windows
Comparación Windows vs Linux
Estructura del sistema de archivos
| Aspecto | Windows | Linux |
|---|---|---|
| Raíz | C:\ | / |
| Separador | \ | / |
| Sensible a mayúsculas | No | Sí |
| Usuarios | C:\Users\nom | /home/nom |
| Programas | C:\Program Files | /usr/bin, /opt |
| Configuración | Registro | Archivos de texto (/etc) |
Estructura de directorios de Linux
/
├── bin/ # Binarios esenciales
├── boot/ # Archivos de arranque
├── dev/ # Dispositivos
├── etc/ # Configuración del sistema
├── home/ # Directorios de usuarios
├── lib/ # Bibliotecas
├── media/ # Puntos de montaje de medios
├── mnt/ # Puntos de montaje temporales
├── opt/ # Software opcional
├── proc/ # Procesos (virtual)
├── root/ # Home de root
├── sbin/ # Binarios del sistema
├── tmp/ # Archivos temporales
├── usr/ # Programas de usuario
└── var/ # Datos variables (logs, correo)
Comandos Esenciales
Navegación
# Directorio actual
pwd
# Listar archivos
ls
ls -la # Detalles + archivos ocultos
ls -lh # Tamaños legibles
# Cambiar de directorio
cd /chemin
cd ~ # Home
cd - # Anterior
cd .. # Padre
Archivos y Directorios
# Crear
mkdir dossier
touch fichier
# Copiar
cp source destination
cp -r dossier/ destination/
# Mover/Renombrar
mv source destination
# Eliminar
rm fichier
rm -r dossier/
rm -rf dossier/ # Forzar (¡PELIGRO!)
# Mostrar contenido
cat fichier
less fichier # Paginación
head -n 10 fichier
tail -n 10 fichier
tail -f fichier # Seguimiento en tiempo real
Búsqueda
# Encontrar archivos
find /chemin -name "*.txt"
find / -type f -name "password*"
find / -perm -4000 # SUID
# Buscar dentro de archivos
grep "motif" fichier
grep -r "motif" /chemin/
grep -i "motif" fichier # Insensible a mayúsculas
Permisos
# Ver permisos
ls -l fichier
# Formato: -rwxrwxrwx
# │└┬┘└┬┘└┬┘
# │ │ │ └── Otros (o)
# │ │ └───── Grupo (g)
# │ └──────── Propietario (u)
# └────────── Tipo (- archivo, d directorio)
# Modificar permisos
chmod 755 fichier # rwxr-xr-x
chmod u+x fichier # Añadir ejecución para user
chmod go-w fichier # Quitar escritura para group/others
# Cambiar propietario
chown user:group fichier
Valores chmod
| Valor | Permiso |
|---|---|
| 7 | rwx (lectura + escritura + ejecución) |
| 6 | rw- (lectura + escritura) |
| 5 | r-x (lectura + ejecución) |
| 4 | r-- (solo lectura) |
| 0 | --- (ninguno) |
Usuarios y Grupos
Archivos importantes
| Archivo | Contenido |
|---|---|
/etc/passwd | Lista de usuarios |
/etc/shadow | Contraseñas hasheadas |
/etc/group | Lista de grupos |
/etc/sudoers | Configuración de sudo |
Comandos de usuarios
# Usuario actual
whoami
id
# Cambiar de usuario
su - username
su - # Convertirse en root
# Ejecutar como root
sudo comando
sudo -i # Shell root
# Gestionar usuarios
useradd username
passwd username
userdel username
Procesos
Comandos
# Listar procesos
ps aux
ps -ef
# Árbol de procesos
pstree
# Tiempo real
top
htop # Versión mejorada
# Matar un proceso
kill PID
kill -9 PID # Forzar
killall nom
# Segundo plano
comando &
jobs
fg %1
bg %1
Señales comunes
| Señal | Número | Descripción |
|---|---|---|
| SIGTERM | 15 | Terminar correctamente |
| SIGKILL | 9 | Matar inmediatamente |
| SIGINT | 2 | Interrupción (Ctrl+C) |
| SIGHUP | 1 | Desconexión |
Red
Comandos
# Configuración IP
ip addr
ifconfig # Antiguo
# Conexiones
netstat -tulpn
ss -tulpn # Moderno
# Probar conectividad
ping direccion
traceroute direccion
# DNS
nslookup dominio
dig dominio
# Transferencia
wget url
curl url
curl -o fichier url
# Conexión remota
ssh user@serveur
scp fichier user@serveur:/chemin/
Servicios y Daemons
systemd (moderno)
# Estado
systemctl status service
# Iniciar/Detener
systemctl start service
systemctl stop service
systemctl restart service
# Habilitar/Deshabilitar al arranque
systemctl enable service
systemctl disable service
# Listar servicios
systemctl list-units --type=service
SysVinit (antiguo)
service nom start
service nom stop
service nom status
Archivos Importantes para la Seguridad
Configuración
| Archivo | Descripción |
|---|---|
/etc/passwd | Cuentas de usuario |
/etc/shadow | Hash de contraseñas |
/etc/sudoers | Privilegios de sudo |
/etc/ssh/sshd_config | Configuración de SSH |
/etc/crontab | Tareas programadas del sistema |
Logs
| Archivo | Descripción |
|---|---|
/var/log/auth.log | Autenticación (Debian) |
/var/log/secure | Autenticación (RedHat) |
/var/log/syslog | Logs del sistema |
/var/log/messages | Mensajes generales |
/var/log/apache2/ | Logs de Apache |
Consultar los logs
# Journalctl (systemd)
journalctl
journalctl -u service
journalctl -f # Tiempo real
journalctl --since today
# Archivos
tail -f /var/log/auth.log
grep "Failed" /var/log/auth.log
Bits Especiales (Seguridad)
SUID (Set User ID)
Permite ejecutar un programa con los privilegios del propietario.
# Encontrar archivos SUID
find / -perm -4000 2>/dev/null
# Ejemplo: passwd tiene SUID root para modificar /etc/shadow
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
SGID (Set Group ID)
Similar pero para el grupo.
find / -perm -2000 2>/dev/null
Sticky Bit
Impide la eliminación de archivos por parte de no propietarios.
ls -ld /tmp
# drwxrwxrwt ... /tmp
# La 't' indica el sticky bit
Scripting Bash Básico
Primer script
#!/bin/bash
# Mi primer script
echo "Hola, $USER!"
echo "Hoy es $(date)"
echo "Usted está en $(pwd)"
Variables y condiciones
#!/bin/bash
# Variables
nom="Linux"
version=5
# Condición
if [ $version -gt 4 ]; then
echo "$nom version $version es reciente"
else
echo "Versión antigua"
fi
# Bucle
for i in 1 2 3 4 5; do
echo "Iteración $i"
done
Script útil - Enumeración básica
#!/bin/bash
# Enumeración básica del sistema
echo "=== INFORMACIÓN DEL SISTEMA ==="
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -a)"
echo "Usuario: $(whoami)"
echo "ID: $(id)"
echo -e "\n=== USUARIOS ==="
cat /etc/passwd | cut -d: -f1
echo -e "\n=== ARCHIVOS SUID ==="
find / -perm -4000 2>/dev/null
echo -e "\n=== TAREAS CRON ==="
cat /etc/crontab
echo -e "\n=== CONEXIONES DE RED ==="
ss -tulpn
WSL (Subsistema de Windows para Linux)
Instalación
# PowerShell (Admin)
wsl --install
# Elegir una distribución
wsl --install -d Ubuntu
Comandos WSL
# Listar distribuciones
wsl --list --verbose
# Iniciar
wsl
# Acceder a archivos de Windows
cd /mnt/c/Users/
# Desde Windows, acceder a Linux
\\wsl$\Ubuntu\home\user\
Ejercicios
- Navegue por el sistema de archivos y liste los archivos de
/etc - Cree un archivo, modifique sus permisos a 644
- Encuentre todos los archivos SUID en el sistema
- Escriba un script que muestre la información del sistema
- Consulte los logs de autenticación