Tema 10 / 10
LPIC-1 Examen 110

Seguridad del Sistema

Domina la administración de seguridad, configuración del host, gestión de accesos y cifrado de datos.

110.1 Tareas de administración de seguridad

La administración de seguridad implica auditar permisos especiales, gestionar el ciclo de vida de las cuentas, restringir recursos y controlar la escalada de privilegios.

Auditoría de permisos especiales (SUID, SGID, Sticky Bit)

Es crucial encontrar archivos con permisos especiales para asegurar que no existen vulnerabilidades de escalada de privilegios.

  • SUID (Set User ID - 4000): Permite que un usuario ejecute un archivo con los permisos del propietario del archivo (usualmente root). Común en /usr/bin/passwd o /usr/bin/sudo.
    - Identificador: s en el permiso de ejecución del usuario.
    - Búsqueda: find / -perm -4000 -user root.
  • SGID (Set Group ID - 2000): Permite ejecutar con permisos del grupo. En directorios, fuerza a que los nuevos archivos hereden el grupo del directorio padre.
    - Identificador: s en el permiso de ejecución del grupo.
    - Búsqueda: find / -perm -2000.
  • Sticky Bit (1000): Usado en directorios compartidos (como /tmp). Solo el propietario de un archivo puede borrarlo, incluso si otros tienen permiso de escritura en el directorio.
    - Identificador: t en el permiso de ejecución de "otros".
    - Aplicar: chmod +t directorio o chmod 1777 directorio.

Gestión de contraseñas y cuentas

El archivo /etc/shadow contiene 8 campos separados por dos puntos: nombre:hash:último_cambio:min:máx:aviso:inactividad:expira.

  • chage: Herramienta principal para la caducidad de contraseñas.
    - chage -l usuario: Lista la información de envejecimiento.
    - chage -M 90 usuario: Establece el máximo de días de validez a 90.
    - chage -W 7 usuario: Avisa 7 días antes de la expiración.
    - chage -E 2025-12-31 usuario: Establece una fecha de expiración fija para la cuenta.
  • Bloqueo de cuentas:
    - passwd -l usuario: Bloquea añadiendo un ! al hash.
    - usermod -L usuario: Bloquea la cuenta.
    - usermod -s /sbin/nologin usuario: Cambia el shell para impedir login interactivo.
  • /etc/nologin: Si este archivo existe en la raíz, impide el inicio de sesión de todos los usuarios excepto root, mostrando su contenido como mensaje de error.

Límites de recursos (ulimit)

Previene que un usuario o proceso colapse el sistema consumiendo todos los recursos.

  • Comandos:
    - ulimit -a: Muestra todos los límites actuales.
    - ulimit -n 4096: Limita el número de archivos abiertos.
    - ulimit -u 100: Limita el número de procesos del usuario.
  • Configuración persistente: Se edita en /etc/security/limits.conf.
    Formato: <dominio> <tipo> <item> <valor>.
    Ejemplo: * hard nproc 50 (limita procesos a 50 para todos los usuarios).

Monitoreo y Sudo

  • Usuarios conectados: who (básico), w (detalle + carga CPU), last (historial /var/log/wtmp), lastb (intentos fallidos /var/log/btmp).
  • Configuración Sudo (/etc/sudoers):
    - Editar siempre con visudo.
    - Sintaxis: usuario HOST=(USUARIO:GRUPO) COMANDOS.
    - Opciones: NOPASSWD (no pide clave), NOEXEC (evita comandos anidados).
    - Alias: User_Alias ADMINS = user1, user2, Cmnd_Alias WEB = /usr/sbin/apachectl.

110.2 Configuración de la seguridad del sistema

Endurecimiento del sistema mediante la gestión de servicios de red, superdemonios y control de acceso a nivel de aplicación.

Superdemonios (Internet Superserver)

Gestionan conexiones entrantes y lanzan el servicio correspondiente bajo demanda.

  • xinetd:
    - Archivo principal: /etc/xinetd.conf.
    - Configuraciones específicas: /etc/xinetd.d/servicio.
    - Directivas clave: disable = yes/no, only_from = 192.168.1.0/24, no_access = 10.0.0.0/8.
    - Recargar cambios: systemctl restart xinetd.
  • systemd.socket:
    - Usa unidades de socket (`.socket`) para escuchar puertos y unidades de servicio (`.service`) para ejecutarlos.
    - Ejemplo: systemctl start ssh.socket habilita el puerto 22 pero sshd no se ejecuta hasta que llega una conexión.

