From 879e329a8705076b6f6be6739fd9fea6f681036e Mon Sep 17 00:00:00 2001 From: Fukang Chen Date: Mon, 17 Nov 2008 07:31:51 +0000 Subject: MFen: handbook: Makefile 1.109 -> 1.111 advanced-networking/chapter.sgml 1.413 -> 1.415 basics/chapter.sgml 1.153 -> 1.154 book.sgml 1.172 -> 1.173 chapters.ent 1.37 -> 1.38 config/chapter.sgml 1.233 -> 1.236 cutting-edge/chapter.sgml 1.228 -> 1.231 desktop/chapter.sgml 1.76 -> 1.78 disks/chapter.sgml 1.286 -> 1.288 dtrace/chapter.sgml 0 -> 1.5 eresources/chapter.sgml 1.186 -> 1.195 filesystems/chapter.sgml 0 -> 1.4 geom/chapter.sgml 1.42 -> 1.43 jails/chapter.sgml 1.16 -> 1.17 mirrors/chapter.sgml 1.449 -> 1.451 multimedia/chapter.sgml 1.129 -> 1.130 network-servers/chapter.sgml 1.108 -> 1.109 ports/chapter.sgml 1.282 -> 1.284 preface/preface.sgml 1.39 -> 1.41 security/chapter.sgml 1.330 -> 1.332 updating/chapter.sgml 0 -> 1.1 x11/chapter.sgml 1.187 -> 1.190 Obtained from: The FreeBSD Simplified Chinese Project Merging work done by: delphij, loader --- zh_CN.GB2312/books/handbook/basics/chapter.sgml | 125 +++++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) (limited to 'zh_CN.GB2312/books/handbook/basics') diff --git a/zh_CN.GB2312/books/handbook/basics/chapter.sgml b/zh_CN.GB2312/books/handbook/basics/chapter.sgml index ebf9e6a427..88bfc4d7ba 100644 --- a/zh_CN.GB2312/books/handbook/basics/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/basics/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.153 + Original Revision: 1.154 $FreeBSD$ --> @@ -604,6 +604,129 @@ total 530 &man.chflags.1; 和 &man.chflags.2; 联机手册, 以对其加深理解。 + + + + + + Tom + Rhodes + 原作 + + + + + setuid、 setgid 和 sticky 权限 + + 除了前面已经讨论过的那些权限之外, 还有三个管理员应该知道的权限配置。 + 它们是 setuid、 + setgidsticky + + 这些配置对于一些 &unix; 操作而言很重要, + 因为它们能提供一些一般情况下不会授予普通用户的功能。 + 为了便于理解, 我们首先介绍真实用户 ID (real + user ID) 和生效用户 ID (effective user ID)。 + + 真实用户 ID 是拥有或启动进程的用户 UID。 + 生效 UID + 是进程以其身份运行的用户 ID。 举例来说, + &man.passwd.1; 工具通常是以发起修改密码的用户身份启动, + 也就是说其进程的真实用户 ID 是那个用户的 ID; + 但是, 由于需要修改密码数据库, 它会以 + root 用户作为生效用户 ID 的身份运行。 + 这样, 普通的非特权用户就可以修改口令, 而不是看到 + Permission Denied 错误了。 + + + &man.mount.8; 的 nosuid + 选项可以令系统在不给出任何错误提示的情况下不执行这些程序。 + 另一方面, 这个选项并不是万无一失的, 正如 + &man.mount.8; 联机手册所提到的那样, + 如果系统中安装了绕过 nosuid + 的封装程序, 那么这种保护就可以被绕过了。 + + + setuid 权限可以通过在普通权限前面加上一个数字四 (4) + 来设置, 如下面的例子所示: + + &prompt.root; chmod 4755 suidexample.sh + + 这样一来, + suidexample.sh + 的权限应该如下面这样: + + -rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh + + 您会注意到, 在原先的属主执行权限的位置变成了 + s。 这样, 需要提升特权的可执行文件, + 例如 passwd 就可以正常运行了。 + + 可以打开两个终端来观察这一情形。 在其中一个终端里面, + 以普通用户身份启动 passwd 进程。 + 在它等待输入新口令时, 在另一个终端中查看进程表中关于 + passwd 命令的信息。 + + 在终端 A 中: + + Changing local password for trhodes +Old Password: + + 在终端 B 中: + + &prompt.root; ps aux | grep passwd + + trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd +root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd + + 正如前面所说的那样, passwd 是以普通用户的身份启动的, + 但其生效 + UIDroot + + 与此对应, setgid 权限的作用, + 与 setuid 权限类似, + 只是当应用程序配合这一设定运行时, 它会被授予拥有文件的那个组的权限。 + + 如果需要在文件上配置 setgid 权限, + 可以在权限数值前面增加数字二 (2) 来运行 chmod 命令, + 如下面的例子所示: + + &prompt.root; chmod 2755 suidexample.sh + + 可以用与前面类似的方法来检视新设定的生效情况, 在组权限的地方的 + s 表示这一配置已经生效: + + -rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 suidexample.sh + + + 在这些例子中, 尽管 shell 脚本也属于可执行文件的一种, + 但它们不会以您配置的 EUID 或生效用户 ID 的身份运行。 + 这是因为 shell 脚本可能无法直接呼叫 + &man.setuid.2; 调用。 + + + 我们已经讨论了两个特殊权限位 + (setuidsetgid + 权限位), 它们让用户在使用程序时能够用到更高的权限, + 有时这会削弱系统的安全性。 除了这两个之外, 还有第三个特殊权限位: + sticky bit, 它能够增强安全性。 + + 当在目录上设置了 sticky bit 之后, + 其下的文件就只能由文件的所有者删除了。 这个权限设置能够防止用户删除类似 + /tmp 这样的公共目录中不属于他们的文件。 + 要应用这种权限, 可以在权限设置前面加上数字一 (1)。 例如: + + &prompt.root; chmod 1777 /tmp + + 现在, 可以用 + ls 命令来查看效果: + + &prompt.root; ls -al / | grep tmp + + drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp + + 这里的结尾的 t 表示了 + sticky bit 权限。 + -- cgit v1.2.3