![如何找到哪个用户杀死了我的程序?](https://linux22.com/image/1508038/%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0%E5%93%AA%E4%B8%AA%E7%94%A8%E6%88%B7%E6%9D%80%E6%AD%BB%E4%BA%86%E6%88%91%E7%9A%84%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我在 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 提供部分权限。