需要“史努比”的替代品

需要“史努比”的替代品

目前,我们使用 Snoopy 监控用户在某些外部可访问的服务器上发出的所有命令。我们正在将所有内容更新到 RHEL8 以确保可支持性和合规性,并发现我心爱的 Snoopy 不再维护。因此它无法通过合规性审核,需要更换。

我研究过使用 auditd 来实现这一点,即在 system-auth 和 password-auth 中启用“pam_tty_audit.so”。这种方法奏效了,但输出结果,好吧,我们只能说它不太令人满意。更不用说基本上无法读取了。

我尝试通过添加以下内容来设置 /etc/profile 以进行记录......

function log2syslog
{
   declare COMMAND
   COMMAND=$(fc -ln -0)
   logger -p local1.notice -t bash -i -- "${USER}:${COMMAND}"
}
trap log2syslog DEBUG

并将其添加到 /etc/rsyslog.conf

local1.* -/var/log/cmdline

效果很好!但该解决方案被拒绝了,因为它可以被用户覆盖。

我甚至尝试使用 rootsh 作为用户的 shell 并记录下来。记录很好,但没有时间/日期戳。所以不可接受。

回到手头的问题。我需要一个 Snoopy 的替代品,以可读的格式记录执行的每个命令,并带有时间/戳记,用户无法覆盖。

有什么想法吗?

答案1

审计系统完全能够记录所有用户的命令,而无需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

现在添加用于审计 64 位和 32 位命令:

-a exit,always -F arch=b64 -S execve -k auditcmd
-a exit,always -F arch=b32 -S execve -k auditcmd

请注意,此处的auditcmd是您可以用来搜索审计日志的键ausearch。您可以将其更改为任何您喜欢的内容。

终止并重启 auditd。请注意,需要由 root 手动终止;systemd 单元不允许您停止或重启它。

# killall auditd; systemctl start auditd

现在运行一些命令,然后您就可以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"

您可以看到有关该命令的所有信息都已记录,包括其参数、工作目录、用户/组、SELinux 上下文等。如果您只想要命令,则位于 EXECVE 行中。它还以十六进制编码在 PROCTITLE 行中,您可以将其提供给十六进制解码器。

另请参阅 RHEL 知识库文章如何审计系统中运行的所有命令?

相关内容