Como você pode registrar todos os comandos digitados

24

Como você pode registrar todos os comandos que alguém digitou no shell?

Estou perguntando, com base na proteção de si, se você está conectado ao servidor de outra pessoa e algo quebra, ou se outra pessoa está conectada ao seu servidor (intencionalmente ou maliciosamente).

Mesmo um novato pode história de bypass com unset historyou criar um novo shell para esconder seus rastros.

Estou curioso para saber como os administradores sênior do linux rastreiam quais comandos foram inseridos / alterações feitas no sistema.

spuder
fonte

Respostas:

29

Confira auditd . Se você adicionar

-a exit,always -F arch=b64 -S execve
-a exit,always -F arch=b32 -S execve

para /etc/audit/audit.rulestodos os comandos executados serão registrados. Consulte: http://whmcr.com/2011/10/14/auditd-logging-all-commands/

Em seguida, envie-o para um servidor syslog.

Pedra
fonte
Certamente execvenão é o único syscall que você precisa registrar. Por que não execvptambém? Ou execl? etc.
2rs2ts
Na verdade, notei que na página do manual execdiz que "A exec() família de funções substitui a imagem atual do processo por uma nova imagem do processo. As funções descritas nesta página do manual são front-ends para execve(2)". Portanto, embora eu não tenha certeza execveat, posso me sentir seguro sobre a execfamília.
2rs2ts
5

Você pode usar o comando script . Este comando não está incluído no POSIX, mas você achará útil armazenar em um arquivo todas as teclas digitadas, bem como mensagens de saída e erro. Mais tarde, você pode visualizar o arquivo. Se você estiver realizando algum trabalho importante e desejar manter um log de todas as suas atividades, chame este comando imediatamente após efetuar o logon:

$ script
Script iniciado, o arquivo é datilografado
$ _ Observe que este é outro shell - filho do shell de login

O prompt retorna e todas as teclas digitadas (incluindo a usada para retroceder) que você digita aqui são registradas no arquivo 'datilografado'. Após o término da gravação, você pode encerrar a sessão digitando exit .
Nota: Se você digitar o nome do arquivo do script , a sessão será armazenada no nome do arquivo, em vez de texto datilografado , ou seja, texto datilografado é o padrão se nenhum nome de arquivo específico for especificado.

Agora você pode usar o nome do arquivo ou o tipo de gato , conforme o caso, para visualizar a sessão gravada.

Se você deseja anexar uma nova sessão a um arquivo antigo, use: script -a Anexa a nova sessão ao texto datilografado, a mesma regra padrão também se aplica aqui.

Essa é uma maneira pela qual um administrador do sistema pode acompanhar as sessões. Espero que tenha sido informativo e útil. Felicidades!

Marca
fonte