Saltar al contenido principal

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​

AspectoWindowsLinux
RaízC:\/
Separador\/
Sensible a mayúsculasNoSí
UsuariosC:\Users\nom/home/nom
ProgramasC:\Program Files/usr/bin, /opt
ConfiguraciónRegistroArchivos 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​

# 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​

ValorPermiso
7rwx (lectura + escritura + ejecución)
6rw- (lectura + escritura)
5r-x (lectura + ejecución)
4r-- (solo lectura)
0--- (ninguno)

Usuarios y Grupos​

Archivos importantes​

ArchivoContenido
/etc/passwdLista de usuarios
/etc/shadowContraseñas hasheadas
/etc/groupLista de grupos
/etc/sudoersConfiguració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ñalNúmeroDescripción
SIGTERM15Terminar correctamente
SIGKILL9Matar inmediatamente
SIGINT2Interrupción (Ctrl+C)
SIGHUP1Desconexió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​

ArchivoDescripción
/etc/passwdCuentas de usuario
/etc/shadowHash de contraseñas
/etc/sudoersPrivilegios de sudo
/etc/ssh/sshd_configConfiguración de SSH
/etc/crontabTareas programadas del sistema

Logs​

ArchivoDescripción
/var/log/auth.logAutenticación (Debian)
/var/log/secureAutenticación (RedHat)
/var/log/syslogLogs del sistema
/var/log/messagesMensajes 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​

  1. Navegue por el sistema de archivos y liste los archivos de /etc
  2. Cree un archivo, modifique sus permisos a 644
  3. Encuentre todos los archivos SUID en el sistema
  4. Escriba un script que muestre la información del sistema
  5. Consulte los logs de autenticación

Referencias​