Evitando a alteração do histórico do bash (e ksh) no Linux

3

Pelo que parece, consertar o ksh para tornar impossível a alteração da história é bastante fácil. Eu vi todas as recomendações para tornar as variáveis de ambiente HIST * somente para leitura, e o uso de chattr para tornar o arquivo de histórico somente com acréscimo (com chattr + a .sh_history).

Bash, no entanto, tem duas coisas que parecem impossibilitar a alteração do histórico: o comando history (com histórico -c e history -d) e a separação do arquivo de histórico do histórico de tempo de execução real (mantido em memória). Eu também li aqui no serverfault que se você matar o shell atual, então o histórico não será escrito.

Existe alguma maneira de impedir a alteração do histórico do Bash? Eu quero ser capaz de salvar todos os comandos do usuário sem que o usuário seja capaz de remover qualquer coisa do histórico.

Quaisquer outras dicas sobre o shell Korn também são bem vindas. (Eu sei sobre a auditoria do ksh-93 ... não sei se podemos usá-lo.)

    
por Mei 18.05.2011 / 19:22

2 respostas

4

Aqui está uma solução para enviar todos os comandos executados para um servidor syslog.

link

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!
    
por 18.05.2011 / 19:37
5

Se você quiser registrar o que seus usuários estão fazendo, dê uma olhada em snoopy . Também está disponível como um pacote para instalar no CentOS.

    
por 18.05.2011 / 19:42