Me gustaría modificar la configuración del historial de todos los usuarios en los sistemas que administro. Me gustaría que contenga la información del terminal de conexión como dewho
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
Actualmente modifico mi historial de las siguientes maneras. Sé que muchas de estas configuraciones se han cubierto aquí varias veces. Sin embargo, saqué este código de " Recetas de administración del sistema Linux por: Juliet Kemp " hace mucho tiempo.
shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T "
shopt -s histappend
soluciona el problema cuando tienes múltiples terminales, la información abierta puede perderse.
PROMPT_COMMAND='history -n;history -a'
se extiende para proporcionar anexos en tiempo real al historial en múltiples terminales.
HISTSIZE=100000
HISTFILESIZE=100000
extiende la cantidad de history
retención
HISTTIMEFORMAT="%m/%d/%y %T
"precede a cada línea del historial con una marca de tiempo
Lo que normalmente obtienes con history
835 ls
836 cd ..
Mis history
resultados actuales modificados
5853 03/26/12 07:16:49 ls
5854 03/26/12 07:16:50 ll
El regreso de history
me gustaría ver
5853 03/26/12 07:16:49 sysadmin.doofus.local ls
5854 03/26/12 07:16:50 sysadmin.doofus.local ll
001 03/26/12 05:11:29 demo_user.doofus.local cd
002 03/26/12 05:11:30 demo_user.doofus.local ll
No estoy "casado" para ver el DNS
nombre. Solo lo querría allí si lo extrae de who
u otra ubicación sin la necesidad de realizar una búsqueda o consulta de ningún tipo. Estaría contento con la dirección IP.
002 03/26/12 05:11:30 192.168.0.2 ll
¿Por qué? Administro varios sistemas donde un ID de usuario que comparten varios usuarios del mismo grupo para realizar sus tareas diarias. Esto me permitiría correlacionar su ubicación real y el usuario real dentro de la organización con lo que hicieron en la historia.
Soy consciente de que esto no es óptimo y me gustaría cambiarlo, pero cuando estás en un barco del tamaño de un crucero no intentas dar vueltas. (Nota: cuando lo haces, los pasajeros intentan arrojarte por la borda)
De todos modos, hasta que pueda migrarlos a una mejor solución, me gustaría tener esta capacidad de seguimiento.
Además, si tiene alguna recomendación sobre lo que estoy usando actualmente para mis history
modificaciones, me encantaría escucharla.
Gracias,
Editar: 1
No quiero ejecutar otros programas ni tener que configurar nada adicional "dentro de lo razonable".
Quiero agregar 0
gastos generales, si tengo que agregarlo, debe ser pequeño.
Confío en mis usuarios. Solo me gustaría (en caso de que ocurriera algo) ver cuál de los 10 usuarios que iniciaron sesión en el sistema con el mismo usuario: contraseña. O bien, podría no haber sido un usuario, podría haber sido olvidado cron
en un sistema que realiza una conexión como usuario para hacer algo. O una aplicación Ej: BMC Control-M
que se conecta ssh
y ejecuta tareas. No se trata tanto de encontrar "malos usuarios" como de poder rastrearlo con un mínimo de esfuerzo.
Edición 2:
Los sistemas ejecutan SLES y RHEL
/proc
/dev
y/home
directorios de usuarios . Esto agrega gastos generales. Mientrashistory
que ya se está grabando y su información de conexión es conocida por el sistema que conecta la IP, etc. Esta información, si aún no está disponible "estáticamente", podría establecerse de esa manera o almacenarse en una variable o archivo e ingresarse a loshistory
registros y al rendimiento. sería muy pequeño o 0.auditd
. No estoy seguro si sus registros le darán suficiente información. La dificultad de lo que quieres es precisamente por qué las cuentas compartidas son tan criticadas.auditd
es muy parecido ainotify
que tiene que decirle qué monitorear para detectar cambios. Archivos individuales, directorios, etc. No quiero ir a ese nivel de configuración. De hecho (lo hago) pero esencialmente no me importa tanto. Tengopuppet
que manejar esas cosas.auditd
viene con la carga adicional y el tiempo de configuración también. Si una cuenta está modificando algo, todavía me gustaría mirar hacia atrás en el historial y ver quién o qué está iniciando sesión e intentando.PROMPT_COMMAND=
solo ejecuta comandos normales antes del siguiente mensaje, ¿no podría escribir una función que llame a sed / awk que funcione en la última línea del archivo de historial para agregar la información? entonces llame a esa funciónPROMPT_COMMAND=
para agregar los datos? sería hack pero debería hacer el trabajo.Respuestas:
Por sugerencia de llua, podemos trabajar un poco más con la historia. Agregue una línea al archivo BASH RC de todo el sistema, quizás /etc/bash.bashrc.
Configure el registro para "local6" en el registrador del sistema. Tal vez algo como esto:
Reinicie el registrador del sistema. Quizás configure la rotación del archivo de registro. Cerrar sesión; iniciar sesión; y, el historial ahora está escrito en /var/log/commands.log en un formato como este:
fecha hora hostname logger: username [audit_pid]: command [return_val]
Esto podría modificarse aún más al gusto.
fuente
Los siguientes párrafos describen la idea en general y están desactualizados en algunos aspectos, pero puede usarlos y usar los últimos de esta página. Usemos un archivo grande ~ / .bash_history.archive (separado de HISTFILE = ~ / .bash_history). Y luego, al salir de cada sesión bash, agreguemos nuevas líneas de historial.
El primer problema con este enfoque fue: ¿cómo hacer que bash llame a este script en cada salida? Claro, si sale al escribir 'exit', entonces puede usar el alias de la función 'exit', pero utilizo el atajo Ctrl-D para eso y no pude encontrar una forma de reasignarlo a algo pero no a la función de salida incorporada.
Entonces el primer intento fue: prohibir Ctrl-D por
export IGNOREEOF=10
y defina la combinación doble Ctrl-X para llamar a la función de salida.
Pero el enfoque correcto es usar el vagabundo de salida de bash, que es una solución perfecta porque se llama independientemente de la forma en que salga de bash: Ctrl-D, salir, cerrar la ventana xterm.
trap 'archive_history' EXIT
El siguiente paso es definir una línea de inicio en nuestro bash_history para que podamos guardar solo nuevas líneas y asegurarnos de que agreguemos a un archivo de historial.
Eso es todo lo que necesitamos al comienzo de bash: ahora sabemos desde qué línea de historial comienza el historial (nuevo) actual. Para guardar el historial, agregue la siguiente pieza a su ~ / .bashrc.
El archivo ~ / .inputrc debe contener las siguientes líneas para redefinir el acceso directo de salida a Ctrl-x x. En un primer intento, puede sentir que es un atajo terrible, pero luego se acostumbra, créame.
Además, si su sesión bash es una sesión de inicio de sesión y sale llamando al '
logout
', entonces puede agregar la siguiente línea a su~/.bash_logout
Después de realizar todas las acciones mencionadas, puede encontrar su
~/.bash_history.archive
archivo que contiene secciones como estasque en general se puede leer como archivo de historial habitual si lo desea.
fuente