bash history log todos os comandos para syslog

1

Estou tentando registrar todos os comandos executados por todos os usuários. Eu tenho uma solução do Github

 function log2syslog
 {
     declare COMMAND
     COMMAND=$(fc -ln -0)
     logger -p local1.notice -t bash -i -- "${USER}:${COMMAND}"
 }
 trap log2syslog DEBUG

 PROMPT_COMMAND='history -a >(tee -a ~/.bash_history | logger -t "$USER[$$] $SSH_CONNECTION")'

mas se apenas pressionarmos várias vezes, o log afirma que realmente executamos o comando várias vezes também. Como posso evitar isso?

    
por Vishnu V 08.06.2018 / 05:48

2 respostas

2

Não é necessário usar fc se você precisar apenas da linha de comando atual, pois a variável BASH_COMMAND da shell contém exatamente isso. Eu apenas interceptaria o sinal DEBUG e usaria essa variável como antes , por exemplo:

trap 'echo "$USER":"$BASH_COMMAND" >>/path/to/log' DEBUG

Isso também tem a vantagem de não escrever nada no log se você simplesmente pressionar Enter - fc apenas lerá a última entrada da lista do histórico. Infelizmente eu não pude testar seu comando logger no meu sistema, mas parece que funcionou bem, então isso deve funcionar também:

trap 'logger -p local1.notice -t bash -i -- "$USER":"$BASH_COMMAND"' DEBUG

Exemplo de execução

Observe como alias es como ls , linhas vazias ( Enter ) e os comandos typo'd são registrados.

$ trap 'echo "$USER":"$BASH_COMMAND" >>/path/to/log' DEBUG
$ uname
Linux
$ pwd
/home/dessert
$ hostname
dessert’s plowhorse
$ ls
dir1 file1 file2
$ 
$ 
$ bahs
No command 'bahs' found, did you mean:
 Command 'bash' from package 'bash' (main)
 Command 'bats' from package 'bats' (universe)
bahs: command not found
$ cat /path/to/log
dessert:uname
dessert:pwd
dessert:hostname
dessert:ls --color=auto
dessert:bahs
dessert:cat /path/to/log
    
por dessert 08.06.2018 / 17:51
1

Eu tenho um problema muito parecido. Como não quero criar duplicatas para o mesmo problema, também postarei as minhas aqui.

Eu usei a sintaxe do logger de trap da sobremesa, mas estou encontrando uma mensagem de acompanhamento muito estranha em meu arquivo / var / log / messages

Eu adicionei esta linha no final do meu / etc / profile:

trap 'logger -p local1.notice -t bash -i -- "${USER}":"$BASH_COMMAND"' DEBUG

Quando eu assino / var / log / messages em uma janela de terminal separada, ele mostra o comando que eu executei no primeiro terminal e adiciona uma segunda linha que se parece com isso:

Jun 13 11:42:34 vm-centos bash[1521]: root:nano /etc/profile
Jun 13 11:43:14 vm-centos bash[1524]: root:printf "3]0;%s@%s:%s
trap 'logger -p local1.notice -t bash -i -- "${USER}":"$BASH_COMMAND"' DEBUG
7" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

Eu acho que a segunda linha quer me dizer que há algum tipo de erro, mas não consigo ver nenhum erro. Você tem uma ideia, como eu poderia me livrar da segunda linha com o printf?

Agradeço antecipadamente

    
por C.Felix 13.06.2018 / 13:51