Programación Aplicada Clase 10: Archivos LOG en BASH Nombre unidad de aprendizaje: Programación avanzada de SCRIPTS Escuela de Informática y Telecomunicaciones 2008, DuocUC
Objetivos Objetivos de la clase Programa rutinas utilizando los diferentes tipos de variables, constantes, operadores y sentencias de control en lenguaje Bash. Construye rutinas scripting para el análisis de LOG. 2
Archivos de LOG El SISTEMA DE LOGS de LINUX (log = registro), es un mecanismo estándar que se encarga de recoger los mensajes generados por el kernel, los programas, aplicaciones y demonios y lo que está ocurriendo en el sistema, y enviarlos a un destino predefinido. Esta información es muy importante para detectar intentos de acceso no autorizados, como se comporta un manejador, seguridad, estadísticas, detección de problemas, etc. 3
Archivos de LOG La información se envía en forma de mensajes a unos archivos conocidos como archivos de registro o archivos de logs. En cada mensaje de log consta la fuente (el programa que generó el mensaje), la prioridad (nivel de importancia del mensaje), la fecha y la hora. 4
Archivos de LOG Por ejemplo, un mensaje de error de kernel indicando un problema con los datos de un sistema de archivos ext2fs debería aparecer en los archivos log como: Dec 1 21:03:35 loomer kernel: EXT2-fs error (device 3/2): ext2_check_blocks_bit map: Wrong free blocks count in super block, stored = 27202, counted = 27853 5
Archivos de LOG Hay 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) y varios tipos de mensajes (auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, syslog, user, uucp y local0-local7). El SISTEMA DE LOGS arranca con el SCRIPT /etc/init.d/sysklogd, y tiene dos demonios: syslogd y klogd. 6
Archivos de LOG El demonio syslogd permite gestionar los logs del sistema. syslogd distribuye los mensajes a archivos, tuberías, destinos remotos, terminales o usuarios, usando las indicaciones especificadas en su archivo de configuración /etc/syslog.conf, donde se indica qué se loguea y a dónde se envían estos logs. 7
Archivos de LOG syslogd responde a la señal 1 (SIGHUP) cerrando los logs, releyendo la configuración y reiniciando la operación. Es por eso que si realizamos algún cambio en la configuración, o si rotamos o movemos los archivos de log, es necesario enviarle una señal SIGHUP a syslogd. 8
Archivos de LOG Una herramienta bastante potente para depurar errores en la configuración de syslog es ejecutarlo en modo debug con el flag -d (syslog -d). Ejecutado de este modo syslog despliega una tabla con una columna por cada facility y un renglón por cada acción. Los números en la tabla desplegada indican a partir de cual nivel se aplica la acción para cada facility. 9
Archivos de LOG Cuando se ejecuta en modo debug syslogd no libera el terminal. Después de desplegar la tabla con el resumen de acciones queda desplegando en pantalla cada mensaje que recibe y las acciones que se le aplican. El comando logger permite enviar eventos al demonio syslogd, por lo que se utiliza en scripts para registrar mensajes vía sysklogd. Por ejemplo, si hacemos: 10
Archivos de LOG # logger -t mi_programa -f /var/log/messages "Mensaje ejemplo" veremos que se ha añadido a /var/log/messages la línea: May 14 23:10:13 pc450 mi_programa: Mensaje ejemplo 11
Archivos de LOG El demonio klogd se encarga de los logs del kernel. Lo normal es que klogd envíe sus mensajes a syslogd pero no siempre es así, sobre todo en los eventos de alta prioridad, que salen directamente por pantalla. Los logs se guardan en archivos ubicados en el directorio /var/log, aunque muchos programas manejan sus propios logs y los guardan en /var/log/<programa>. 12
Archivos de LOG Además, es posible especificar múltiples destinos para un mismo mensaje. Algunos de los log más 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. 13
Archivos de LOG /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 invalid password o authentication failure. /var/log/dmesg: en este archivo se almacena la información que genera el kernel durante el arranque del sistema. Podemos ver su contenido con el comando dmesg. 14
Archivos de LOG /var/log/wtmp: este log contiene la información relacionada a los logins y logouts relacionados al sistema (desde donde, horario, fecha, usuario). Para poder verlo tenemos que utilizar el comando last. Relacionado con este, también tenemos el archivo utmp, el cual nos brinda información acerca de los usuarios logeados en el sistema al momento de solicitar la información. 15
Archivos de LOG Para acceder a esta información podemos utilizar el comando who (también se puede utilizar el comando last). /var/log/lastlog: Este archivo contiene información relativa a la fecha y hora del último login de cada usuario, para acceder a esta información podemos hacerlo con el comando lastlog. 16
Archivos de LOG Para indicar de que usuario queremos saber, anteponemos -u al nombre de usuario, por ejemplo, podemos usar: lastlog -u alumno. /var/log/faillog: este log registra los intentos fallidos de cada usuario al querer logearse en el sistema, para acceder tenemos el comando faillog. [alumno@localhost ~]$ faillog u alumno Username Failures Maximum Latest alumno 0 2 17
Archivos de LOG En la columna "Maximum" se indica la cantidad de intentos erróneos que se permiten antes de deshabilitar la cuenta, para modificar este valor se debe usar la orden faillog -u alumno -m valor donde valor es el número máximo. Para evitar que los archivos log crezcan indefinidamente con los mensajes, se hace que sean circulares (son rotados). 18
Rotación de los archivos de LOG Los archivos log pueden volverse grandes y difíciles de manejar, debido a esto LINUX provee un comando para rotarlos y así evitar que la información actual se mezcle con información vieja irrelevante. El paquete logrotate contiene una tarea de cron que hace circular (rotar) automáticamente los archivos de log. 19
Rotación de los archivos de LOG Para esto último será necesario utilizar el archivo de configuración /etc/logrotate.conf y los archivos de configuración en el directorio /etc/logrotate.d. Se puede configurar el comportamiento automático de logrotate editando el archivo de configuración /etc/logrotate.conf. 20
Rotación de los archivos de LOG Generalmente, logrotate se ejecuta cada cierto tiempo automáticamente, aunque también puede ejecutarse de forma manual. Cuando es ejecutado, logrotate tomará la versión actual de un archivo de log y le añadirá un ".1" al final de su nombre. Luego, cualquier otro archivo rotado previamente será renombrado secuencialmente ".2", ".3", etc. Cuando más grande el número del log, más viejo es el archivo. 21
Rotación de los archivos de LOG El programa logrotate puede rotar los archivos log basado en varios parámetros, pudiéndose realizar rotaciones diariamente, semanalmente o mensualmente; además, basado en el tamaño del archivo de log, logrotate puede comprimir los logs para no comprometer el espacio del disco, etc. En resumen, logrotate es una completa herramienta de administración de los logs del sistema. 22
Rotación de los archivos de LOG Una vista parcial del archivo de configuración de logrotate se muestra a continuación: [root@localhost ~]# cat /etc/logrotate.conf # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress 23
Rotación de los archivos de LOG Algunas de las directivas de configuración de logrotate incluyen: daily - Los archivos log serán rotados todos los días. weekly - Los archivos log serán rotados una vez por semana. monthly - Los archivos log serán rotados una vez por mes. 24
Rotación de los archivos de LOG rotate Especifica el número de veces que los archivos log serán rotados antes de que sean borrados o enviados por correo a una dirección especificada en una directiva mail. compress Las versiones antiguas de los archivos log serán comprimidas con gzip. Existen varias otras directivas asociadas con el programa logrotate; como siempre, consultar el manual en línea para más información. 25
Rotación de los archivos de LOG Son varias las aplicaciones y/o servicios que instalan sus propios archivos de rotación de logs dentro del directorio /etc/logrotate.d/, esto permite asegurar que sus logs sean adecuadamente rotados. Por ejemplo, el paquete apache2 crea el archivo de rotación /etc/logrotate/apache2. 26
Seguridad general de los logs Por lo general, no se debe permitir que los demás usuarios vean los archivos de log de un servidor, y especialmente que puedan ser capaces de modificarlos o borrarlos. En general, la mayoría de los archivos de log son propiedad del usuario y grupo root, y no tienen asignados permisos para otros, de modo que en la mayoría de los casos, el único usuario que será capaz de modificar los logs será el root. 27
Seguridad general de los logs Se pueden tomar medidas de seguridad adicionales, siendo la más simple el uso de la orden chattr (CHANGE ATTRIBUTES), para dejar exclusivamente permiso de sólo-añadir a los archivos de log. De tal forma que si se da un problema en /tmp que permita a la gente sobreescribir archivos del sistema no se puedan dañar los archivos de logs. 28
Seguridad general de los logs Para dejar un archivo en modo sólo-añadir, se puede utilizar el siguiente comando: [root@localhost ~]# chattr +a nombre_archivo A la función chattr sólo tiene acceso el superusuario. 29
Seguridad general de los logs Si se dejan todos los archivos en modo sóloañadir, hay que tener en cuenta que fallarán los programas de rotación de logs, puesto que no pueden dejar en cero el archivo de log. Para deshabilitar el atributo sólo-añadir se agrega la siguiente línea al script: chattr -a nombre_archivo 30
Seguridad general de los logs y luego, se puede añadir una línea después del script de rotación de logs para reiniciar el flag de sólo-añadir. Si los archivos de logs se dejan en el sistema, quizás sea preferible activar también el flag de inmutables, de forma que no se puedan falsificar con facilidad. Para activar el archivo como inmutable, simplemente utilizar el comando: 31
Seguridad general de los logs [root@localhost ~]# chattr +i nombre_archivo lo que evitará cualquier cambio en el archivo. sólo el usuario root tiene acceso al flag de inmutable. 32
Resumen Resumen de la clase El SISTEMA DE LOGS de LINUX, es un mecanismo estándar que se encarga de recoger los mensajes generados por los programas, aplicaciones y demonios y enviarlos a un destino predefinido. En cada mensaje de log se deja constancia de la fuente (el programa que generó el mensaje), la prioridad (nivel de importancia del mensaje), la fecha y la hora del evento. En LINUX, syslogd gestiona los logs del sistema y klogd se encarga de los logs del kernel. Los logs de los sistemas UNIX/LINUX se guardan en archivos ubicados en el directorio /var/log, aunque, usualmente, muchos programas manejan sus propios logs y los guardan en /var/log/<programa>. Los archivos de log en LINUX son críticos para la resolución de problemas y el mantenimiento del sistema. 33
Resumen Resumen de la clase El registro de los mensajes de log usualmente se hace a archivos de texto, evitando así la necesidad de herramientas propietarias para leerlos. Los archivos de texto son también fáciles de leer con miras a su uso en scripts y programas. También hay archivos de log binarios, que necesariamente deben ser consultados a través de comandos y/o herramientas LINUX. Los logs son rotados para evitar que se vuelvan demasiado grandes y son separados de la información actual, dicha rotación es configurable. Se puede decir que logrotate es una completa herramienta de administración de los logs del sistema. El registro de los logs es altamente configurable, pudiendo incluso ser guardados en sistemas separados por cuestiones de seguridad y/o resguardo. 34
Resumen Resumen de la clase Por lo general, no se debe permitir que los demás usuarios vean los archivos de log de un servidor, y especialmente que puedan ser capaces de modificarlos o borrarlos; en general, la mayoría de los archivos de log son propiedad del usuario y grupo root, y no tienen asignados permisos para otros, de modo que en la mayoría de los casos, el único usuario que será capaz de modificar los logs será el root. Se pueden tomar medidas de seguridad adicionales, siendo la más simple el uso de la orden chattr, para dejar exclusivamente permiso de sóloañadir a los archivos de log. Si los archivos de logs se dejan en el sistema, quizás sea preferible activar también el flag de inmutables, de forma que no se puedan falsificar con facilidad. 35