Backup de archivos WTMP y WTMPX en Unix SCO Openserver

Este artículo trata acerca de la necesidad de realizar copias de seguridad de los archivos wtmp y wtmpx en Unix SCO. Estos archivos son de suma importancia para realizar auditoria de conexiones remotas a servidores con sistemas operativos Unix-like.

Si bien este artículo tiene un propósito práctico, su trasfondo se encuentre muy ligado a un tema que requiere de especial atención entre los administradores de servidores: los registros de auditoria. En cualquier entorno laboral donde se almacene información crítica los registros de auditoria juegan un papel fundamental a la hora de obtener datos precisos cuando la seguridad ha sido comprometida.


Importancia de los archivos wtmp y wtmpx

Surgió la necesidad de revisar los logs de conexiones de usuarios de un servidor Unix, específicamente de un SCO Openserver 6.0, en realidad lo que se estaba buscando era un log cuyo contenido tuviese el login de los usuarios y las direcciones IP o nombres de los equipos desde donde se conectaron al servidor.

En distribuciones Linux se pueden encontrar todos los logs en el directorio /var/log, sin embargo, en el Unix SCO Openserver solo los logs de servicios GNU se encuentran en el directorio /var/log, los demás logs se encuentran en los directorios /var/adm y /usr/adm.

Busqué un log que contenga información acerca de las conexiones de telnet, que era el protocolo de conexión. Primeramente me puse a buscar infructuosamente en el archivo log correspondiente al servicio syslog, luego, buscando en la red encontré que en el archivo wtmp y en algunos casos en el archivo wtmpx (archivo con información extendida al contenido de wtmp, no todos los Unix utilizan este archivo) estaría la información que necesitaba y en definitiva así fue.

Estos archivos son binarios y en SCO se los puede encontrar en el directorio /etc, para desplegar la información que contienen es necesario utilizar el comando last. Si ejecutamos el comando last sin pasarle ningún argumento, éste desplegará la información contenida en el archivo wtmp. La información que alberga el Unix SCO Openserver 6.0 en el archivo wtmp no incluye la dirección IP o el nombre del host desde donde se produjo la conexión, y es ahí donde entra a jugar el archivo wtmpx.

Pensando que ya tenía todo a mi disposición me encontré con un realidad inesperada, el contenido de los archivos wtmp y wtmpx solo mantenían la información a lo que iba de la semana en curso, no había registros de semanas ni meses anteriores, algo que sinceramente no me esperaba. Sin la información requerida para aclarar la duda comencé a investigar como esto era posible, ¿cuales son las políticas de auditoria de SCO? me fije en servidores Linux y pude constatar que dejaban varios meses estos archivos antes de limpiarlos, aunque esto es configurable en logrorate, herramienta pre-instalada y lanzada por defecto que se encarga de realizar la limpieza periódica de los archivos logs, previa copia de seguridad.

Después de investigar buen tiempo descubrí que hay un script en el directorio /etc llamado cleanup que limpia los archivos wtmp y wtmpx, pero lo peor es que había una tarea programada que ejecutaba este script cada domingo a las 5:17 hs. sin realizar antes una copia de seguridad, esto lo pude constatar estando conectado con el usuario root y ejecutando el comando crontab -l.
testsrv# crontab -l
#       @(#) root 90.1 00/05/01
#
# Copyright (C) 1989-2000 The Santa Cruz Operation, Inc.
# All Rights Reserved.
# The information in this file is provided for the exclusive use of
# the licensees of The Santa Cruz Operation, Inc. Such users have the
# right to use, modify, and incorporate this code into other products
# for purposes authorized by the license agreement provided they include
# this notice and the associated copyright notice with any such product.
# The information in this file is provided "AS IS" without warranty.
#

17 5 * * 0 /etc/cleanup > /dev/null
2 3 * * 0,4 /usr/lib/cron/logchecker
0 1 * * * /usr/bin/calendar -
3 3 * * * /usr/lib/cleantmp > /dev/null
1 3 * * * /etc/setclk -rd1800 > /dev/null 2>&1
#5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A
0 4 * * 0 /etc/custom -V symlinks;# CUSTOM_SYMLINK_REPORT
0 0 * * 1-5 scosh cronsched -r
0 0 * * 1 scosh cronsched -wr
#

Al percatarme de este grave error de configuración que afecta directamente a la seguridad le consulté a los administradores si habían registrado esa tarea programa, a lo que me respondieron que no, por lo que procedí a instalar una copia del sistema operativo desde cero donde pude comprobar que lamentablemente dicha tarea programada se registra por defecto durante la instalación. De igual forma, este problema no es exclusividad de SCO, ya que también se encuentra presente en el Unix SystemV de AT&T.

Ahora bien, como es posible una configuración por defecto de este tipo en un entorno Unix? buena pregunta! Siempre sostuve que los Unix soy muy robustos y fiables, pero así también bastante rudimentarios. Sin más remedio lo único que restó fue buscar una solución correctiva al problema de auditoria, tarde, pero solución al fin que servirá para casos futuros, la misma se trata a continuación.


Copias de seguridad automáticas

