![当用户通过 SSH 修改文件时,如何使用 ausearch 记录用户的 IP?](https://linux22.com/image/1438413/%E5%BD%93%E7%94%A8%E6%88%B7%E9%80%9A%E8%BF%87%20SSH%20%E4%BF%AE%E6%94%B9%E6%96%87%E4%BB%B6%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20ausearch%20%E8%AE%B0%E5%BD%95%E7%94%A8%E6%88%B7%E7%9A%84%20IP%EF%BC%9F.png)
我的团队使用相同的根密码登录开发服务器;我们没有设置单独的用户帐户。
我现在正尝试创建一个文件更改日志,并且想要区分不同的作者,但是 ausearch 总是返回用户的名称(因此总是“root”),即使我传递了规则name_format=numeric
,该规则应该公开 IP 地址而不是“root”。
答案1
注意:原帖者也在另一个在线场所提出了这个问题。这是我在另一个地方的回答的编辑版本。多个用户直接以 root 身份登录的不明智性已经在那里得到解决,无需重提。
据我了解,您询问如何获取审计日志以显示每个记录的操作来自哪个 IP 地址。您感到沮丧的是,大多数审计行甚至没有hostname
和addr
字段,而少数有和字段的审计行大多如下所示:
node=192.168.33.9 type=USER_START msg=audit(1422241281.664:263): pid=5912 uid=0 auid=1001 ses=18 msg='op=PAM:session_open acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/4 [...]
即具有未知hostname
和addr
值。
Linux 审计子系统不会自动用相关的主机名 /IP 信息填充其条目;像 sshd 这样的守护进程必须以某种方式明确地将它们提供给 auditd(对于 sshd 来说,通过 PAM 调用):
node=192.168.33.9 type=CRED_ACQ msg=audit(1422240837.085:202): pid=5441 uid=0 auid=501 ses=18 msg='op=PAM:setcred acct="ratb" exe="/usr/sbin/sshd" hostname=canton.local addr=192.168.33.36 terminal=ssh res=success'
用户级命令(例如您最喜欢的编辑器)根本不会这样做,因为它们不关心您来自哪里。
由于每个人都以同一个用户身份直接登录,因此您必须记录ses
来自用户开始ses
sshd 通过 PAM 发出的审计消息,然后将它们与系统调用echo hi > tmp/testing.txt
您要跟踪的活动的消息。例如,这是来自与上述相同的 SSH 会话的审计跟踪,因此共享相同的ses
ID (18):
node=192.168.33.9 type=PATH msg=audit(1422241924.835:341): item=1 name="tmp/testing.txt" inode=2631940 dev=08:22 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=CREATE
node=192.168.33.9 type=PATH msg=audit(1422241924.835:341): item=0 name="tmp/" inode=2621477 dev=08:22 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT
node=192.168.33.9 type=CWD msg=audit(1422241924.835:341): cwd="/root"
node=192.168.33.9 type=SYSCALL msg=audit(1422241924.835:341): arch=c000003e syscall=2 success=yes exit=3 a0=bc62a8 a1=241 a2=1b6 a3=10 items=2 ppid=5913 pid=5921 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts4 ses=18 comm="bash" exe="/bin/bash" key=(null)