16.11.访问控制列表(ACL)

访问控制列表(ACL)扩展了传统的 UNIX® 文件权限,允许在每个文件或目录的基础上对用户和组提供细粒度的访问控制。每个 ACL 条目定义一个用户或组以及相关的权限,如读取、写入和执行。FreeBSD 提供了命令 getfacl(1)setfacl(1) 来管理 ACL。

ACL 在需要比标准权限更具体访问控制的场景中非常有用,通常用于多用户环境或共享托管。然而,复杂性可能是不可避免的,因此需要仔细规划,以确保提供所需的安全性。

注意

FreeBSD 支持在 UFS 和 OpenZFS 中实现 NFSv4 ACL。请注意,某些参数在 setfacl(1) 命令中仅适用于 POSIX ACL,其他则适用于 NFSv4 ACL。

16.11.1. 启用 UFS 中的 ACL 支持

ACL 通过挂载时的管理标志 acls 启用,可以在 /etc/fstab 中添加此标志。

因此,需要访问 /etc/fstab,并在选项部分添加 acls 标志,如下所示:

# 设备        挂载点          文件系统类型    选项       Dump      Pass#
/dev/ada0s1a    /                 ufs       rw,acls     1         1

16.11.2. 获取 ACL 信息

可以使用 getfacl(1) 检查文件或目录的 ACL。

例如,要查看 ~/test 文件的 ACL 设置,请执行以下命令:

% getfacl test

如果使用 NFSv4 ACL,输出应类似于以下内容:

# 文件: test
# 所有者: freebsduser
# 组: freebsduser
            owner@:rw-p--aARWcCos:-------:allow
            group@:r-----a-R-c--s:-------:allow
         everyone@:r-----a-R-c--s:-------:allow

如果使用 POSIX.1e ACL,输出应类似于以下内容:

# 文件: test
# 所有者: freebsduser
# 组: freebsduser
user::rw-
group::r--
other::r--

16.11.3. 操作 ACL

setfacl(1) 可用于向文件或目录添加、修改或删除 ACL。

如上所述,某些 setfacl(1) 的参数不适用于 NFSv4 ACL,反之亦然。本节介绍如何执行适用于 POSIX ACL 和 NFSv4 ACL 的命令,并展示两者的示例。

例如,要设置 POSIX.1e 默认 ACL 的强制元素:

% setfacl -d -m u::rwx,g::rx,o::rx,mask::rwx directory

此示例为文件所有者的 POSIX.1e ACL 条目设置读、写和执行权限,并为文件上的邮件组设置读写权限:

% setfacl -m u::rwx,g:mail:rw file

要在 NFSv4 ACL 中执行与上一个示例相同的操作:

% setfacl -m owner@:rwxp::allow,g:mail:rwp::allow file

要从 POSIX.1e ACL 中删除所有 ACL 条目,但保留文件的三个必需条目:

% setfacl -bn file

要从 NFSv4 ACL 中删除所有 ACL 条目:

% setfacl -b file

有关这些命令的选项,请参考 getfacl(1)setfacl(1)

最后更新于