LPIC-1 Tema 110.2: configurar seguridad del sistema anfitrión
Nueva entrada sobre LPIC-1. Una vez analizados algunos aspectos básicos de la seguridad en el artículo anterior, ahora toca el tema 110.2. Este tema de las certificaciones está destinado a lo referente a las configuraciones de seguridad del sistema anfitrión. Tampoco se trata de algo demasiado profundo, ya que los temas más avanzados de seguridad se tratan en niveles superiores de estas certificaciones.
El candidato a administrador del sistema que se enfrente a estas preguntas de los exámenes, tendrá que demostrar que tiene conocimientos sobre la forma en la que se tratan las contraseñas y cuentas de usuario en el sistema, cómo limitar o desactivar servicios de red, y entender el rol de los envoltorios TCP (wrappers).
Ficheros que debes conocer
Existe una serie de ficheros que debes conocer para realizar correcciones y configuraciones que afectan a la seguridad del sistema. Esos ficheros son:
- /etc/nologin: la principal función de este fichero es contener un mensaje que será mostrado cuando un usuario intenta acceder a una sesión del sistema durante el proceso de apagado y, por supuesto, se evitará el inicio de sesión del mismo. Puedes editar este fichero y agregar los mensajes personalizados que te apetezcan. Por ejemplo, indicar que se está realizando mantenimiento en el sistema, etc. Otra opción sería bloquear el inicio de sesión para un usuario cambiando su shell por defecto a nologin. Por ejemplo:
#Impedir que paquito inicie sesión sudo chsh -s /bin/nologin paquito #Una alternativa a lo anterior es usar false sudo chsh -s /bin/false paquito
- /etc/passwd: más información.
- /etc/shadow: más información.
- /etc/xinetd.d/: es un directorio con ficheros de configuración específicos para cada servicio manejado por el superservidor, es decir, del servidor de servidores. Lo que hace es ejecutar servicios cuando se necesitan, sin necesidad de estar ejecutándolos de forma constante. Así se ahorran recursos, especialmente en esos servicios que rara vez se usan. El demonio xinetd estará a la escucha de los puertos de los servicios listados, y cuando se detecta alguna conexión por alguno de ellos, se ejecuta el software que implementa el servicio. Por ejemplo, en el siguiente ejemplo se define que:
- service: define el servicio.
- flags: las banderas que configuran el número de atributos para la conexión. REUSE hace que se reutilice el socket para una conexión Telnet en este caso.
- socket_type: configura el socket que puede ser stream o dgram para TCP y UDP respectivamente.
- wait: es el campo de espera, para definir si el servicio solo tiene un hilo (yes) y debe esperar, o si usa múltiples hilos (no).
- user: identifica el usuario bajo el que se ejecutará el proceso del servicio, en este caso root.
- server: define el binario o programa que lanzar el servicio en cuestión, y se debe definir con la ruta absoluta.
- log_on_failure: define parámetros que se registran en caso de que falle la conexión. Pueden complementar a los definidos en el fichero xinetd.conf. Pero en este caso son específicos para Telnet, que es el servicio de nuestro ejemplo.
- disable: configura si el servicio está activo o no.
- Otros: existen otras opciones que pueden aparecer.
#Ejemplo de configuración de /etc/xinetd.d/telnet service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/telnet log_on_failure += USERID disable = yes only_from = 10.0.1.0/24 no_access = 192.168.4.1 access_times = 06:50-19:15 }
- /etc/xinetd.conf: es el fichero de configuración principal del propio superservidor. En este caso, las configuraciones que hagas aquí afectarán a todos los servicios bajo este superservidor. Por ejemplo, en el siguiente fichero de ejemplo se define que:
- interfaces: configura el máximo de peticiones que el superservidor puede manejar de forma simultánea. En este caso 50.
- log_type: configura el demonio para usar el registro authpriv, que escribe entradas en el fichero /var/log/secure, aunque puedes usar cualquier ruta.
- log_on_success: configura el registro de conexiones exitosas, en este caso registrará la IP del host y el PID, así como los intentos de conexión, duración, y estado de la salida o señal que terminó el servicio, y UID del usuario remoto.
- log_on_failure: igual a la anterior, pero para conexiones fallidas o no permitidas.
- cps: determina la cantidad de conexiones por segundo para cada servicio, 28 en este caso. La segunda cifra es la cantidad de tiempo que permanecerá inactivo si se sobrepasa el límite, en este caso 70 segundos.
- includedir: señala al directorio con la configuración específica de los servicios.
#Ejemplo de configuración de /etc/xinetd.conf defaults { instances = 50 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 28 70 } includedir /etc/xinetd.d
Recuerda que con systemd, la unidad de configuración para sockets es systemd.socket. Para más información usa: man systemd.socket
- /etc/hosts.allow y /etc/hosts.deny: el superservidor usa estos ficheros para definir los servicios y hosts permitidos y los no permitidos respectivamente. La sintaxis es tipo demonio : cliente [:opción1:opctión2:…], con la que configurar TCP wrappers. Recuerda que:
- Se pueden usar nombres y direcciones IP.
- Los nombres que empiezan por un punto indica que todos los nombres que coincidan con lo que va tras el punto se incluyen en esa regla. Los que terminan en punto indican que se aceptan los nombres que coinciden con el comienzo.
- Además, se pueden comodines. Por ejemplo, ALL para todos los hosts, LOCAL para los que pertenecen al dominio local, UNKNOWN para los que no han sido resueltos por DNS, KNOWN para los que han sido resueltos por DNS (se conocen), y PARANOID para los hosts cuyos nombres no coinciden con sus IPs. Por ejemplo, se podría configurar todos los servicios a los hosts locales con ALL: LOCAL, y según se incluya en .deny o .allow, significará que todos están denegados o permitidos…
- Puedes configurar excepciones con la palabra reservada EXEPT, y también existen otros patrones, operadores, sustituciones con %, etc. Puedes leer el manual para más información.
#Ejemplo para permitir ciertos servicios para ciertos hosts en /etc/hosts.allow popd : 192.168.14.2 192.168.1.140 imapd : 192.168.17.0/255.255.255.0 sendmail : 192.168.155.0/255.255.255.0 sshd : maq1 #Si queremos que el resto sean denegados, con una excepción, para complementar a lo anterior, se configura /etc/hosts.deny así: ALL : ALL EXCEPT admin.dominio.es