电脑技术学习

对话 UNIX,第 8 部分: UNIX 进程

dn001

  每个进程还有一个所有者。一般来说,您启动的任务(如您的 shell 和命令)的所有者就是您。系统服务的所有者可能是特殊用户或超级用户 root。例如,为了增强安全性,Apache HTTP Server 的所有者一般是一个名为 www 的专用用户,该用户能提供 Web 服务器所需的的文件访问权限,但不包含其他权限。

  进程的所有权可能会改变,但必须严格保持其独占性。一个进程在任何时候都只能有一个所有者。

  最后,每个进程都具有权限。一般来说,进程的权限与其所有者的权限是相称的。(例如,如果您无法在命令行 Shell 中访问某个特定文件,则您从 Shell 中启动的程序也会继承同样的限制。)这一继承规则有一个例外情况,即应用程序启用了特殊的 setuid 或 setgid 位,如 ls 显示的那样,在此情况下,某个进程可能会获得比其所有者更高的权限。

  setuid 位可以使用 chmod u+s 进行设置。setuid 的权限如下所示:

$ ls -l /usr/bin/top
-rwsr-xr-x   1 root wheel   83088 Mar 20 2005 top

  setgid 位可以使用 chmod g+s 设置:

$ ls -l /usr/bin/top
-r-xr-sr-x  1 root tty 19388 Mar 20 2005 /usr/bin/wall

  一个 setuid 进程(如启动 top)是用拥有该文件的用户权限运行的。因此,当您运行 top 时,您的权限会被提升,与 root 的权限等同。类似地,一个 setgid 进程是用与文件的组所有者相关联的权限运行的。

  例如,在 Mac OS X 中,wall 工具(“write all的缩写,因其会将某个消息写入所有物理或虚拟终端设备而得名)的 setgid 被设为tty(如上所示)。当您登录并分配到一个用来键入的终端设备(该终端成为 Shell 的标准输入)时,您将被指定为该设备的所有者,而 tty 成为组所有者。因为 wall 是以组 tty 的权限运行的,所以它可以打开和写入所有终端。

标签: