不久前,我曾经使用过grsecurity内核补丁,其中有一个选项可以向其他非 root 用户隐藏进程参数。基本上,这只是使其/proc/*/cmdline
成为模式 0600,并ps
通过显示进程存在但不显示其参数来正确处理该问题。
如果某人在多用户计算机上运行,那么这将非常有用vi christmas-presents.txt
,例如使用典型示例。
除了安装新内核之外,在 Ubuntu 中还有其他支持的方法吗?
(我熟悉让单个程序改变其 argv 的技术,但大多数程序不会这样做,而且无论如何它都是不正当的。 此 stackoverflow 用户似乎在问同样的问题,但实际上只是看起来很困惑。)
答案1
目前,唯一的方法是将每个用户放在单独的容器中(参见克隆和CLONE_NEWPID
)CLONE_NEWNS
,并/proc
在容器中安装一个新的。(龙芯将为您做一些这方面的工作。
然而,有计划移植 grsecurity 功能Ubuntu 和上游内核。如果可以,请注册并提供帮助。
答案2
直到 Natty 为止,都无法更改使用/proc/$pid/cmdline
原有内核的文件权限,权限位已内置到内核中。目前,您必须构建一个应用了这些补丁的定制内核。
如果补丁很容易启用此功能,那么可能值得将它们发布到 Ubuntu 内核团队列表([电子邮件保护]),我们可以考虑将它们纳入未来的版本中。
答案3
现在有一个hidepid
安装选项procfs
它可以让你隐藏其他用户的参数,并可以选择允许一个组查看所有进程:
第一个挂载选项称为“hidepid”,它的值定义了我们希望向非所有者提供有关进程的多少信息:
hidepid=0(默认)表示旧行为 - 任何人都可以读取所有全世界可读的 /proc/PID/* 文件。
hidepid=1 表示用户不能访问任何 /proc/PID/ 目录,只能访问自己的目录。cmdline、sched*、status 等敏感文件现在受到保护,无法供其他用户访问。由于权限检查在 proc_pid_permission() 中完成,并且文件的权限保持不变,因此需要特定文件模式的程序不会感到困惑。
hidepid=2 意味着 hidepid=1 加上所有 /proc/PID/ 对其他用户都是不可见的。这并不意味着它隐藏了进程是否存在(可以通过其他方式了解,例如通过 kill -0 $PID),但它隐藏了进程的 euid 和 egid。它使入侵者收集有关正在运行的进程的信息的任务变得复杂,包括某个守护进程是否以提升的权限运行,另一个用户是否运行某个敏感程序,其他用户是否运行任何程序等。
gid=XXX 定义一个能够收集所有进程信息的组(如 hidepid=0 模式)。应使用此组,而不是将非 root 用户放入 sudoers 文件或类似的东西中。但是,不应将不值得信任的用户(如守护进程等)添加到该组中,因为它们不应监视整个系统中的任务。
hidepid=1 或更高版本旨在限制对 procfs 文件的访问,这可能会泄露一些敏感的私人信息,例如精确的击键时间:
http://www.openwall.com/lists/oss-security/2011/11/05/3
hidepid=1/2 不会破坏监控用户空间工具。ps、top、pgrep 和 conky 可以正常处理 EPERM/ENOENT,并且表现得好像当前用户是唯一运行进程的用户。pstree 显示包含“pstree”进程的进程子树。
答案4
您可以通过在用户和组设置中更改他们的权限来阻止他们访问系统监视器和 top。我不确定这是否是一个完整的解决方案,但它应该足以阻止大多数普通用户访问。