我正在运行 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 系统(以及其他系统)上的用户可以使用同样精细的权限发布非常精细的内核信息。这样的模型足以允许非特权用户附言获取所需的一切,但不允许访问更敏感的内核信息。