La solución que se presenta a continuación para realizar copias de seguridad de los archivos wtmp y wtmpx quizás no sea la más elaborada, pero satisface la necesidad. Como no he encontrado un servicio similar a logrotate, he decidido crear un script que se dedique a realizar esta tarea periódicamente. A continuación se presentan los pasos para implementarla.
  1. Crear en el directorio /etc un archivo llamado backup_loginslogs.sh, posteriormente lo editaremos,
    testsrv# touch /etc/backup_loginslogs.sh
    testsrv# vi /etc/backup_loginslogs.sh

    y le agregamos el script bash que realizará la copia de seguridad:
    #!/bin/bash
    # -- Respaldo de archivos wtmp y wtmpx
    # Las copias de seguridad se depositan
    # en el directorio /var/log.

    DIA=`date +"%Y%m%d"`
    HORA=`date +"%H%M"`
    ARCHIVO_WTMP=wtmp_$DIA-$HORA
    ARCHIVO_WTMPX=wtmpx_$DIA-$HORA

    # -- Copia y compacta los archivos
    cp /etc/wtmp /var/log/bkp_wtmp/$ARCHIVO_WTMP
    rm /var/log/bkp_wtmp/$ARCHIVO_WTMP.*
    pack /var/log/bkp_wtmp/$ARCHIVO_WTMP

    cp /etc/wtmpx /var/log/bkp_wtmpx/$ARCHIVO_WTMPX
    rm /var/log/bkp_wtmpx/$ARCHIVO_WTMPX.*
    pack /var/log/bkp_wtmpx/$ARCHIVO_WTMPX

    # -- Finalmente realiza el cleanup
    # See if day it's the first from mounth.

    TODAY=`date +%d`
    if [ $TODAY -eq "01" ]; then
    /etc/cleanup
    fi
    Enlace: Script en Github Gist.

  2. Editamos el crontab del usuario root,
    testsrv# crontab -e
    le comentamos la linea que programa la ejecución del script cleanup y le agregamos la programación para la ejecución diaria del script backup_loginslogs.sh.
    #       @(#) root 90.1 00/05/01
    #
    # Copyright (C) 1989-2000 The Santa Cruz Operation, Inc.
    # All Rights Reserved.
    # The information in this file is provided for the exclusive use of
    # the licensees of The Santa Cruz Operation, Inc. Such users have the
    # right to use, modify, and incorporate this code into other products
    # for purposes authorized by the license agreement provided they include
    # this notice and the associated copyright notice with any such product.
    # The information in this file is provided "AS IS" without warranty.
    #
    #17 5 * * 0 /etc/cleanup > /dev/null

    2 3 * * 0,4 /usr/lib/cron/logchecker
    0 1 * * * /usr/bin/calendar -
    3 3 * * * /usr/lib/cleantmp > /dev/null
    1 3 * * * /etc/setclk -rd1800 > /dev/null 2>&1
    #5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A
    0 4 * * 0 /etc/custom -V symlinks;# CUSTOM_SYMLINK_REPORT
    0 0 * * 1-5 scosh cronsched -r
    0 0 * * 1 scosh cronsched -wr
    #
    # Genera copia de seguridad de los archivos wtmp y wtmpx.

    0 0 * * * /etc/backup_loginslogs.sh > /dev/null

    OBS: Es fundamental no olvidarse de comentar la línea Nº 12 del script anterior (17 5 * * 0 /etc/cleanup > /dev/null), ya que si no se hace, el backup no contendrá la información del logueo de todo el mes, solo una pequeña parte.
  3. Por último solo nos resta parar y volver a iniciar el servicio cron para que nuestra programación quede activada:
    testsrv# /etc/init.d/cron stop
    testsrv# /etc/init.d/cron start



Visualización del contenido de los archivos

Para desplegar la información del archivo wtmpx, necesitamos pasarle como parámetro al comando last la ubicación del archivo luego del argumento -W, como por ejemplo:
testsrv# last -W /var/adm/wtmpx
maplaya1 p3 ttyp3 3085 playa1 Sun Apr 27 05:34 13:02 ??
maplaya p2 ttyp2 3072 playa Sun Apr 27 05:32 14:27 ??
maplaya p1 ttyp1 3060 playa Sun Apr 27 05:31 14:31 ??
...

OBS: En el Unix SystemV de AT&T y en las distros Linux se utiliza el argumento -f para indicar la ruta al archivo.

Por su parte, para visualizar el contenido de un archivo wtmp en Unix SCO Openserver, luego del comando last se debe agregar el argumento -w seguido de la ruta y nombre del archivo (o copia del mismo) como se muestra a continuación:
testsrv# last -w /tmp/wtmp
User Line Device PID Login time Elapsed Time Comments
root p3 ttyp3 19705 Mon Feb 20 14:05 00:00
testsrv#



Nota final

Hay que tener cuidado con estos aspectos de seguridad, la información de los archivos log son de mucha importancia y siempre se necesitan en los momentos menos esperados, a veces nosotros los administradores no nos tomamos el tiempo suficiente para hacer las configuraciones pertinentes, y en muchos casos ni siquiera estamos en conocimiento de que y como hacerlo.

Comentarios