Post

Linux Fundamentals - Guía Completa

Linux Fundamentals - Guía Completa

Esta publicación reúne los conceptos fundamentales de administración de sistemas Linux, desde la gestión del sistema de archivos hasta la seguridad y copias de seguridad. Una referencia rápida para pentesters y administradores de sistemas.


1. Sistema de Archivos

Administrar sistemas de archivos en Linux es una tarea crucial. Linux admite múltiples sistemas de archivos:

SistemaDescripción
ext2Sin journaling, útil en USB de baja sobrecarga
ext3 / ext4Con journaling; ext4 es el estándar moderno
BtrfsInstantáneas y verificación de integridad integrada
XFSAlto rendimiento con archivos grandes
NTFSCompatibilidad con sistemas Windows / dual-boot

Discos y particiones

La herramienta principal para gestión de discos es fdisk:

1
sudo fdisk -l
1
2
3
4
Disk /dev/vda: 160 GiB, 171798691840 bytes, 335544320 sectors
Device     Boot     Start       End   Sectors  Size Id Type
/dev/vda1  *         2048 158974027 158971980 75.8G 83 Linux
/dev/vda2       158974028 167766794   8792767  4.2G 82 Linux swap

Montaje de sistemas de archivos

Montar una unidad USB:

1
2
sudo mount /dev/sdb1 /mnt/usb
cd /mnt/usb && ls -l

Ver los sistemas de archivos montados actualmente:

1
mount

Desmontar:

1
sudo umount /mnt/usb

Para verificar si hay procesos usando el sistema de archivos antes de desmontar:

1
lsof | grep cry0l1t3

El archivo /etc/fstab define los sistemas que se montan al arrancar:

UUID=3d6a020d-...-9e085e9c927a /     btrfs  subvol=@,defaults,noatime 0 1
UUID=3d6a020d-...-9e085e9c927a /home btrfs  subvol=@home,defaults     0 2
UUID=21f7eb94-...-d4f58f94e141 swap  swap   defaults,noatime           0 0

SWAP

El espacio de intercambio permite al kernel mover páginas inactivas de RAM cuando la memoria se llena. Se configura con:

  • mkswap — prepara un dispositivo como espacio de intercambio
  • swapon — activa el espacio de intercambio

2. Configuración de Red

Interfaces de red

Activar una interfaz:

1
2
3
sudo ifconfig eth0 up
# o equivalente:
sudo ip link set eth0 up

Asignar dirección IP y máscara de red:

1
2
3
sudo ifconfig eth0 192.168.1.2
sudo ifconfig eth0 netmask 255.255.255.0
sudo route add default gw 192.168.1.1 eth0

Editar el DNS en /etc/resolv.conf:

nameserver 8.8.8.8
nameserver 8.8.4.4

Configuración persistente en /etc/network/interfaces:

auto eth0
iface eth0 inet static
  address 192.168.1.2
  netmask 255.255.255.0
  gateway 192.168.1.1
  dns-nameservers 8.8.8.8 8.8.4.4

Control de Acceso a la Red (NAC)

TipoDescripción
DACEl propietario del recurso define los permisos
MACPermisos aplicados por el sistema operativo
RBACPermisos basados en roles organizacionales

Solución de problemas de red

Herramientas útiles: ping, traceroute, netstat, tcpdump, wireshark, nmap

1
traceroute www.inlanefreight.com

Hardening de red

  • SELinux — Control de acceso obligatorio integrado en el kernel, control granular
  • AppArmor — MAC basado en perfiles, más fácil de administrar
  • TCP Wrappers — Control de acceso basado en dirección IP de origen

3. Firewall con iptables

iptables filtra tráfico de red con reglas basadas en IP, puerto y protocolo. Alternativas: nftables, ufw, firewalld.

Componentes principales

ComponenteDescripción
TablesOrganizan y categorizan las reglas
ChainsAgrupan reglas por tipo de tráfico
RulesDefinen criterios y acciones
TargetsAcción a tomar (ACCEPT, DROP, etc.)

