Подсистема «аудита» ядра Linux может делать то, что вам нужно.
например, если вы запускаете эти команды:
auditctl -a exit,always -F arch=b64 -S execve
auditctl -a exit,always -F arch=b32 -S execve
Затем регистрируется каждое событие выполнения, и вокруг него предоставляется много информации.
например, это результат моего бега 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
Есть некоторые интересные ценности, которые можно увидеть; например, «auid» равен 500, что является моим идентификатором входа в систему, хотя «uid» равно нулю (потому что я работаю под su
). Таким образом, даже если пользователь поменял учетную запись, su
или sudo
мы все равно можем вернуться к его «идентификатору аудита»
Теперь эти auditctl
команды будут потеряны при перезагрузке. Вы можете поместить их в файл конфигурации (например, в /etc/audit/rules.d/
каталог на CentOS 7). Точное местоположение будет зависеть от вашей версии ОС. Страница auditctl
руководства должна помочь здесь.
Однако будьте осторожны ... это приведет к генерации большого количества сообщений журнала. Убедитесь, что у вас достаточно места на диске!
При необходимости правила могут быть ограничены конкретным пользователем или конкретной командой.
А также будьте осторожны; если пользователь вводит пароль при выполнении команды (например mysql --user=username --password=passwd
), то это будет зарегистрировано.
auditd
записать аргументы командной строки, а также запустить программу? serverfault.com/questions/765179/…