Las tareas de administración en Linux son complejas en muchas situaciones por la cantidad de procesos, servicios y roles que son ejecutados a cada segundo y a esto debemos sumarle inicios de sesión, instalación de aplicaciones y no olvidar todos los eventos que registra cada aplicativo en la distribución gestionada. Para fortuna de administradores y personal de control o auditoria, disponemos de diversos comandos desarrollados para facilitar la gestión y control de los eventos del sistema y por ello Solvetic se enfocará en dos de los comandos más importantes para tal fin. Syslog y Klogd.
El log es como una bitacora, donde se registran eventos, errores, cambios y procesos que generan las aplicaciones o el sistema operativo para luego poder leer este registro y determinar qué eventos ocurrieron, sobre todo en caso de errores o vulnerabilidades. Los ficheros de log en un sistema linux, residen en el directorio /var/log El sistema de logs de Linux es gestionado por dos Daemon:
1. Qué es y cómo usar Syslogd en registros Linux
Veamos qué es y cómo usar Syslogd
El comando Syslogd posee un comportamiento BSD estándar y las nuevas versiones de Syslogd interactúan de manera transparente con la versión de syslog disponible en las bibliotecas estándar, así, si un binario vinculado a las bibliotecas compartidas estándar no funciona de forma correcta, Syslogd nos desplegará el comportamiento de este binario.
El archivo de configuración principal es /etc/syslog.conf, y el registro normalmente se especifica con entradas de reglas. En cada línea se especifican el selector (facility.priority) y la acción. Algo a tener en cuenta es que las distribuciones modernas de Linux, el comando Syslogd ha sido reemplazado por nuevas implementaciones de Syslog como rsyslog o syslog-ng, de modo que si deseamos usar Syslogd podemos instalarlo con el siguiente comando:
apt install inetutils-syslogd
Allí debemos ingresar la letra S para confirmar la descarga e instalación de Syslogd. Una vez instalado podemos ir a su archivo de configuración el cual se encuentra en la siguiente ruta /etc/syslog.conf:
nano /etc/syslog.conf
Allí encontramos todas las rutas que Syslogd usará para capturar la información. La sintaxis de uso general de Syslogd es la siguiente:
syslogd [ -a socket ] [ -d ] [ -f archivo de configuración] [ -h ] [ -l lista de host ] [ -m intervalo ] [ -n ] [ -p socket ] [ -r ] [ -s lista de dominio ] [ -S ] [ -v ] [ -x ]
Dentro de las opciones disponibles tenemos:
-a socket
-d
-f config file (Archivo de configuración)
-h
-l hostlist (Lista de hosts)
-m intervalo
-n
-p socket
-r
-s domainlist (Lista de dominio)
-S
-v
Al ejecutar alguna de las opciones disponibles podemos ver todas las tareas que son ejecutadas a nivel interno:
2. Señales en Syslogd registros Linux
Syslogd está en la capacidad de reaccionar ante un conjunto de señales, una opción para enviar una señal a Syslogd es ejecutando:
kill -SIGNAL 'cat /var/run/syslogd.pid'
Al ejecutarse esta señal entran en juego diversos componentes como. Así, Syslogd es una solución practica para analizar los eventos de Linux.
3. Configurar el archivo de Syslogd Linux
Syslogd hace uso de una sintaxis algo diferente en su archivo de configuración que el archivo tradicional de las fuentes BSD originales. La configuración de syslogd se hace a través del archivo /etc/syslogd.conf. A través de este archivo se especifica hacia dónde se deben enrutar los diferentes mensajes. Se pueden dejar líneas en blanco o comentar líneas enteras con el carácter "#"
Para que syslog acepte conexiones remotas debemos añadir el parámetro -r
SYSLOGD_OPTIONS="-r -m 0"Normalmente syslogd ocupa el puerto 514 debemos revisar que el firewall no lo bloquee para probar en que puerto está corriendo, desde la terminal escribimos el siguiente código
grep syslog /etc/servicesEn los Log de servicios en esta línea podemos ver que los logs de “mail, cron, info” van al directorio messages
*.info;mail.none;authpriv.none;cron.none /var/log/messagesVamos a probar a enviar un mensaje a todos los log con el siguiente comando
grep "Mensaje de prueba" /var/log/*En este caso podemos ver que varios log están con permisos denegados por lo tanto no se pueden escribir.
Habría que determinar si es necesario cambiar los permisos o no según nuestras necesidades. Los log tiene varios niveles de prioridad de los mensajes (de menos a más prioritario:
debug, info,notice, warning, warn, err, error, crit, alert, emerg y panic
auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, syslog, user, uucpLos mas importantes son
- var/log/messages: aquí encontraremos los logs que llegan con prioridad info (información), notice (notificación) o warn (aviso).
- /var/log/kern.log: aquí se almacenan los logs del kernel, generados por klogd.
- /var/log/auth.log: en este log se registran los login en el sistema, las veces que hacemos su, etc. Los intentos fallidos se registran en líneas con información del tipo clave no validad o login no válido.
- /var/log/dmesg: en este archivo se almacena la información que genera el kernel durante el arranque del sistema.
Estos archivos de logs acumulan información todo el tiempo por lo que en algún momento pueden ocupar mucho espacio, para solucionar este problema podemos comprimirlo o ir haciendo backup si son realmente necesarios. Algunos cambios a tener en cuenta son:
“*” (asterisco)=
“ “ : (blanco, espacio, nulo)
“,” (coma)
“;” (punto y coma)
“=” (igual)
4. Qué es y cómo usar Klogd en registros Linux
En los ambientes Linux contamos con dos fuentes de información de registro del kernel principales como lo son:
- El sistema de archivos /proc
- La interfaz syscall (sys_syslog)
Cuando se recibe un mensaje del kernel, el demonio Klogd leerá el nivel de prioridad asignado y le otorgará el nivel de prioridad tomando como base el mensaje de syslog. Al usar Klogd, también será posible cambiar la presentación de los mensajes del kernel en la consola del sistema, en un núcleo común, el nivel de registro de la consola predeterminado se establece en 7, así, todos los mensajes con un nivel de prioridad inferior a 7 (prioridad más alta) aparecerán en la consola. Los mensajes de nivel de prioridad 7 son considerados mensajes de "depuración" y, por lo tanto, no aparecerán en la consola para no saturar de información los demás eventos del kernel.
Klogd cuenta con una funcionalidad llamada Kernel Address Resolution mediante la cual, si el kernel detecta una condición de error interno, automáticamente se activa un protocolo de error de protección general. Esto forma parte del procedimiento de manejo de GPF, en el cual el núcleo imprime un informe de estado que indica el estado del procesador cuando se genera la falla, dentro de este resultado veremos detalles como los contenidos de los registros del microprocesador, los contenidos de la pila del kernel y un monitoreo de las funciones que se estaban ejecutando antes del error.
El proceso de resolver las direcciones numéricas a partir de los resultados del fallo de protección se puede hacer de forma manual o a través del programa ksymoops que se incluye en las fuentes del núcleo. El comando Klogd es compatible con el problema del diagnóstico de fallos de protección en los módulos cargables del kernel actuales.
Al igual que Syslogd, Klog ha sido reemplazado en las distribuciones actuales por comandos más dinámicos, de modo que para su instalación ejecutaremos lo siguiente. Allí ingresamos la letra S para confirmar la descarga e instalación.
apt install busybox-syslogd
La sintaxis de Klogd es la siguiente:
klogd [ -c n ] [ -d ] [ -f fname ] [ -iI ] [ -n ] [ -o ] [ -p ] [ -s ] [ -k fname ] [ -v ] [ -x ] [ -2 ]
Estas opciones son:
-c n
-d
-f
-i -I
-n
-o
-s
-v
Si deseamos leer todos los eventos después del inicio de sesión, vamos a ejecutar lo siguiente:
klogd -o -f ./krnl.msg
Después de esto será posible acceder al contenido de dicho archivo:
5. Señales de Klogd en Linux
El comando Klogd puede responder a ocho (8) señales que son: SIGHUP, SIGINT, SIGKILL, SIGTERM, SIGTSTP, SIGUSR1, SIGUSR2 y SIGCONT. Las señales SIGINT, SIGKILL, SIGTERM y SIGHUP permiten que el daemon cierre las fuentes de registro del kernel y finalice el proceso de forma correcta mientras que las señales SIGTSTP y SIGCONT son usadas para iniciar y detener el registro del kernel.
Por ejemplo, si deseamos debe desmontar el sistema de archivos /proc, debemos ejecutar los siguientes comandos:
# kill -TSTP pid # umount /proc # kill -CONT pid
Algunos archivos a usar con Klogd son:
- /proc/kmsg: es el archivo fuente para los mensajes del kernel klogd
- /var/run/klogd.pid: es el archivo que contiene el id de proceso de klogd
- /boot/System.map, /System.map, /usr/src/linux/System.map: son las ubicaciones por defecto para los mapas del sistema del kernel.
Como vemos, disponemos de estos dos comandos útiles y esenciales para una correcta y completa administración de los eventos del kernel en Linux.