或者去看看哪个用户导致安全通知/etc/spwd.db
发生更改?
答案1
在 OpenBSD 上,您需要使用以下命令启动进程记帐:accton
命令:
touch /var/account/acct # The file has to exist before accton
accton /var/account/acct
要在启动时启用 accton,请使用:
rcctl enable accounting
设定accounting=YES
在/etc/rc.conf.local
.
无论如何,现在您已经启用了流程记帐,您可以使用lastcomm
查看已执行命令的列表,并搜索名为passwd
和 的进程pwd_mkdb
。输出将反向显示,首先显示最新的进程(根据它们的终止时间,而不是它们的启动时间):
$ lastcomm passwd pwd_mkdb
passwd[18349] - root ttyC1 0.28 secs Thu Mar 28 11:02 (0:00:17.39)
pwd_mkdb[27720] - root ttyC1 0.00 secs Thu Mar 28 11:02 (0:00:00.00)
passwd[58119] -F aviro ttyC1 0.00 secs Thu Mar 28 11:02 (0:00:00.00)
passwd[1586] - root ttyC0 0.22 secs Thu Mar 28 10:11 (0:00:10.02)
pwd_mkdb[27986] - root ttyC0 0.00 secs Thu Mar 28 10:11 (0:00:00.00)
passwd[64663] -F aviro ttyC0 0.00 secs Thu Mar 28 10:11 (0:00:00.00)
每次成功的密码更改都会在历史记录中显示至少三个进程(或多或少在同一时间,并且也在同一 tty:
passwd
root 拥有的进程。该命令必须以提升的权限运行,因此可执行文件设置了 setuid 位,因此它具有 root 的有效 uid。pwd_mkdb
命令也归 root 所有。这是不言自明的。- 另一个
passwd
,这次是在以所有者身份更改密码的用户下。这是一个从原始进程派生出来的进程passwd
命令派生出来的过程,用于检查密码是否足够强,并且放弃特权回到真实的uid。这是幸运的,因为如果不是这个具有原始 uid 的低权限子进程,您将无法知道是谁运行了该命令。如果用户提供的密码不符合要求并且必须提供不同的密码,则此过程可能会出现多次。
答案2
我发现了一种更轻量级的方法来查看谁更改了密码(尽管它没有将其与特定时间戳绑定,并且会让我想知道是否有两个或更多人在同一天更改密码),但考虑到这些机器上的密码更改或用户的添加或删除最多每年发生一次,我可以忍受风险)。
查看时间戳并检查
diff /var/backups/master.passwd.*