O subsistema de "auditoria" do kernel Linux pode fazer o que você precisa.
por exemplo, se você executar estes comandos:
auditctl -a exit,always -F arch=b64 -S execve
auditctl -a exit,always -F arch=b32 -S execve
Em seguida, todo evento de execução é registrado e muitas informações são fornecidas em torno desse
por exemplo, esta é a saída de mim correndo tail /var/log/audit/audit.log
exit=0 a0=7f0e4a21e987 a1=7f0e4a21e6b0 a2=7f0e4a21e808 a3=8 items=2 ppid=906 pid=928 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="tail" exe="/usr/bin/tail" subj=kernel key=(null)
type=EXECVE msg=audit(1543671660.203:64): argc=2 a0="tail" a1="/var/log/audit/audit.log"
type=CWD msg=audit(1543671660.203:64): cwd="/home/sweh"
type=PATH msg=audit(1543671660.203:64): item=0 name="/usr/bin/tail" inode=266003 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PATH msg=audit(1543671660.203:64): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=273793 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1543671660.203:64): proctitle=7461696C002F7661722F6C6F672F61756469742F61756469742E6C6F67
Existem alguns valores interessantes que podem ser vistos; por exemplo, "auid" é 500, que é o meu ID de login, mesmo que "uid" seja zero (porque estou executando abaixo su
). Portanto, mesmo que o usuário tenha trocado de conta su
ou sudo
ainda possamos rastrear seu "ID de auditoria"
Agora esses auditctl
comandos serão perdidos em uma reinicialização. Você pode colocá-los em um arquivo de configuração (por exemplo, no /etc/audit/rules.d/
diretório, no CentOS 7). A localização exata dependerá da versão do seu sistema operacional. A auditctl
página do manual deve ajudar aqui.
Cuidado, porém ... isso fará com que muitas mensagens de log sejam geradas. Verifique se você tem espaço suficiente no disco!
Se necessário, as regras podem ser limitadas a um usuário específico ou a um comando específico.
E também tenha cuidado; se um usuário colocar a senha na execução do comando (por exemplo mysql --user=username --password=passwd
), ela será registrada.
auditd
registrar os argumentos da linha de comando e o programa executado? serverfault.com/questions/765179/…