第 5 章 Linux 中的访问控制列表

目录

5.1. 传统文件权限
5.2. ACL 的优势
5.3. 定义
5.4. 处理 ACL
5.5. 应用程序中的 ACL 支持
5.6. 参考信息

摘要

可以将 POSIX ACL(访问控制列表)作为文件系统对象的传统权限概念的扩展来使用。利用 ACL,可以比传统权限概念更灵活地定义权限。

POSIX ACL 这一术语表明它是一种真正的 POSIX(可移植操作系统接口)标准。由于多种原因,相应的标准草案 POSIX 1003.1e 和 POSIX 1003.2c 已被撤消。但是,在属于 UNIX 系列的许多系统上使用的 ACL 都基于这两个草案,并且本章中介绍的文件系统 ACL 的实施也遵照这两个标准。有关它们的信息,请参见 http://wt.xpilot.org/publications/posix.1e/


5.1. 传统文件权限

第 3.2 节 “用户和访问权限” (↑启动)中解释了传统 Linux 文件权限的基础。更多高级功能有 setuid、setgid 和粘滞位。

5.1.1. setuid 位

在某些情况下,访问权限可能过于严格。因此,Linux 另有一些设置,允许为执行特定操作临时更改当前用户和组标识。例如,passwd 程序通常要求拥有根权限才能访问 /etc/passwd。此文件包含一些重要信息,如用户主目录及用户和组 ID。因此,普通用户将无法更改 passwd,因为授予所有用户直接访问此文件的权限太过危险。解决该问题的一种可行方案就是 setuid 机制。setuid(设置用户 ID)是一个特殊的文件特性,它指示系统使用特定用户 ID 执行已相应标记的程序。以 passwd 命令为例:

-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

您可以看见 s,它表示为用户许可设置了 setuid 位。通过设置 setuid 位,启动 passwd 命令的所有用户都以根用户身份执行该命令。

5.1.2. setgid 位

setuid 位适用于用户。而对组而言也有一个等价的属性:setgid 位。设置了此位的程序基于保存该程序的组 ID 运行,而不论是哪个用户启动了该程序。因此,在设置了 setgid 位的目录中,所有新建文件和子目录都被指派到该目录所属的组。请考虑下面的示例目录:

drwxrws--- 2 tux archive 48 Nov 19 17:12  backup

您可以看见 s,它表示为组许可设置了 setgid 位。目录的拥有者和组 archive 的成员可以访问此目录。不是该组成员的用户会“映射”到各自的组中。所有写入文件的有效组 ID 为 archive。例如,以组 ID archive 运行的备份程序即便没有根特权也能访问此目录。

5.1.3. 粘滞位

另外还可以设置粘滞位。属于可执行程序的粘滞位和属于目录的粘滞位在作用上有所不同。如果属于某个程序,以这种方式标记的文件将被装入 RAM,而不必在每次使用时从硬盘读取。由于目前硬盘的速度已经足够快,此特性已经很少使用。如果为目录指派了此位,则可以防止用户删除彼此的文件。典型示例如 /tmp 目录和 /var/tmp 目录:

drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp