我在 Linux 服务器上运行一个长期运行的程序。许多其他用户也在这个服务器上运行他们的程序。我们所有人都有 sudo 权限。
假设一个恶意用户使用sudo kill
或终止了我正在运行的程序sudo pkill
。我如何找出这个用户是谁?
答案1
尽管 Paul 的回答是正确的,因为可以消除证据,但这并不意味着证据被消除了。与知道要清除哪些日志的人相比,知道 sudo 的人要多得多(如果他们愿意的话)。
在我的系统上,每次使用 sudo 时,整个命令行都会存储在日志中。我想您的系统可能也会这样做。在 OpenBSD 上,这是 /var/log/authlog,而在 Debian 系统上,这是 /var/log/auth.log。
如果您不知道哪个文件存储了此类信息,请尝试运行 sudo 命令。(使用 sudo 做什么并不重要:甚至echo
就足够了。目的是修改使用 sudo 时修改的日志。)然后使用
ls -ltr /var/log/*auth*
或者
ls -ltr /var/log | tail
为了找到最近修改的文件。
答案2
如果你们都有sudo
,那么就没有保证的方法来保留被终止的进程的证据,因为任何证据都可以用相同级别的权限删除。
您可以使用auditd
审计守护进程跟踪特定的系统调用,例如 kill。
显然,root 用户可以先停止审计守护进程,然后删除日志。因此,您需要将日志导出到外部。
更好的方法是更好地管理 sudo,只为每个用户提供他们需要的访问权限。一般用户几乎从不需要完全的 root 访问权限,您可以使用 sudo 提供部分权限。