68 votos

Registro de todos los comandos ejecutados por los administradores de los servidores de producción

Es política de la empresa para los administradores de inicio de sesión a los servidores a través de un nombre de usuario personal, y, a continuación, ejecute sudo -i a convertirse en root. Al momento de ejecutar sudo -i, sudo va a crear una variable de entorno llamada SUDO_USER, que contiene el original nombre de usuario del usuario.

Hay una forma de registro de TODOS los comandos dentro de syslog con algo parecido a la siguiente sintaxis:

${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}

Una entrada de ejemplo sería:

Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg

Obviamente no tiene que ser exactamente la sintaxis anterior, sólo se tiene que incluir un mínimo de la real usuario (por ejemplo. de la root), el usuario sudo (por ejemplo. ksoviero), y el comando que se ejecute (por ejemplo. yum install azar-pkg).

Ya he intentado snoopy, pero no incluye el SUDO_USER variable.

78voto

fuero Puntos 3235

Como fue sugerido por Michael Hampton, auditd es la herramienta correcta para el trabajo aquí.

He probado en Ubuntu 12.10 de la instalación, por lo que su kilometraje puede variar en otros sistemas.

  • Instale auditd:

    apt-get install auditd

  • Agregar estas 2 líneas a /etc/audit/audit.rules:

    -a la salida,siempre-F arch=b64-F euid=0-S execve
    -a la salida,siempre-F arch=b32-F euid=0-S execve

Estos hará un seguimiento de todos los comandos ejecutados por root (euid=0). ¿Por qué dos reglas? El execve syscall debe ser rastreado en sus versiones de 32 y 64 bits de código.

  • Para deshacerse de auid=4294967295 mensajes en los registros, agregar audit=1 a la del núcleo cmdline (editando /etc/default/grub)

  • Coloque la línea de

    session required pam_loginuid.so

en todos los archivos de configuración de PAM que son relevantes para el inicio de sesión (/etc/pam.d/{login,kdm,sshd}), pero no en los archivos que son relevantes para su o sudo. Esto permitirá auditd para obtener la llamada del usuario uid correctamente cuando se llama a sudo o su.

  • Reiniciar el sistema ahora.

  • Vamos de inicio de sesión y ejecutar algunos comandos:

 $ id-u
1000
 $ sudo ls /
 bin datos de arranque dev etc home initrd.img initrd.img.viejo lib lib32 lib64 lost+found medios de comunicación mnt optar proc root ejecutar sbin cero selinux srv sys tmp usr var vmlinuz vmlinuz.viejo
 $ sudo su -
 # ls /etc
[...]

Esto dará como resultado algo como esto en /var/log/audit/auditd.log:

----
time->Mon Feb  4 09:57:06 2013
type=PATH msg=audit(1359968226.239:576): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968226.239:576): item=0 name="/bin/ls" inode=2117 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968226.239:576):  cwd="/home/user"
type=EXECVE msg=audit(1359968226.239:576): argc=2 a0="ls" a1="/"
type=SYSCALL msg=audit(1359968226.239:576): arch=c000003e syscall=59 success=yes exit=0 a0=10cfc48 a1=10d07c8 a2=10d5750 a3=7fff2eb2d1f0 items=2 ppid=26569 pid=26570 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls" key=(null)
----
time->Mon Feb  4 09:57:06 2013
type=PATH msg=audit(1359968226.231:575): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968226.231:575): item=0 name="/usr/bin/sudo" inode=530900 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968226.231:575):  cwd="/home/user"
type=BPRM_FCAPS msg=audit(1359968226.231:575): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=0000000000000000 old_pi=0000000000000000 old_pe=0000000000000000 new_pp=ffffffffffffffff new_pi=0000000000000000 new_pe=ffffffffffffffff
type=EXECVE msg=audit(1359968226.231:575): argc=3 a0="sudo" a1="ls" a2="/"
type=SYSCALL msg=audit(1359968226.231:575): arch=c000003e syscall=59 success=yes exit=0 a0=7fff327ecab0 a1=7fd330e1b958 a2=17cc8d0 a3=7fff327ec670 items=2 ppid=3933 pid=26569 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="sudo" exe="/usr/bin/sudo" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.523:578): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.523:578): item=0 name="/bin/su" inode=44 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.523:578):  cwd="/home/user"
type=EXECVE msg=audit(1359968229.523:578): argc=2 a0="su" a1="-"
type=SYSCALL msg=audit(1359968229.523:578): arch=c000003e syscall=59 success=yes exit=0 a0=1ceec48 a1=1cef7c8 a2=1cf4750 a3=7fff083bd920 items=2 ppid=26611 pid=26612 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="su" exe="/bin/su" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.519:577): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.519:577): item=0 name="/usr/bin/sudo" inode=530900 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.519:577):  cwd="/home/user"
type=BPRM_FCAPS msg=audit(1359968229.519:577): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=0000000000000000 old_pi=0000000000000000 old_pe=0000000000000000 new_pp=ffffffffffffffff new_pi=0000000000000000 new_pe=ffffffffffffffff
type=EXECVE msg=audit(1359968229.519:577): argc=3 a0="sudo" a1="su" a2="-"
type=SYSCALL msg=audit(1359968229.519:577): arch=c000003e syscall=59 success=yes exit=0 a0=7fff327ecab0 a1=7fd330e1b958 a2=17cc8d0 a3=7fff327ec670 items=2 ppid=3933 pid=26611 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="sudo" exe="/usr/bin/sudo" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.543:585): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.543:585): item=0 name="/bin/bash" inode=6941 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.543:585):  cwd="/root"
type=EXECVE msg=audit(1359968229.543:585): argc=1 a0="-su"
type=SYSCALL msg=audit(1359968229.543:585): arch=c000003e syscall=59 success=yes exit=0 a0=13695a0 a1=7fffce08a3e0 a2=135a030 a3=7fffce08c200 items=2 ppid=26612 pid=26622 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/bin/bash" key=(null)
----
time->Mon Feb  4 09:57:11 2013
type=PATH msg=audit(1359968231.663:594): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968231.663:594): item=0 name="/bin/ls" inode=2117 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968231.663:594):  cwd="/root"
type=EXECVE msg=audit(1359968231.663:594): argc=3 a0="ls" a1="--color=auto" a2="/etc"
type=SYSCALL msg=audit(1359968231.663:594): arch=c000003e syscall=59 success=yes exit=0 a0=7fff8c709950 a1=7f91a12149d8 a2=1194c50 a3=7fff8c709510 items=2 ppid=26622 pid=26661 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls" key=(null)

