Mostrando entradas con la etiqueta audit. Mostrar todas las entradas
Mostrando entradas con la etiqueta audit. Mostrar todas las entradas

Controlar actividad de usuarios en GNU/Linux

Una de las cosas más complejas a la hora de administrar un servidor compartido es controlar qué hace cada usuario. Es importante tener y poder saber qué hace cada usuario en su momento, no sin embargo verlo. Esta parte hay que dejarla clara: Poder saber no es lo mismo que saber. Cada usuario en su día a día de trabajo necesita hacer muchas cosas, y que seas root no te da derecho a "espiar" lo que hace cada usuario. Sin embargo, puede darse el caso de que pase algo en el sistema y quieras saber quién fue el responsable de tal fechoría. Para hacer este tipo de análisis, sí que se puedes emplear estas herramientas de auditaría.
Hoy vamos a hablar por lo tanto de acct, una utilidad para la contabilidad de procesos e inicios de sesión en GNU/Linux. Si la tienes que emplear, da mucho juego e información, así que no está demás tenerla como proceso en el sistema. No consume mucho y llegado el momento, puede ser de utilidad.
Lo primero es instalarla. Para ello,
shell> apt-get install acct
O en sistemas Red Hat,
shell> yum install psacct
Tras su instalación, tendremos que arrancar el proceso que lleva el mismo nombre que el paquete. A partir de este momento, acct estará ya recolectando datos para nosotros, así que toca ver la forma de explotar los datos que almacena.
  • ac
    Este comando se encarga de sacar información de tiempo de conexión de usuario al sistema.
    shell> ac -p
       root                  1823.40
       javier                0.00
    
       total     1823.40
    
  • sa
    No muestra un sumario de información relativa a las estadísticas de ejecución de cada usuario.
    shell> sa -u
       -7365568   0.00  cpu    979k  mem  accton
       -7365568   0.00  cpu  26288k  mem  touch
       -7365568   0.00  cpu  26608k  mem  psacct
       -7365568   0.00  cpu    979k  mem  consoletype
       -7365568   0.00  cpu  26528k  mem  psacct       *
       -7365568   0.00  cpu  26608k  mem  psacct
       -7365568   0.00  cpu  28928k  mem  ls
       -7365568   0.31  cpu  27696k  mem  bash
       -7365568   1.41  cpu  17472k  mem  sshd
       -7365568   0.00  cpu   4332k  mem  unix_chkpwd
       -7365568   0.00  cpu   4332k  mem  unix_chkpwd
       -7365568   0.00  cpu  16416k  mem  sshd         *
       ...
    
  • lastcomm
    Muestra todos los comandos que los usuarios han ejecutado en el sistema. Este es el comando más potente, sin dudarlo, ya que permite sacar mucha información o ser muy cotilla, lo que prefiramos.
    A parte del comando ejecutado, también nos indica la fecha, el usuario y dónde se ejecutó.
    shell> lastcomm
       gtbl           root   pts/0   0.00 secs Sun Jun 22 13:48
       sh         F   root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       bash       F   root   pts/0   0.00 secs Sun Jun 22 13:23
       hostname       root   pts/0   0.00 secs Sun Jun 22 13:23
       bash       F   root   pts/0   0.00 secs Sun Jun 22 13:23
       id             root   pts/0   0.00 secs Sun Jun 22 13:23
       sshd      SF   sshd   ---     0.00 secs Sun Jun 22 13:23
       ...
    
    Como veis, información muy valiosa para análisis en caso de desastre.
Por supuesto, estos tres comandos tienen muchas más opciones que permiten extraer o simplificar la información mostrada, así que no dudes en echarle un vistazo a la página man de cada uno.
Leer más

Monitorizar cambios en carpetas

Fijo que a muchos de vosotros alguna vez os interesó saber quién o cuando se modificaba un archivo y también que os llegase un aviso o que por lo menos quedase registrado en los log's. Aunque ya vimos una forma de hacerlo con audit, hoy os quiero presentar un servicio que se dedica sólo a eso. Se llama incron y, por definirlo, se podría decir que es un pequeño servicio que de dedica a monitorizar las carpetas que le indicamos y ejecutar acciones cuando detecta un cambio (también el que indiquemos).
incron está disponible tanto en Debian/Ubuntu como en CentOs/Red Hat en los repositorios, así que la instalación es sencilla.
shell> apt-get install incron
El fichero de configuración principal es /etc/incron.conf, pero su configuración por defecto nos sirve perfectamente. Dentro de la carpeta /etc/incron.d se colocan todos aquellos archivos de configuración que deseemos incluir con el siguiente formato.
directorio  cambio_a_monitorear  comando_a_ejecutar  parámetros
De los cuales,
  • directorio
    Ruta completa al path que deseamos monitorizar
  • cambio_a_monitorear
    Tipo de cambio sobre el que se va a alertar. Puede ser más de uno, separados por comas. Los cambios disponibles son:
    • IN_ACCESS
      Se accedió a un archivo del directorio
    • IN_ATTRIB
      Se cambió algunos de los atributos de algún archivo
    • IN_CLOSE_WRITE
      Archivo abierto para escritura fue cerrado
    • IN_CLOSE_NOWRITE
      Archivo abierto no fue cerrado
    • IN_CREATE
      Se creó un nuevo fichero o directorio
    • IN_DELETE
      Se borró un fichero o directorio
    • IN_DELETE_SELF
      Fichero o directorio se borró a si mismo
    • IN_MODIFY
      El archivo fue modificado
    • IN_MOVE_SELF
      El archivo se movió a si mismo
    • IN_MOVED_FROM
      Se movió un archivo a otro directorio
    • IN_MOVED_TO
      Se movió un archivo a este directorio
    • IN_OPEN
      El archivo fue abierto
    • IN_ALL_EVENTS
      Todos los eventos
  • comando_a_ejecutar
    Comando bash a ejecutar.
  • parámetros
    Variables que pueden ser pasadas al comando como parámetros.
    • $$
      Símbolo del dolar
    • $@
      Ruta completa del directorio monitorizado
    • $#
      Archivo que produjo el evento
    • $%
      Nombre del evento que produce la alerta. Son de la lista anterior
    • $&
      Número de evento
