如何对其他用户隐藏进程参数?

poo*_*lie 7 security kernel

不久前,我曾经使用grsecurity内核补丁,它可以选择对其他非 root 用户隐藏进程参数。基本上这只是/proc/*/cmdline成为模式 0600,并ps通过显示进程存在而不是它的参数来正确处理它。

如果有人在多用户机器上运行说vi christmas-presents.txt,使用规范示例,这很好。

除了安装新内核之外,在 Ubuntu 中是否有任何受支持的方法可以做到这一点?

(我熟悉让单个程序改变它们的 argv 的技术,但大多数程序不这样做,无论如何它是活泼的。 这个 stackoverflow 用户似乎在问同样的问题,但实际上似乎很困惑。)

Kee*_*ook 8

目前唯一的方法是将每个用户放在一个单独的容器中(参见使用和克隆),并在容器中安装一个新的。(lxc会为你做一些。)CLONE_NEWPIDCLONE_NEWNS/proc

但是,有计划将 grsecurity 功能移植到 Ubuntu 和上游内核。如果可以,请注册一些东西并提供帮助。


And*_*ndy 6

在包括 Natty 之前,无法/proc/$pid/cmdline使用股票内核更改文件的权限,权限位内置于内核中。目前,您必须构建一个应用了这些补丁的定制内核。

如果补丁很容易启用此功能,那么可能值得将它们发布到 Ubuntu 内核团队列表 ( kernel-team@lists.ubuntu.com ),我们可以考虑将它们包含在未来的版本中。


poo*_*lie 6

现在有一个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”进程的进程子树。