¿Cómo agrego datos de conexión de origen de usuario o de red a las entradas del historial?

¿Cómo agrego datos de conexión de origen de usuario o de red a las entradas del historial?

Me gustaría modificar la configuración del historial de todos los usuarios de los sistemas que administro. Me gustaría que contuviera 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 tratado 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 histappendsoluciona el problema cuando tienes múltiples terminales abiertos y se puede perder información.

PROMPT_COMMAND='history -n;history -a'se extiende para agregar datos en tiempo real al historial en múltiples terminales.

HISTSIZE=100000 HISTFILESIZE=100000 amplía el importe de la historyretención

HISTTIMEFORMAT="%m/%d/%y %T " antecede cada línea de la historia con una marca de tiempo

Lo que normalmente obtienes con history

835  ls
836  cd ..

historyMis resultados actuales modificados

5853  03/26/12 07:16:49  ls
5854  03/26/12 07:16:50  ll

El regreso de historyme 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" con ver el DNSnombre. Solo lo querría allí si lo extrae de whootra 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 existe un ID de usuario que comparten varios usuarios de un mismo grupo para realizar sus tareas diarias. Esto me permitiría correlacionar su ubicación real y usuario real dentro de la organización con lo que hicieron en el historial.

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 hacer curvas cerradas. (Nota: cuando lo hagas los pasajeros intentarán tirarte por la borda)

De todos modos, hasta que pueda migrarlos a una solución mejor, me gustaría tener esta capacidad de seguimiento.

Además, si tienes alguna recomendación sobre lo que estoy usando actualmente para mis historymodificaciones, me encantaría escucharla.

Gracias,

Editar: 1

No quiero ejecutar otros programas ni tener que configurar nada adicional "dentro de lo razonable".

Quiero agregar 0gastos generales, si tengo que agregarlos, deben ser pequeños.

Confío en mis usuarios. Solo me gustaría (en caso de que sucediera algo) ver cuál de los 10 usuarios que iniciaron sesión en el sistema con el mismo usuario: contraseña lo hizo. O puede que no haya sido un usuario, podría haber sido olvidado cronen un sistema que realiza una conexión como usuario para hacer algo. O una aplicación Ej: BMC Control-Mque se conecta sshy ejecuta tareas. No se trata tanto de encontrar "malos usuarios" sino de poder localizarlos con un mínimo de esfuerzo.

Edición 2:

Los sistemas ejecutan SLES y RHEL.

Respuesta1

A partir de la 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.

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Configure el registro para "local6" en el registrador de su sistema. Quizás algo como esto:

local6.*    /var/log/commands.log

Reinicie el registrador del sistema. Quizás configure la rotación del archivo de registro. Cerrar sesión; acceso; y el historial ahora se escribe en /var/log/commands.log en un formato como este:

fecha hora nombre de host registrador: nombre de usuario [audit_pid]: comando [return_val]

Esto podría modificarse aún más al gusto.

Respuesta2

Los siguientes párrafos describen la idea en general y están desactualizados en algunos aspectos, pero puede usar la última versión deestepágina. Usemos un archivo grande ~/.bash_history.archive (separado de HISTFILE=~/.bash_history). Y luego, al salir de cada sesión de 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 sales escribiendo 'salir', entonces puedes usar un alias de la función 'salir', pero uso el atajo Ctrl-D para eso y no pude encontrar una manera de reasignarlo a algo que no sea la función de salida incorporada.

Entonces el primer intento fue: prohibir Ctrl-D mediante

export IGNOREEOF=10

y defina una combinación doble Ctrl-X para llamar a la función de salida.

Pero el enfoque correcto es usar exit tramp de bash, que es una solución perfecta porque se llama independientemente de la forma en que salga de bash: Ctrl-D, salir, cerrar 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 líneas nuevas y asegurarnos de agregarlas a un archivo de historial.

export CURBASHSTART=`grep -v "^[ \t]*$" $HISTFILE | wc -l | awk '{print $1}'` CURBASHDATE=`date`

shopt -s cmdhist histappend

Eso es todo lo que necesitamos al inicio del bash: ahora sabemos desde qué línea del historial comienza el historial actual (nuevo). Para guardar el historial, agregue la siguiente pieza a su ~/.bashrc.

archive_history()
{
    HISTORYOLD=${HISTFILE}.archive
    CURTIME=`date`
    CURTTY=`tty`
    if  [ x$HISTDUMPPED = x ]; then
      echo "#-${HOSTNAME}-- ${CURBASHDATE} - ${CURTIME} ($CURTTY) ----" >>   $HISTORYOLD

      history $(($HISTCMD-${CURBASHSTART-0})) | sed -e 's/^[ ]*[0-9][0-9]* [ ]*//g'  >> $HISTORYOLD
      export HISTDUMPPED=1
    fi
}

exit ()
{
   archive_history
   builtin exit

}

El archivo ~/.inputrc debe contener las siguientes líneas para redefinir el acceso directo de salida a Ctrl-x x. En un primer intento puedes sentir que es un atajo terrible, pero luego te acostumbras, créeme.

$if Bash
# to exit through calling exit function which will archive the history
"\C-x\C-x": "exit\n"
# to dump history we have so far
"\C-x\C-w": "archive_history\n"

$endif

Además, si su sesión de bash es una sesión de inicio de sesión y sale llamando a " logout", entonces puede agregar la siguiente línea a su~/.bash_logout

archive_history

Una vez realizadas todas las acciones mencionadas, podrá encontrar su ~/.bash_history.archivearchivo que contiene secciones como estas

#-belka-- Sun Oct 12 21:52:13 EDT 2003 - Sun Oct 12 21:53:25 EDT 2003 (/dev/pts/13) ----
exit
aptitude
exit
#-washoe-- Sun Oct 12 18:03:16 EDT 2003 - Sun Oct 12 23:06:48 EDT 2003 (/dev/pts/3) ----

exit
cd progr/letters/resume/
e resume.tex

que en general se puede leer como un archivo histórico habitual si lo desea.

información relacionada