Como loguear comandos en historial por variable de bash
La situacion es la siguiente:
Tengo muchos servidores Linux Centos 6/7 y en cada uno de ellos hay uno o dos usuarios noroot y root (root siempre). Muchos clientes SSH se conectan a dichos servidores, y sería ideal mantener un log de qué cliente e IP ejecuta qué comandos.
Es inviable añadir usuarios a cada uno de estos sistemas pues son muchos, y cuando tenga clientes SSH nuevos no voy a estar añadiendo el nuevo usuario a cada uno de los servidores. Al fin y al cabo, los comandos acaban siendo realizados por root.
¿Cómo pretendo hacerlo entonces?
Dado que sí puedo hacer ligeras modificaciones en los servidores y en los clientes, puedo hacer que el cliente envíe por SSH una variable con nombre e IP publica y/o privada, que en el lado servidor se añadiria como info extra al HISTFILE de bash. Eso me funciona.
Idealmente ejecutaria history y el usuario/IP saldría al lado del timestamp, pero lo que estoy intentando de momento es que el historial de cada sesion bash se escriba en dos HISTFILES: uno .bash_history, y otro $VAR.history
De esa forma el uso de history no se veria afectado (los comandos serían navegables mediante [ArrowUp]) y tambien podría ver qué ha hecho tal usuario mirando en $VAR.history.
El problema principal que tengo es cómo escribir hacer que se me grabe el historial al final del mismo en dos ficheros, pero si a alguien se le ocurre otra forma para atajar este problema es totalmente bienvenido.
Saludos ! ^__ ^
Comentarios
@pq0 algo que puede servirte:
1) Agregando lo siguiente en
/etc/bashrc
2) Para que esto funcione adicionalmente deberás agregar el facility
local3
(u otro en caso que lo tengas ya ocupado) en/etc/rsyslog.conf
y el path/name del log que quieras (ej):3) Crear el log y reiniciar rsyslog
Probando esta solución, en el log resulta esto:
Ref: encontrado en este post.
Dame tu telefono te voy a invitar a un cafe o algo...
No conocía rsyslog.
Me ha funcionado a la perfección.
Era la solución que buscaba.
Mil gracias
Jajaja excelente.
De todos modos lo recomendable es:
AllowUsers
en/etc/ssh/sshd_config
)PermitRootLogin no
en/etc/ssh/sshd_config
)/etc/sudoers
, ver ansible debajo)Lo de crear/gestionar usuarios (y configs) en todos los servers se puede con ansible, pegale una mirada.
Si querés 1 nivel más: que todos los servers logueen el facility
local3.*
en un servidor de rsyslog remoto (otro linux) para no dejar logs en cada nodo y te queda todo en 1 lugar centralizado (donde otros no acceden) para guardar logs/correr auditorías.Ref:
Saludos.
Excelente.
Entiendo el punto de que esta monitorización no vale de mucho si cualquiera puede cambiar cualquier cosa con root, pero solo lo quiero para una monitorizacion basica, como con el history de bash. De todas formas lo del ansible es algo que tambien buscaba y tampoco conocía, y que me vendra muy bien.
Cielos, ¿que habré estado haciendo todos estos años que me acabo de meter en sysarmy?