Gestión de servicios de red

  • Systemd: systemctl list-units --type=service --state=running para ver activos. systemctl mask servicio impide que se inicie manual o automáticamente.
  • Netstat/SS: Para identificar qué servicio está escuchando en un puerto.
    - ss -tulpn: Muestra sockets TCP/UDP que escuchan, procesos y números de puerto.

TCP Wrappers

Capa de seguridad que controla el acceso a servicios basándose en la dirección IP del cliente. Los servicios deben estar compilados con soporte libwrap.

  • Verificar soporte: ldd /usr/sbin/sshd | grep libwrap.
  • /etc/hosts.allow: Lista de permisos. Se procesa primero.
    Sintaxis: servicio : host : acción.
    Ej: sshd : 192.168.1.0/24 : ALLOW.
  • /etc/hosts.deny: Lista de denegaciones. Se procesa después.
    Ej: ALL : ALL (Deniega todo lo que no esté explícitamente permitido en allow).
  • Expansiones: Soporta LOCAL, ALL, EXCEPT (ej: ALL EXCEPT 192.168.1.5).
  • Comandos auxiliares: spawn (ejecuta comando shell) y twist (reemplaza el servicio por un comando).

110.3 Protección de datos mediante cifrado

Implementación de comunicación segura (SSH) y protección de datos estáticos (GPG).

OpenSSH Cliente y Llaves

  • ssh-keygen: Genera claves.
    - Tipos: rsa (defecto), ecdsa, ed25519 (más seguro y rápido).
    - Opciones: -b 4096 (bits), -t ecdsa (tipo), -f ~/.ssh/id_nueva (fichero), -C "comentario".
  • ssh-agent: Guarda las claves privadas descifradas en memoria.
    - ssh-agent bash inicia el agente.
    - ssh-add ~/.ssh/id_rsa añade la clave.
  • Archivos clave: ~/.ssh/known_hosts (huellas servidores), ~/.ssh/authorized_keys (claves públicas permitidas en servidor).

OpenSSH Servidor

  • Configuración: /etc/ssh/sshd_config.
    - Directivas: PermitRootLogin no, PasswordAuthentication no (solo claves), Port 22.
  • Claves host: Generadas al instalar. Ubicación: /etc/ssh/ssh_host_*.

Túneles SSH (Port Forwarding)

Canales cifrados para tráfico inseguro.

  • Local (-L): ssh -L [bind_address:]puerto_local:host_remoto:puerto_remoto usuario@servidor.
    Redirige tráfico del puerto local al remoto a través del servidor.
  • Remoto (-R): ssh -R [bind_address:]puerto_remoto:host_local:puerto_local usuario@servidor.
    Permite que alguien en el servidor remoto acceda a un servicio en tu máquina local.
  • Forwarding X11: ssh -X usuario@host. Requiere X11Forwarding yes en servidor.

GnuPG (GPG)

Sistema de cifrado híbrido (asimétrico y simétrico) y firmas digitales.

  • Gestión de claves:
    - Crear: gpg --full-gen-key.
    - Listar: gpg --list-keys (públicas), --list-secret-keys.
    - Exportar pública: gpg --armor --export usuario > clave.pub.
    - Importar: gpg --import clave.pub.
  • Cifrado y Descifrado:
    - Cifrar simétrico (una clave): gpg -c archivo.
    - Cifrado asimétrico (clave pública destino): gpg -e -r usuario archivo.
    - Descifrar: gpg -d archivo.gpg > archivo o gpg archivo.gpg.
  • Firma y Verificación:
    - Firmar: gpg -s archivo (crea archivo.gpg) o --detach-sig (crea archivo.sig).
    - Verificar: gpg --verify archivo.sig archivo.
  • Confianza: gpg --edit-key usuario -> comando trust para establecer el nivel de confianza de las claves importadas.