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

8

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

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

Atualmente modifico meu histórico das seguintes formas. Eu sei que muitas dessas configurações foram abordadas aqui várias vezes. No entanto, eu peguei esse código de " Linux System Administration Recipes por: Juliet Kemp " há muito tempo.

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

shopt -s histappend corrige o problema quando você tem vários terminais. Informações abertas podem ser perdidas.

PROMPT_COMMAND='history -n;history -a' se estende para adicionar em tempo real o histórico em vários terminais.

HISTSIZE=100000 %código% estende a quantidade de HISTFILESIZE=100000 de retenção

history "prefacia cada linha do histórico com um registro de data e hora

O que você normalmente obtém com HISTTIMEFORMAT="%m/%d/%y %T

835  ls
836  cd ..

Meus resultados atuais modificados de history

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

O retorno de history 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

Eu não sou "casado" para ver o nome history . Eu só iria querer lá se ele puxasse de DNS ou 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 quê? Eu gerencio vários sistemas onde um userid que vários usuários do mesmo grupo compartilham para fazer suas tarefas diárias. Isso me permitiria correlacionar sua localização real & usuário real dentro da organização para o que eles fizeram na história.

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

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

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

Obrigado,

Editar: 1

Eu não quero executar outros programas ou ter que configurar algo adicional "dentro da razão".

Eu quero adicionar history sobrecarga, se eu tiver que adicioná-lo precisa ser pequeno.

Eu confio em meus usuários Eu apenas gostaria que (caso algo acontecesse) para ver qual dos 10 usuários que logaram no sistema com o mesmo usuário: senha fez isso. Ou, pode não ter sido um usuário, poderia ter sido um 0 esquecido em um sistema que executa uma conexão como usuário para fazer alguma coisa. Ou um aplicativo Ex: cron que se conecta com BMC Control-M e executa tarefas. Não se trata tanto de encontrar "usuários ruins" como ser capaz de rastreá-lo com um mínimo de esforço.

Editar 2:

Os sistemas estão executando o SLES e o RHEL

    
por 2bc 27.03.2012 / 16:40

2 respostas

1

A partir da sugestão do llua, podemos trabalhar um pouco mais com a história. Anexe uma linha ao arquivo BASH RC em 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 seu criador de logs do sistema. Talvez algo assim:

local6.*    /var/log/commands.log

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

date time logger hostname: nome de usuário [audit_pid]: comando [return_val]

Isso pode ser melhorado ainda mais a gosto.

    
por 21.01.2013 / 03:32
1

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

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

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

export IGNOREEOF=10

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

Mas a abordagem correta é usar o tramp de saída do bash, que é uma solução perfeita porque é chamado independentemente da forma como você sai do bash: Ctrl-D, sair, fechar a janela do xterm.

trap 'archive_history' EXIT

O próximo passo é definir uma linha de partida em nosso bash_history para que possamos salvar apenas novas linhas e nos certificar de 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 o que precisamos no início do bash - agora sabemos de qual linha da história a história atual (nova) 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. Numa primeira tentativa você pode achar que é um atalho terrível, mas depois se acostuma com isso - acredite em mim.

$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 sessão do bash for uma sessão de login e você sair chamando ' logout ', adicione a próxima linha ao seu ~/.bash_logout

archive_history

Depois que todas as ações mencionadas forem concluídas, você poderá encontrar o arquivo ~/.bash_history.archive 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 arquivo de histórico normal, se desejar.

    
por 20.02.2013 / 05:04