传统 UNIX 文件保护可为以下三类用户提供读写和执行权限:文件属主、文件组和其他用户。访问控制列表 (Access Control List, ACL) 通过允许您执行以下操作来提供更好的文件安全性:
为文件属主、组、其他用户、特定用户和特定组定义文件权限
为上面的每一种类别定义缺省权限
例如,如果想要组中的每个用户都能够读取某文件,则只需要授予该组对该文件的读取权限即可。现在,假设您希望组中只有一个用户能够写入该文件。标准 UNIX 不提供该级别的文件安全性。但是,ACL 可提供此级别的文件安全性。
ACL 项定义文件的 ACL。这些项通过 setfacl 命令设置。 ACL 项由以下字段组成并使用冒号进行分隔:
entry-type:[uid|gid]:perms |
设置文件权限的 ACL 项的类型。例如,entry-type 可以是 user(文件属主)或 mask(ACL 掩码)。有关 ACL 项的列表,请参见表 6–7 和表 6–8。
用户名或用户 ID (user ID, UID)。
组名或组 ID (group ID, GID)。
表示 entry-type 中设置的权限。perms 可以由符号字符 rwx 或八进制数字表示。这些数字与用于 chmod 命令的数字相同。
在以下示例中,ACL 项为用户 stacey 设置读写权限。
user:stacey:rw- |
仅 UFS 文件系统支持 UFS 文件系统属性,例如 ACL。因此,如果将具有 ACL 项的文件恢复或复制到 /tmp 目录(通常挂载为 TMPFS 文件系统)中,则这些 ACL 项将丢失。使用 /var/tmp 目录临时存储 UFS 文件。
下表列出了对文件设置 ACL 时可以使用的有效 ACL 项。前三个 ACL 项提供基本的 UNIX 文件保护。
表 6–7 文件的 ACL 项
ACL 项 |
说明 |
---|---|
u[ser]::perms |
文件属主权限。 |
g[roup]::perms |
文件组权限。 |
o[ther]:perms |
文件属主或文件组成员之外的用户的权限。 |
m[ask]:perms |
ACL 掩码。掩码项表示允许用户(属主除外)和组拥有的最大权限。掩码是一种可快速更改所有用户和组的权限的方法。 例如,mask:r-- 掩码项表示,用户和组只能拥有读取权限,即使他们可能拥有写和执行权限。 |
u[ser]:uid:perms |
特定用户的权限。对于 uid,可以指定用户名或数字 UID。 |
g[roup]:gid:perms |
特定组的权限。对于 gid,可以指定组名或数字 GID。 |
除表 6–7 中说明的 ACL 项外,还可以对目录设置缺省 ACL 项。在具有缺省 ACL 项的目录中创建的文件或目录将具有与缺省 ACL 项相同的 ACL 项。表 6–8 列出了目录的缺省 ACL 项。
首次为特定用户和组设置目录的缺省 ACL 项时,还必须为文件属主、文件组、其他用户和 ACL 掩码设置缺省 ACL 项。这些项是必需的。这些项是下表中前四个缺省 ACL 项。
表 6–8 目录的缺省 ACL 项
缺省 ACL 项 |
说明 |
---|---|
d[efault]:u[ser]::perms |
缺省文件属主权限。 |
d[efault]:g[roup]::perms |
缺省文件组权限。 |
d[efault]:o[ther]:perms |
文件属主或文件组成员之外的用户的缺省权限。 |
d[efault]:m[ask]:perms |
缺省 ACL 掩码。 |
d[efault]:u[ser]:uid:perms |
特定用户的缺省权限。对于 uid,可以指定用户名或数字 UID。 |
d[efault]:g[roup]:gid:perms |
特定组的缺省权限。对于 gid,可以指定组名或数字 GID。 |
以下命令可管理文件或目录的 ACL。
设置、添加、修改和删除 ACL 项。有关更多信息,请参见 setfacl(1) 手册页。
显示 ACL 项。有关更多信息,请参见 getfacl(1) 手册页。