El auid columna contiene la llamada del usuario uid, lo que le permite filtrar por los comandos ejecutados por el usuario con

 ausearch -ua 1000

Esto siquiera una lista de los comandos que el usuario ejecutado como root.

Fuentes:

10voto

jeffreypriebe Puntos 1070

Recuerde que sudo en sí registra todos los comandos sudo en el syslog, por lo que todos priv gustaría que los usuarios deben ser educados para no simplemente sudo para obtener una shell de root, pero :

sudo command p1 p2 ... pn

El problema con este o cualquier acercamiento que he pensado es que a medida que el root de usuario, es muy difícil evitar que un usuario de evadir cualquier tipo específico de registro. Por lo tanto cualquier cosa que intente será < 100% siento mucho decir.

La educación, la documentación, la ejecución y, sobre todo, la confianza es lo que es necesario.

3voto

Bostjan Skufca Puntos 41

Desde la versión 2.0.0 snoopy es capaz de iniciar una arbitraria variable ambiental.

Sin embargo, la reciente contribución señaló que el registro de propietario de tty es bastante eficaz y elegante de la respuesta a la pregunta de "¿Quién ejecuta el comando como root?".

Divulgación: yo soy snoopy mantenedor.

3voto

Mike McManus Puntos 36

Un número de establecimientos que en realidad prohibir el uso de auditd porque es intensivo en recursos, y puede resultar en una oportunidad para que los ataques de denegación de servicio.

Una solución es configurar las últimas Korn shell (ksh-93, ver http://kornshell.com/ para más detalles) registro de todos los comandos que se ejecutan como root a un servidor syslog, y requieren por la política que, salvo en situaciones de emergencia, los administradores de sistemas de registro en cuentas personales y ejecutar la mayor shell de Korn a través de sudo. El examen de los registros, se puede detectar cuando un administrador inicia otro shell desde la aprobación de la shell con el fin de cubrir sus pistas, y el SA puede entonces ser educados como sea necesario.

1voto

MadHatter Puntos 44059

No es que haya nada malo con cualquiera de las otras respuestas hasta ahora, pero si usted decide que sudo's de registro a través de la syslog es satisfactorio, me gustaría sugerir una arruga: registro es a través de la red a una distancia de auditoría de host.

Que se presenta en torno al problema de "ahora me he convertido en root, puedo eliminar cualquier rastro de mi malversación de los registros". Usted puede ahora ser root en el cuadro local, pero no se puede llamar a ese paquete de registro de la espalda de la red, y (presumiblemente) no tiene privilegios de root en el mando a distancia de auditoría de host.

He estado haciendo esto con algunas de las redes me las arreglo para años, y tiene otros dos de la señal de ventajas:

En primer lugar, hay un lugar en la red para ir a comprobar todo el sistema, lo que permite mucho más fácil de correlación de los incidentes, y por lo tanto es una tienda de una parada para investigaciones como "Cuando juno se quejaba de que el servidor NFS hera no responde, alguien más estaba quejando de la misma cosa al mismo tiempo? Si es así, hera es probable que sea el problema, vamos a ver lo que ella registra; si no, juno's de la conexión de red es más sospechoso, vamos a ver qué más juno registrado en ese momento.".

En segundo lugar, syslog registro de la rotación se hace más fácil: usted no conserve copias de los registros en locales anfitriones por más de un par de días, pero asegúrese de que el servidor de auditoría tiene enormes cantidades de espacio en disco, y mantener todos los syslogs allí por varios años. Además, si, por ejemplo, desea escribir un GUSANO medios de comunicación por ejemplo: la auditoría forense a los efectos de, usted sólo tiene que comprar un GUSANO de la unidad.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: