Aqui está uma solução para enviar todos os comandos executados para um servidor syslog.
Extrair da postagem do blog
Aqui estão dois métodos para enviar uma cópia de todos os comandos executados pelos usuários para um servidor Syslog. O primeiro usará o recurso "armadilha" do Bash. O segundo é um patch para aplicar no código-fonte do Bash.
Usando uma armadilha
Basta adicionar as seguintes linhas no seu / etc / profile:
function log2syslog
{
declare command
command=$(fc -ln -0)
logger -p local1.notice -t bash -i — $USER : $command
}
trap log2syslog DEBUG
/etc/profile
é analisado e executado quando o Bash é iniciado. O objetivo é usar o recurso de interceptação e chamar uma função toda vez que o usuário gerar atividade. A função trap (log2syslog) extrairá o último comando do histórico e o registrará no Syslog usando o comando logger. Muito fácil de implementar, mas este método:
spawns new process at each command logged (can have a negative effect when the server activity is high)
is not transparent to the user (regular users can’t edit /etc/profile but can read it!)
É por isso que o segundo método será preferido. Usando um patch
O método é aplicar um patch na árvore de fontes do Bash e recompilar o shell. Requer um ambiente com um compilador e o código-fonte, mas este método usará menos CPU e será completamente transparente!
Um exemplo de patch está disponível aqui . Leva cinco minutos para aplicar manualmente o patch à árvore de fontes do Bash 4.
Aqui está um exemplo de mensagem do Syslog:
Feb 27 19:30:51 honey bash: HISTORY: PID=21099 UID=1000 echo foo!