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/passwdo/usr/bin/sudo.
- Identificador:sen 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:sen 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:ten el permiso de ejecución de "otros".
- Aplicar:chmod +t directorioochmod 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 convisudo.
- 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.sockethabilita 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=runningpara ver activos.systemctl mask servicioimpide 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) ytwist(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 bashinicia el agente.
-ssh-add ~/.ssh/id_rsaañ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. RequiereX11Forwarding yesen 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 > archivoogpg 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-> comandotrustpara establecer el nivel de confianza de las claves importadas.