Não é assim que você aborda o problema. Depois de conceder acesso ao shell a um usuário, você está confiando a ele que faça tudo o que ele / ela tiver 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 email (o único comando registrado é pine
, por exemplo); nele, ele seleciona "Compor", que inicia o VI e, a partir do VI, ele lança qualquer comando que desejar :!cmd
. Este comando não é registrado 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 deseja é chamado de auditoria . Ative o subsistema de auditoria e use o auditctl
comando e o auditd
daemon do pacote de auditoria para controlar o que está registrado. Mais informações estão na página do manual auditctl (8) .
Observe que o registro de todas as instâncias do processo também pode não ser o ideal. Por exemplo, o simples ./configure
para um pacote de software (criado usando ferramentas automáticas) é notável por criar milhares de instanciações de processo. Isso inundará o registro de auditoria com tanto ruído que se torna muito difícil analisá-lo mais tarde.