Tablas disponibles

TablaDescripciónCadenas
filterFiltra por IP, puerto, protocoloINPUT, OUTPUT, FORWARD
natModifica IPs de origen/destinoPREROUTING, POSTROUTING
mangleModifica cabeceras de paquetesPREROUTING, OUTPUT, INPUT…

Targets comunes

TargetDescripción
ACCEPTPermite el paquete
DROPDescarta silenciosamente
REJECTDescarta y notifica al origen
LOGRegistra en el log del sistema
SNATCambia IP de origen (NAT)
DNATCambia IP de destino
MASQUERADESNAT con IP dinámica

Ejemplo práctico: bloquear IP en puerto específico

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. Cadena: INPUT
# 2. Origen: -s 192.168.1.50
# 3. Protocolo: -p tcp
# 4. Puerto: --dport 8080
# 5. Acción: -j DROP

sudo iptables -A INPUT -s 192.168.1.50 -p tcp --dport 8080 -j DROP

# Bloquear toda una subred
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 8080 -j DROP

# Cadenas personalizadas
sudo iptables -A INPUT -p tcp --dport 8080 -j MIPROYECTO
sudo iptables -A MIPROYECTO -s 192.168.1.50 -j ACCEPT
sudo iptables -A MIPROYECTO -j DROP

4. Servicios de Red

SSH

SSH permite la administración segura de sistemas remotos. El servidor más común es OpenSSH.

1
ssh cry0l1t3@10.129.17.122

Configuración en /etc/ssh/sshd_config (número máximo de conexiones, autenticación por clave, etc.).

NFS (Network File System)

Permisos clave de NFS:

PermisoDescripción
rwLectura y escritura
roSolo lectura
no_root_squashEl root del cliente mantiene sus privilegios
root_squashRoot del cliente es tratado como usuario normal
syncEscritura confirmada antes de transferir
1
2
3
4
5
6
# Crear compartición NFS
echo '/home/user/nfs_sharing hostname(rw,sync,no_root_squash)' >> /etc/exports

# Montar compartición remota
mkdir ~/target_nfs
mount 10.129.12.17:/home/john/dev_scripts ~/target_nfs

Servidor web rápido con Python

1
2
python3 -m http.server --directory /home/user/target_files
python3 -m http.server 443

5. Gestión de Permisos

El comando chmod cambia los permisos de archivos y directorios:

1
chmod 700 filename

Buscar archivos con permisos especiales (SUID)

1
2
find / -perm 4000
find / -perm -4000

Sticky Bit

El bit pegajoso en directorios compartidos asegura que solo el propietario del archivo, el propietario del directorio o root puedan eliminar o renombrar archivos. Ideal para directorios como /tmp:

1
2
3
chmod +t /directorio_compartido
# o con notación octal
chmod 1777 /directorio_compartido

6. Gestión de Servicios y Procesos

Tipos de servicios

  • Servicios del sistema — Iniciados durante el arranque, esenciales para el SO
  • Servicios instalados por el usuario — Aplicaciones de servidor y procesos en segundo plano

Los demonios se identifican con la letra d al final: sshd, systemd, httpd.

systemd

systemd es el sistema de inicialización estándar en distribuciones modernas. Al primer proceso del arranque se le asigna el PID 1.

1
2
3
4
5
6
7
8
9
10
# Ver estado de un servicio
systemctl status sshd

# Iniciar / detener / reiniciar
systemctl start sshd
systemctl stop sshd
systemctl restart sshd

# Habilitar al arranque
systemctl enable sshd

7. Programación de Tareas

Systemd Timers

Para programar una tarea con systemd necesitas 3 pasos:

  1. Crear el timer (mytimer.timer)
  2. Crear el servicio (mytimer.service)
  3. Activar el timer

Por convención, mytimer.timer busca automáticamente mytimer.service. Si el nombre es diferente, se especifica con Unit= dentro del .timer.

Cron

