O subsistema de "auditoria" do kernel do 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, cada evento de execução é registrado e um lote de informações é fornecido em torno desse
por exemplo. esta é a saída de mim executando 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 é meu ID de login, mesmo que "uid" seja zero (porque estou executando em su
). Assim, mesmo que o usuário possa ter alternado as contas com su
ou sudo
, ainda poderemos rastrear seu "ID de auditoria"
Agora, os comandos auditctl
serão perdidos em uma reinicialização. Você pode colocá-los em um arquivo de configuração (por exemplo, no diretório /etc/audit/rules.d/
, no CentOS 7). A localização exata dependerá da sua versão do sistema operacional. A página de manual auditctl
deve ajudar aqui.
Cuidado, porém ... isso fará com que um lote de mensagens de log seja gerado. Certifique-se de ter 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 cuidado; Se um usuário colocar a senha na execução do comando (por exemplo, mysql --user=username --password=passwd
), isso será registrado.