Não é assim que você aborda o problema. Uma vez que você concede acesso ao shell a um usuário, você está confiando que o usuário faça qualquer coisa para a qual ele / ela tenha as permissões apropriadas. Esqueça o log de comandos, existem muitas maneiras de executar um comando em qualquer sistema Unix.
Por exemplo, o usuário pode iniciar um cliente de e-mail (o único comando logado é pine
, por exemplo), lá ele seleciona "Compor", que inicia o VI, e do VI ele lança qualquer comando que desejar através de :!cmd
. Este comando não está logado em nenhum lugar, e do ponto de vista do sistema, é como qualquer aplicativo auxiliar chamado pelo VI, como grep ou sort. O único comando registrado pelo shell foi pine
.
Parece que o que você realmente quer é chamado de auditoria . Ative o subsistema de auditoria e use o comando auditctl
e o daemon auditd
do pacote auditoria para controlar o que é logado. Mais informações estão na página de manual auditctl (8) .
Observe que o registro de cada instanciação do processo também pode não ser o ideal. Por exemplo, o simples ./configure
para um pacote de software (criado usando o autotools) é notável por criar milhares de instanciações de processo. Isso inundará o log de auditoria com tanto ruído que será muito difícil analisá-lo mais tarde.