0
Syslog de todos los comandos de admin en Linux

Solved 4 Respuestas 64 Views
Hola, es facil la pregunta. Quiero loguear todos los comandos que se ejecuten dentro de un equipo en un servidor syslog centralizado.

Saludos!!

4 Respuestas

0
Mejor respuesta
Si tenes ganas de compilar un modulo, te podes leer esto:

https://dl.packetstormsecurity.net/papers/general/binfmt-en.pdf

Si no podrias estudiar la variable HISTFILE para ver si le podes hacer algun pipe a logger, por ejemplo export HISTFILE="| logger" o similar.

Otra opcion podria ser un cron que corra cada cierto tiempo y ejecute algo asi:

for i in `history`; do logger $i; done

 

DISCLAIMER: "Todo lo anterior lo escribi sobre la marcha, puede fallar todo, por ejemplo el ejemplo del history seguramente logueara palabra por palabra, pero sirve para dar ideas"

Lo que si el pdf lo hice y funciona, el tema es que deberias ver la forma de usar syslog en C.

Saludos
respondido por luigibalzani (10,570 puntos) Jul 28, 2015
seleccionada por ikarudelabasto Jul 28, 2015
5Comentarios
comentado por ikarudelabasto (3,220 puntos) Jul 28, 2015
Si si, ahi seguí tu concejo del HIST y parece que ahipuede andar. Saludos!
comentado por luigibalzani (10,570 puntos) Jul 28, 2015
Postea como lo hiciste que nos srive a todos!

Saludos!
comentado por ikarudelabasto (3,220 puntos) Jul 28, 2015
Juné un poco lo que puso qlixed y vos. El tema con auditd es que la lineas de logs que me genera son muy largas. Entonces lo que hice fue

1) Para usuarios existentes, agregué la siguiente linea al .bashrc:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) comando[$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

2) Luego hice lo mismo en el /etc/skel, agregué la linea anterior para que se cargue automáticamente por cada usuario que creo

3) Finalmente, agregue al auditd las siguiente configuraciones:
-w /home/usuario1/.bashrc -p wa
-w /home/usuario2/.bashrc -p wa
-w /home/usuario3/.bashrc -p wa

Esto lo que hace es avisarme si alguno me modificó el archivo a propósito.  También voy a ver como hacer si alguno me modificó la vairable PROMPT_COMMAND

Como dice arriba, uiliza el local6, por lo tanto eso se lo envio a un servidor de syslog centralizado syslog-ng y junto con reglas de filter log y destination tengo un archivo especifico para los logs de ese server, de comandos.
comentado por ikarudelabasto (3,220 puntos) Jul 28, 2015
Otra cosa mas a tener en cuenta. El log rotate que rote los logs, ojo.
comentado por luigibalzani (10,570 puntos) Jul 29, 2015
Se me ocurrio una manera mas, no creo que te sirva pero por lo menos sirve para jugar un rato y aprender, o recordar, como usar named pipes sirve:

1- crear un named pipe:
# mkfifo /tmp/pepepipe

2- direccionar el pipe a logger
# logger -p local0.info < /tmp/pepepipe &

3- setear la variable HISTFILE con el pipe
# export HISTFILE="/tmp/pepepipe"

Esto funciona bien pero tiene dos temas, uno es que no te guarda el .history y el otro es que te tira los comandos a logger cuando se cierra la sesion.

Saludos
-5
respondido por Mstaaravin (1,440 puntos) Jul 28, 2015
1
Para syslog centralizado podés usar syslog-ng [1]  o bien para algo mas completo logstash [2]  pero si necesitás grabar la sesión y tener mayor granularidad de permisos quizás te interese un broker de sesión [3]

 

[1] https://syslog-ng.org/

[2] https://www.elastic.co/products/logstash

[3] http://www.beyondtrust.com/Products/PowerBrokerUnixLinux/
respondido por rd (2,520 puntos) Jul 28, 2015
1
A ver, fijate con esto:

$ auditctl -d task,always -F euid=0

Creo que deberia andar.

Si queres filtrar solo comandos exitosos:

$ auditctl -d task,always -F euid=0 -F success=1
respondido por qlixed (10,630 puntos) Jul 28, 2015
...