Estructura del crontab:

CampoRangoDescripción
Minutos0-59En qué minuto ejecutar
Horas0-23En qué hora ejecutar
Día del mes1-31En qué día del mes
Mes1-12En qué mes
Día de la semana0-7En qué día de la semana
1
2
3
4
5
# Editar el crontab del usuario
crontab -e

# Ejemplo: ejecutar un script cada hora en el minuto 0
0 * * * * /path/to/script.sh

8. Copias de Seguridad y Restauración

Herramientas disponibles

  • Rsync — Sincronización eficiente (solo transfiere los cambios)
  • Duplicity — Basado en Rsync + cifrado de copias de seguridad
  • Deja Dup — Interfaz gráfica para Ubuntu

Rsync: comandos esenciales

1
2
3
4
5
6
7
8
9
# Copia de seguridad local → servidor remoto
rsync -av /path/to/mydirectory user@backup_server:/path/to/backup/

# Con compresión, backup incremental y eliminación de archivos borrados
rsync -avz --backup --backup-dir=/path/to/backup/folder --delete \
  /path/to/mydirectory user@backup_server:/path/to/backup/

# Restaurar desde el servidor
rsync -av user@remote_host:/path/to/backup/ /path/to/mydirectory

Sincronización automática con Cron

1
2
3
#!/bin/bash
# RSYNC_Backup.sh
rsync -avz -e ssh /path/to/mydirectory user@backup_server:/path/to/backup/
1
2
3
4
chmod +x RSYNC_Backup.sh
crontab -e
# Agregar la línea:
0 * * * * /path/to/RSYNC_Backup.sh

Configuración de autenticación por clave (sin contraseña para scripts):

1
2
ssh-keygen -t rsa -b 2048
ssh-copy-id user@backup_server

9. Seguridad en Linux

Buenas prácticas

  • Deshabilitar inicio de sesión SSH con contraseña (usar claves)
  • No permitir login como root vía SSH
  • Usar fail2ban para bloquear IPs tras intentos fallidos
  • Auditorías regulares del sistema (kernel desactualizado, permisos, SUID innecesarios)
  • Deshabilitar servicios innecesarios

Control de acceso a servicios

/etc/hosts.allow — Define qué hosts pueden acceder:

# Permitir SSH desde la red local
sshd : 10.129.14.0/24

# Permitir FTP desde un host específico
ftpd : 10.129.14.10

/etc/hosts.deny — Define qué hosts son bloqueados:

# Denegar todos los servicios desde un dominio
ALL : .inlanefreight.com

# Denegar SSH desde una IP específica
sshd : 10.129.22.22

SELinux vs AppArmor vs TCP Wrappers

MecanismoAlcanceComplejidad
SELinuxKernel, control granular de cada proceso/archivoAlta
AppArmorPerfiles por aplicación, más fácil de gestionarMedia
TCP WrappersControl de acceso a servicios por IPBaja

Herramientas de auditoría

  • Snort — IDS/IPS de red
  • chkrootkit — Detección de rootkits
  • rkhunter — Detección de rootkits y backdoors
  • Lynis — Auditoría de seguridad del sistema

10. Logs del Sistema

Los logs son esenciales para monitorización y seguridad. Herramientas útiles:

  • syslog / rsyslog — Recolección de logs del sistema
  • ss — Estadísticas de sockets (ss -tulnp)
  • lsof — Listar archivos y conexiones abiertas
  • ELK Stack (Elasticsearch + Logstash + Kibana) — Análisis avanzado
1
2
3
4
5
6
7
8
# Ver logs en tiempo real
journalctl -f

# Logs de autenticación
cat /var/log/auth.log

# Estadísticas de puertos abiertos
ss -tulnp

Nota: Esta guía está orientada a administración de sistemas y ciberseguridad (pentesting). Conocer estas herramientas a fondo permite tanto reconocer configuraciones incorrectas como asegurar sistemas Linux correctamente.

This post is licensed under CC BY 4.0 by the author.