Egy*_*yas 5 console logging tty
目前,我们使用 Snoopy 来监控用户在一些外部可访问的服务器上发出的所有命令。我们正在将所有内容更新到 RHEL8 以确保可支持性和合规性,并发现我心爱的史努比不再维护。所以它不会通过合规性审核,需要更换。
我通过在 system-auth 和 password-auth 中启用“pam_tty_audit.so”来研究使用 auditd 来做到这一点。这确实奏效了,但输出是,好吧,让我们说它不太理想。更不用说基本上不可读了。
我尝试通过添加这个来设置 /etc/profile 来记录...
function log2syslog
{
declare COMMAND
COMMAND=$(fc -ln -0)
logger -p local1.notice -t bash -i -- "${USER}:${COMMAND}"
}
trap log2syslog DEBUG
Run Code Online (Sandbox Code Playgroud)
并将其添加到 /etc/rsyslog.conf
local1.* -/var/log/cmdline
Run Code Online (Sandbox Code Playgroud)
它很好用!但该解决方案被拒绝,因为它可以被用户覆盖。
我什至尝试使用 rootsh 作为用户的 shell 并记录下来。记录良好,但上面没有时间/日期戳。所以不能接受。
所以回到手头的问题。我需要替换 Snoopy,它以带有时间戳的可读格式记录执行的每个命令,用户无法覆盖。
有什么想法吗?
审计系统完全能够记录所有用户的命令pam_tty_audit
,而无需记录终端击键。您应该设置审核来执行此操作,而不是pam_tty_audit
. 默认情况下,RHEL 8 上已启用审核并记录许多系统事件。
要配置审核以记录所有用户命令,请编辑文件/etc/audit/rules.d/audit.rules
. 首先,由于您需要系统调用审核,因此注释掉现有行:
## This suppresses syscall auditing for all tasks started
## with this rule in effect. Remove it if you need syscall
## auditing.
# -a task,never
Run Code Online (Sandbox Code Playgroud)
现在添加用于审核 64 位和 32 位命令:
-a exit,always -F arch=b64 -S execve -k auditcmd
-a exit,always -F arch=b32 -S execve -k auditcmd
Run Code Online (Sandbox Code Playgroud)
请注意,此处auditcmd
是一个键,您可以使用它来搜索审核日志ausearch
。您可以将其更改为您喜欢的任何内容。
杀死并重新启动auditd。注意需要root手动杀死;systemd 单元不会让您停止或重新启动它。
# killall auditd; systemctl start auditd
Run Code Online (Sandbox Code Playgroud)
现在运行一些命令,然后您可以ausearch
在审核日志中查看它们。
# ausearch -k auditcmd # you can use additional filters; see the man page
...
time->Fri Oct 2 15:39:03 2020
type=PROCTITLE msg=audit(1601667543.738:64335): proctitle=636174002F6574632F61756469742F72756C65732E642F61756469742E72756C6573
type=PATH msg=audit(1601667543.738:64335): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=214448 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1601667543.738:64335): item=0 name="/usr/bin/cat" inode=201558633 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1601667543.738:64335): cwd="/root"
type=EXECVE msg=audit(1601667543.738:64335): argc=2 a0="cat" a1="/etc/audit/rules.d/audit.rules"
type=SYSCALL msg=audit(1601667543.738:64335): arch=c000003e syscall=59 success=yes exit=0 a0=558ba44ba550 a1=558ba42da110 a2=558ba4472790 a3=8 items=2 ppid=4070001 pid=1516048 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2 comm="cat" exe="/usr/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="auditcmd"
----
time->Fri Oct 2 15:39:06 2020
type=PROCTITLE msg=audit(1601667546.102:64336): proctitle=6175736561726368002D6B006175646974636D64
type=PATH msg=audit(1601667546.102:64336): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=214448 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1601667546.102:64336): item=0 name="/usr/sbin/ausearch" inode=2004931 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1601667546.102:64336): cwd="/root"
type=EXECVE msg=audit(1601667546.102:64336): argc=3 a0="ausearch" a1="-k" a2="auditcmd"
type=SYSCALL msg=audit(1601667546.102:64336): arch=c000003e syscall=59 success=yes exit=0 a0=558ba4476360 a1=558ba44aa840 a2=558ba4472790 a3=8 items=2 ppid=4070001 pid=1516273 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2 comm="ausearch" exe="/usr/sbin/ausearch" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="auditcmd"
Run Code Online (Sandbox Code Playgroud)
您可以看到有关该命令的所有信息都已记录,包括其参数、工作目录、用户/组、SELinux 上下文等等。如果您只需要命令,则位于 EXECVE 行中。它还在 PROCTITLE 行中以十六进制编码,您可以将其提供给十六进制解码器。
另请参阅 RHEL 知识库文章如何审核系统中运行的所有命令?