Como ver todos os comandos executados pelo usuário atual, em todos os terminais sessions / screen / byobu?

3

Se houver debian box, alguns usuários têm acesso à conta root, alguns desses usuários abrem uma conexão ssh e começam a executar comandos, alguma tela aberta ou byobu ou outras ferramentas similares para executar comandos.

O comando "history" não parece ter uma lista completa de comandos executados.

Qual é a melhor maneira de obter todos os comandos executados?

    
por sharp12345 29.08.2013 / 20:12

2 respostas

4

Isso é meio que um truque, mas pelo menos funciona. Requer que você tenha root nesse servidor:

Olhando para a saída de ps aux , vejo o fork de um usuário de sshd , como por exemplo, neste caso, o usuário mst :

$ ps aux | grep ssh
mst      19325  0.0  0.0  76268  1920 ?        S    21:20   0:00 sshd: mst@pts/6

Por isso, verifico os descritores de arquivo deste processo da seguinte forma:

$ sudo ls -lha /proc/19325/fd
total 0
dr-x------ 2 root root   0 Aug 30 21:26 .
dr-xr-xr-x 7 mst  users  0 Aug 30 21:25 ..
lrwx------ 1 root root  64 Aug 30 21:26 0 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 1 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 11 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 12 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 2 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 3 -> socket:[138972]
lrwx------ 1 root root  64 Aug 30 21:26 4 -> socket:[138198]
lrwx------ 1 root root  64 Aug 30 21:26 5 -> socket:[138200]
lrwx------ 1 root root  64 Aug 30 21:26 6 -> socket:[138207]
lr-x------ 1 root root  64 Aug 30 21:26 7 -> pipe:[138212]
l-wx------ 1 root root  64 Aug 30 21:26 8 -> pipe:[138212]
lrwx------ 1 root root  64 Aug 30 21:26 9 -> /dev/ptmx

Três desses links apontam para /dev/ptmx , estes são stdin , stdout e stderr . Como o shell do usuário está imprimindo todos os comandos que ele insere, e também a saída desses comandos, vejo seu stdout usando strace e filtrando por read chamadas do sistema no número fd 11 (porque 11 é o segundo link para /dev/ptmx ).

sudo strace -e read -s 256 -p 19325 2>&1 | grep 'read(11'

E eu posso ver que o usuário digita um comando ls :

read(11, "l", 16384)                    = 1
read(11, "s", 16384)                    = 1

Ok, a saída não é bonita ... mas funciona

    
por 30.08.2013 / 15:32
3

A melhor maneira é usar o auditd. Você pode configurá-lo para registrar todos os comandos emitidos por um determinado usuário, ou todos os comandos emitidos por todos os usuários, ou qualquer chamada de um comando específico, etc.

A página man do auditctl lhe dará alguns exemplos de regras que você pode desejar. Além disso, se você não confiar nos outros usuários raiz, aconselho que você faça o login em um servidor separado ao qual os outros não tenham acesso.

Eu também sugiro que é melhor não dar a senha de root e não permitir logins de ssh como root. Em vez disso, permita somente logins para as próprias contas do usuário e deixe que eles usem sudo su para se tornarem raiz. Isso também possibilitará que o auditd rastreie qual usuário fez o quê.

    
por 02.01.2014 / 09:02