Linux 中的访问控制列表Linux 中的访问控制列表

目录

13.1. 传统文件权限
13.2. ACL 的优势
13.3. 定义
13.4. 处理 ACL
13.5. 应用程序中的 ACL 支持
13.6. 更多信息

摘要

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

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

传统文件权限传统文件权限

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

setuid 位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 命令的所有用户都以根用户身份执行该命令。

setgid 位setgid 位

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

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

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

粘滞位粘滞位

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

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