Un ejemplo de fichero de configuración que monitorice todo lo ocurrido en /tmp/example puede ser,
/tmp/example  IN_ALL_EVENTS  logger  "$% $#"
Y lo que hacemos es que todo lo que suceda lo envía con logger a syslog. Si ahora vemos lo ocurrido,
logger: "IN_CLOSE_NOWRITE,IN_ISDIR "
logger: "IN_OPEN,IN_ISDIR "
incrond[14571]: (system::test) CMD (logger "IN_CREATE file2")
incrond[14571]: (system::test) CMD (logger "IN_OPEN file2")
incrond[14571]: (system::test) CMD (logger "IN_ATTRIB file2")
incrond[14571]: (system::test) CMD (logger "IN_CLOSE_WRITE file2")
logger: "IN_CREATE file2"
logger: "IN_OPEN file2"
logger: "IN_CLOSE_WRITE file2"
logger: "IN_ATTRIB file2"
Y si en vez de emplear el comando logger empleamos el comando mail, se non enviaría una alerta al correo en cada evento que hayamos detectado.

La entrada Monitorizar cambios en carpetas la puedes leer en Puppet Linux.
Leer más

Comandos interesantes, audit

Supongo que a la mayoría de los administradores de sistemas GNU/Linux siempre les gustará saber qué está pasando en su sistema y saber qué persona hace cada cosa. Si bien ya hemos hablado de algún programa que servía para loguear los comandos que se ejecutaban en el sistema, también hay otros programas, como AIDE (del que prometo hablar pronto) que también indican qué ficheros se han modificado. Sin embargo, hoy vamos a hablar de audit, un pequeño daemon para nuestro sistema que registrará el usuario que hace el cambio, cómo lo hace, qué tipo de cambio, etc. Como podéis observar un daemon muy necesario para el sistema.
Para comenzar, instalamos el software necesario. Está disponible en los repositorios de las principales distribuciones.
shell> apt-get install auditd
Una vez instalado todo lo necesario, simplemente queda configurarlo antes de arrancar el servicio. Para ello debemos de tocar dos ficheros, el auditd.conf y el audit.rules, ambos en /etc/audit. El primero es el fichero general de configuración del daemon,
# This file controls the configuration of the audit daemon

log_file = /var/log/audit/audit.log
log_format = RAW
log_group = root
priority_boost = 4
flush = INCREMENTAL
freq = 20
num_logs = 4
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
##name = mydomain
max_log_file = 5
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
##tcp_listen_port =
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
Y el segundo, el fichero de reglas, donde indicamos el tipo de monitorización que deseamos tener sobre cada fichero y también reglas generales para todos los ficheros.
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320

# User administration
-w /etc/group -p wa -k SYSTEM_group
-w /etc/passwd -p wa -k SYSTEM_passwd
-w /etc/login.defs -p wa -k SYSTEM_login.defs
-w /etc/securetty -p wa -k SYSTEM_securetty
-w /etc/sysconfig/authconfig -p wa -k SYSTEM_network
-w /etc/ssh/sshd_config -p wa -k SYSTEM_sshd
Las últimas son las principales y más importantes y el significado es el siguiente,
  • -w
    es que registre cuando se modifica
  • -p wa
    Registra las modificaciones del sistema
  • -k
    Setea el filtro cuando busquemos los audit log deberemos filtrar por esta file

Ahora únicamente nos queda por arrancar el daemon.

shell> service auditd start
Tras ello, las operaciones que afecten a los ficheros indicados quedarán registradas y las podremos buscar y saber qué ha pasado gracias al comando ausearch. Por ejemplo, veamos lo que nos dice acerca del fichero /etc/ssh/sshd_config.
shell> ausearch -f /etc/ssh/sshd_config

time->Wed Nov  6 19:41:22 2012
type=PATH msg=audit(1309963282.841:81): item=0 name="/etc/ssh/sshd_config" inode=693347 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1309963282.841:81):  cwd="/root"
type=SYSCALL msg=audit(1309963282.841:81): arch=40000003 syscall=226 success=yes exit=0 a0=8b14540 a1=1a5b0f a2=8b78430 a3=1c items=1 ppid=2960 pid=2989 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=tty2 ses=1 comm="vim" exe="/usr/bin/vim" key="SYSTEM_sshd"
Como indicamos en negrita, vemos el uid del usuario que hizo la modificación (en este caso uid=0, root) y que empleó vim para hacer dicha modificación. También vemos la key con la que quedó registrado, para búsquedas más rápidas.
Para más información se pude consultar el man de ausearch y de auditctl.

La entrada Comandos interesantes, audit la puedes leer en Puppet Linux.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios