Como registrar todos os comandos Bash por todos os usuários em um servidor?

19

Nossa pequena empresa executa um servidor Ubuntu 11.10, para o qual algumas pessoas têm acesso SSH. Os terminais reais são usados às vezes também. Como podemos registrar localmente todos os comandos do Bash, juntamente com o registro de data e hora do usuário?

Podemos supor que ninguém é perverso e ativamente tentando evitar o registro em log, mas ainda preferimos que os usuários não tenham acesso de gravação direta a seus arquivos de log. Sessões simultâneas devem ser tratadas corretamente.

    
por Tin 07.01.2012 / 16:19

7 respostas

28

Para shells BASH, edite o arquivo de configuração de tempo de execução BASH do sistema:

sudo -e /etc/bash.bashrc

Anexar ao final desse arquivo:

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

Configure o registro para "local6" com um novo arquivo:

sudo -e /etc/rsyslog.d/bash.conf

E o conteúdo ...

local6.*    /var/log/commands.log

Reinicie o rsyslog:

sudo service rsyslog restart

Faça logout. Faça o login. Voila!

Mas eu esqueci a rotação de log:

sudo -e /etc/logrotate.d/rsyslog

Existe uma lista de arquivos de log para girar da mesma maneira ...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Portanto, adicione o novo arquivo de log do bash-commands nessa lista:

/var/log/commands.log

Salvar.

    
por user8290 07.01.2012 / 16:45
4

Um sistema de contabilidade de processo pode ser útil a esse respeito, particularmente o pacote acct que fornece os comandos lastcomm e ac.

Os comandos ac imprimem estatísticas sobre o tempo de conexão dos usuários, em horas. Esta é a quantidade de tempo que o usuário foi conectado ao sistema, seja remotamente via SSH ou um terminal serial, ou enquanto estiver no console.

O comando lastcomm exibe informações sobre os comandos executados anteriormente. As entradas mais recentes são dadas no topo da lista. Também é exibida a quantidade total de tempo de CPU que cada processo utilizou.

Um tutorial antigo que pode ser útil está aqui:

link

Outros comandos de contabilidade, como last e assim on, podem ser encontrados neste tutorial:

link

    
por Sabacon 07.01.2012 / 18:17
3

Você pode encontrar aqui um script para registrar todos bash comandos / built-ins em um arquivo de texto ou em um servidor syslog sem usar um patch ou uma ferramenta executável especial.

Muito fácil de implantar, pois é um script de shell simples que precisa ser chamado uma vez na inicialização do bash .

É gratuito e espero que seja adequado às suas necessidades.

    
por Francois Scheurer 13.09.2012 / 13:35
2

Você pode usar snoopy .

O registrador Snoopy pode se adequar bem ao seu propósito. Não se destina a ser solução de registro inevitável, mas sim uma ferramenta útil para administradores diligentes que preferem acompanhar suas próprias ações.

Divulgação: sou mantenedor do snoopy.

    
por Bostjan Skufca 06.11.2014 / 00:15
0

Para cuidar de várias sessões que não sobrescrevem o arquivo de histórico, você terá que colocar "shopt -s histappend" em um arquivo de inicialização do Bash. Veja também esta questão sobre o mesmo problema.

    
por pdp 05.03.2014 / 16:28
0

tente isso (as soluções acima não funcionarão 100% com o bash 4.3):

export HISTTIMEFORMAT="%Y-%m-%d %T "
export PROMPT_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'

isso faz o registro E evita o registro de registros de data e hora que são usados para o arquivo de histórico do bash. o trap é necessário, já que o bash enviará os sinais para o "subjob" depois de pressionar strg + c várias vezes (testado com o bash 4.3). isso forçará o logout do usuário atual (por exemplo, logado com o sudo)

    
por Hans-Joachim Kliemeck 12.10.2014 / 23:26
0

Você também pode tentar instalar o acct. A Acct mantém uma trilha de auditoria detalhada do que está sendo feito em seus sistemas Linux.

sudo apt-get install acct
    
por user571354 08.08.2016 / 02:01

Tags