Como faço para registrar todos os comandos do shell UNIX enviados por todos os usuários?

8

Existe uma maneira elegante de registrar todos os comandos enviados em todos os shells em uma máquina? Isso ocorre no contexto de um servidor Ubuntu pouco usado, do qual sou o único usuário humano. (Existem várias contas de usuário usadas por sistemas automatizados.)

Eu gostaria que isso fosse discreto e de baixo custo, então eu adoraria se houvesse um método simples que envolvesse algo assim script.

jl6
fonte

Respostas:

9

Desde o início dos tempos (na verdade, desde o tempo em que as pessoas precisavam pagar dinheiro real por ciclo de computador que usavam), o Unix e seus clones tinham um sistema chamado Process Accounting ( acct) incorporado. Isso permitiu que os administradores de sistema soubessem exatamente o que seus usuários estavam fazendo e, portanto, poderiam cobrá-los adequadamente.

As acctinstalações ainda existem na maioria dos sistemas Unix e Linux até hoje.

Este site: http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html informa como ativá-lo.

Majenko
fonte
Isso também pode ser usado para registrar qual usuário executa sudo e su, e qual dos comandos root depois?
Daniel Beck
Eu acredito que ele registra cada comando executado, codificado por usuário, tty, etc. Você pode combinar os comandos em um tty com o usuário que efetuou login nesse tty para rastrear os usuários que eles usaram ou usaram.
Majenko 8/03
Obrigado, eu desconhecia totalmente esse recurso. Uma leitura rápida das páginas de manual sugere que o log continua até que uma condição de pouco espaço em disco seja atingida - portanto, talvez seja necessário um script de rotação de log.
jl6
Eu pensei que a contabilidade do processo apenas registrou qual programa foi executado, não o comando com todos os seus argumentos?
Sirex
2

Aqui está uma maneira muito agradável e rápida de registrar todos os comandos do shell :

Passo 1:

Use seu editor de texto favorito para abrir o / etc / bashrc e acrescentar a seguinte linha no final:

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

Passo 2:

Defina o syslogger para interceptar local6 em um arquivo de log adicionando esta linha no arquivo /etc/syslog.conf:

local6.*                /var/log/cmdlog.log

[Veja a publicação completa do blog aqui]

cry_wolf
fonte
Eu aviso que o usuário seria capaz de desabilitar isso, redefinindo a variável e, como é executada "antes da emissão de cada prompt primário", esse fato não seria registrado.
dmckee --- ex-moderador gatinho
2

Você poderia usar snoopy .

É muito simples de instalar e remover (nenhum módulo do kernel ou patch necessário). Observe que essa não é uma solução de auditoria adequada e pode ser facilmente contornada.

Divulgação: Eu sou atual mantenedor do Snoopy.

Bostjan Skufca
fonte
Bostjan Skufca também forneceu instruções adicionais para instalar o snoopy no Ubuntu aqui e também em um comentário adicional no mesmo tópico aqui .
Karel
+1 para snoopy; ele fornece um registro bom de comando e argumentos em /var/log/auth.log
David Goodwin