为什么当“普通用户”在 OS X 上执行“ps ux”时,报告的用户是“root”?这是正常现象吗?

为什么当“普通用户”在 OS X 上执行“ps ux”时,报告的用户是“root”?这是正常现象吗?

我正在运行 OS X 10.6.1。当我以组员工的普通用户身份登录并执行

ps ux

它列出了由 root 运行的 ps ux 命令:

snies   181   0.0  0.3  2774328  12500   ??  S     6:00PM   0:20.96 /System/Library...
root   1673   0.0  0.0  2434788    508 s001  R+    8:16AM   0:00.00 ps ux
snies   177   0.0  0.0  2457208    984   ??  Ss    6:00PM   0:00.52 /sbin/launchd
snies  1638   0.0  0.0  2435468   1064 s001  S     8:13AM   0:00.03 -bash

这是正常行为吗?如果是,为什么?请注意,该用户不是管理员帐户,无法使用 sudo。

答案1

对于 Mac OS X 来说,这是正常的。在几乎所有的 Unix-oid 系统上,这都是正常的。它以 root 身份运行,无需须藤因为附言二进制文件设置为以 root 身份运行(例如在我的 10.4 系统上):

% ls -l $(which ps)
-rwsr-xr-x   1 root  wheel  31932 Mar 20  2005 /bin/ps

s用户所有者列中的x表示它是 set-uid(和用户可执行文件),所有者是 root;这意味着无论谁运行它,它都将以 root 身份运行)

传统上(在 Mac OS X 系统上仍然如此),它必须以 root 身份运行,因为它所需的信息只能通过 root 可访问的设备(例如 /dev/kmem)或仅限 root 的系统调用获得。这是可以的,因为(除非实现中存在错误)附言程序的编写方式不允许调用者获取他们不应该获得的信息。

其他系统有其他机制,提供对信息的访问附言需要,因此不需要 set-uid附言二进制文件。值得注意的是,/proc 虚拟文件系统Linux 系统(以及其他系统)上的用户可以使用同样精细的权限发布非常精细的内核信息。这样的模型足以允许非特权用户附言获取所需的一切,但不允许访问更敏感的内核信息。

相关内容