Como adiciono dados de conexão de rede ou de origem do usuário às entradas do histórico?

Como adiciono dados de conexão de rede ou de origem do usuário às entradas do histórico?

Gostaria de modificar as configurações de histórico de todos os usuários nos sistemas que gerencio. Eu gostaria que contivesse as informações do terminal de conexão, como dewho

sysadmin:/ # who
sysadmin  pts/0        Mar 26 07:11 (sysadmin.doofus.local)

Atualmente modifico meu histórico das seguintes maneiras. Eu sei que muitas dessas configurações foram abordadas aqui diversas vezes. No entanto, retirei este código de "Receitas de administração de sistema Linux por: Juliet Kemp" muito tempo atras.

shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T  "

shopt -s histappendcorrige o problema quando você tem vários terminais abertos, as informações podem ser perdidas.

PROMPT_COMMAND='history -n;history -a'se estende para fornecer anexação em tempo real ao histórico em vários terminais.

HISTSIZE=100000 HISTFILESIZE=100000 estende a quantidade de historyretenção

HISTTIMEFORMAT="%m/%d/%y %T "prefacia cada linha do histórico com um carimbo de data/hora

O que você normalmente consegue history

835  ls
836  cd ..

historyMeus resultados atuais modificados

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

O retorno de historyeu gostaria de 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

Não sou "casado" com ver o DNSnome. Eu só iria querer que ele estivesse lá se fosse extraído de whoou de outro local, sem a necessidade de realizar uma pesquisa ou consulta de qualquer tipo. Eu ficaria feliz com o endereço IP.

002  03/26/12 05:11:30  192.168.0.2    ll

Por que? Gerencio vários sistemas onde um userid que vários usuários do mesmo grupo compartilham para realizar suas tarefas diárias. Isso me permitiria correlacionar sua localização real e usuário real dentro da organização com o que eles fizeram no histórico.

Estou ciente de que isso não é o ideal e gostaria de alterá-lo, mas, quando você está em um navio do tamanho de um navio de cruzeiro, você não tenta fazer curvas fechadas. (Nota: quando você faz isso, os passageiros tentam jogá-lo ao mar)

De qualquer forma, até conseguir migrá-los para uma solução melhor, gostaria de ter essa capacidade de rastreamento.

Além disso, se você tiver alguma recomendação sobre o que estou usando atualmente para minhas historymodificações, adoraria ouvi-la.

Obrigado,

Editar: 1

Não quero executar outros programas nem precisar configurar nada adicional "dentro do razoável".

Quero adicionar 0sobrecarga, se precisar adicioná-la, ela precisa ser pequena.

Eu confio em meus usuários, eu apenas gostaria (caso algo acontecesse) de ver quais dos 10 usuários que se conectaram ao sistema com o mesmo usuário: senha fizeram isso. Ou pode não ter sido um usuário, pode ter sido esquecido cronem um sistema que realiza uma conexão como usuário para fazer algo. Ou um aplicativo Ex: BMC Control-Mque se conecta sshe executa tarefas. Não se trata tanto de encontrar “maus usuários”, mas de ser capaz de localizá-los com um mínimo de esforço.

Editar 2:

Os sistemas estão executando SLES e RHEL

Responder1

A partir da sugestão de llua podemos trabalhar um pouco mais com a história. Anexe uma linha ao arquivo BASH RC de todo o sistema, talvez /etc/bash.bashrc.

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

Configure o registro para "local6" no registrador do sistema. Talvez algo assim:

local6.*    /var/log/commands.log

Reinicie o criador de logs do sistema. Talvez configure a rotação do arquivo de log. Sair; Conecte-se; e o histórico agora é gravado em /var/log/commands.log em um formato como este:

data e hora nome do host registrador: nome de usuário [audit_pid]: comando [return_val]

Isso poderia ser ajustado ainda mais a gosto.

Responder2

Os parágrafos seguintes descrevem a ideia em geral e estão desatualizados em alguns aspectos, mas você pode usar o mais recente deessepágina. Vamos usar um arquivo grande ~/.bash_history.archive (separado de HISTFILE=~/.bash_history). E então, ao sair de cada sessão do bash, vamos acrescentar novas linhas de histórico a ela.

O primeiro problema com essa abordagem foi: como fazer o bash chamar esse script em cada saída? Claro, se você sair digitando 'exit', poderá usar o alias da função 'exit', mas eu uso o atalho Ctrl-D para isso e não consegui encontrar uma maneira de reatribuí-lo a algo, mas não à função de saída integrada.

Então a primeira tentativa foi: proibir Ctrl-D por

export IGNOREEOF=10

e defina a combinação dupla Ctrl-X para chamar a função de saída.

Mas a abordagem correta é usar exit tramp do bash, que é uma solução perfeita porque ele é chamado independentemente da maneira como você sai do bash: Ctrl-D, exit, close xterm window.

trap 'archive_history' EXIT

A próxima etapa é definir uma linha inicial em nosso bash_history para que possamos salvar apenas novas linhas e garantir que anexamos a um arquivo de histórico.

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

shopt -s cmdhist histappend

Isso é tudo que precisamos no início do bash - agora sabemos em qual linha do histórico o histórico atual (fresco) começa. Para salvar o histórico, adicione a próxima peça ao seu ~/.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

}

O arquivo ~/.inputrc deve conter as próximas linhas para redefinir o atalho de saída para Ctrl-x x. Na primeira tentativa você pode achar que é um atalho terrível, mas depois você se acostuma - acredite.

$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

Além disso, se a sua sessão bash for uma sessão de login e você sair chamando ' logout', então você pode adicionar a próxima linha ao seu~/.bash_logout

archive_history

Depois que todas as ações mencionadas forem concluídas, você poderá encontrar seu ~/.bash_history.archivearquivo contendo seções 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 em geral pode ser lido como um arquivo de histórico normal, se desejar.

informação relacionada