Captura dos comandos shell do Linux para arquivar

2

Estou tentando capturar todo o comando do shell do Linux para algum arquivo. Eu tentei usar o serviço auditd, mas ele não está me dando a saída que eu quero.

Pesquisei um pouco e encontrei uma solução legal .

Etapa 1: vi / etc / bashrc e anexe a seguinte linha no final:

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

Etapa 2:

Defina o syslogger para interceptar o local6 em um arquivo de registro, adicionando esta linha no arquivo /etc/rsyslog.conf:

local6.*                /var/log/cmdlog.log

A saída é:

Jan 10 11:05:20 itdev-server eddiem: root [7310]: vim /etc/rsyslog.conf [0]

Esta é uma solução muito boa e se encaixa no que eu preciso, mas tenho alguns problemas que não posso corrigir.

1) Como ignorar o botão "Enter", toda vez que eu pressionar o botão Enter, ele registra o último comando.

2) Quando você faz ssh em outro servidor, ele não grava o comando ssh até você desconectar a sessão, mas o mais importante é que ele não captura os comandos que foram executados no host remoto.

Se alguém tiver alguma solução ou solução alternativa, será ótimo!

Agradecemos antecipadamente.

EddieM

    
por EddieM 10.01.2016 / 10:26

1 resposta

2

O comando script pode ser útil para você. Ele captura tudo em uma sessão e grava em um arquivo ( typescript por padrão).

$ script
Script started, file is typescript
$ date
10 Jan 2016 12:45:59
$ id
uid=1000(roaima) gid=50(staff)...
$ exit
exit
Script done, file is typescript


$ sed 's/^/|   /' typescript    # cat typescript, with "|" on front of each line
|   Script started on 10 Jan 2016 12:45:56
|   $ date
|   10 Jan 2016 12:45:59
|   $ id
|   uid=1000(roaima) gid=50(staff)...
|   $ exit
|   exit
|
|   Script done on 10 Jan 2016 12:46:03
    
por 10.01.2016 / 13:51