Os arquivos do histórico da shell são uma maneira ruim de auditar comandos. Eles podem ser modificados ou ignorados por usuários. Eles são úteis somente se você confiar nos usuários para não ignorar deliberadamente ou acidentalmente o mecanismo de auditoria. Por exemplo, comandos iniciados a partir de uma GUI, de um editor, etc. não são gravados dessa maneira. Há muitas outras maneiras de um usuário iniciar comandos não registrados e até mesmo manter a negação plausível de que eles estavam fazendo isso por conveniência ou sem perceber e não como uma tentativa deliberada de ignorar uma medida de segurança.
Se você fizer os arquivos de histórico apenas com acréscimo (o que requer a execução de chattr +a
como root no arquivo de histórico), tudo que foi gravado permanecerá gravado, mas ainda assim é fácil ignorar a gravação.
Em vez de manter arquivos de histórico separados, você poderia mantém um único arquivo de histórico e faz o backup regularmente. Isso manterá a data em que os comandos foram executados, mas não o terminal.
Se você precisa ter alguma confiança de que os logs correspondem aos comandos que foram executados, os arquivos do histórico do shell são a ferramenta errada. Use o daemon de auditoria. Configure-o para registrar todas as chamadas execve
.
auditctl -A exit,always -S execve
Veja as seguintes perguntas para mais informações: