> 软件包与系统管理 > setfacl

setfacl: 设置文件访问控制列表(ACL)

`setfacl` 命令用于设置文件和目录的访问控制列表(ACL)。它超越了传统的 Unix 权限模型(所有者、组、其他人),允许您为特定用户或组授予或撤销细粒度的读取、写入和执行权限。这使得您可以灵活地管理复杂的权限需求。

概述

`setfacl` 允许对文件系统对象进行更灵活的权限管理。您可以单独授予或撤销特定用户或组的读取、写入和执行权限,还可以设置默认 ACL,以便新创建的文件或目录自动继承 ACL。这在需要精细权限管理的多用户共享环境中尤其有用。

主要功能

  • 为特定用户/组设置单独的权限
  • 设置和继承默认 ACL
  • 修改和删除现有 ACL
  • 递归应用权限

主要选项

`setfacl` 提供了各种选项来精细控制 ACL。以下是一些常用的主要选项。

设置和修改 ACL

删除 ACL

其他

生成的命令:

请尝试组合命令。

描述:

`setfacl` 执行命令。

通过组合这些选项,您可以与 AI 一起虚拟地执行命令。

使用示例

展示使用 `setfacl` 命令管理文件和目录 ACL 的各种场景。

授予特定用户读/写权限

setfacl -m u:user1:rw testfile.txt

为 `testfile.txt` 文件中的 `user1` 用户授予读取 (r) 和写入 (w) 权限。

授予特定组只读权限

setfacl -m g:groupA:r shared_dir

为 `shared_dir` 目录中的 `groupA` 组授予读取 (r) 权限。

为目录设置默认 ACL

setfacl -m d:u:user2:rwx project_data

为 `project_data` 目录设置默认 ACL,以便 `user2` 用户在创建新文件时拥有读/写权限,在创建新目录时拥有读/写/执行权限。

递归应用 ACL

setfacl -R -m u:user3:r data_archive

将读取权限递归地授予 `data_archive` 目录及其所有子文件和子目录中的 `user3` 用户。

删除特定用户 ACL 条目

setfacl -x u:user1 testfile.txt

从 `testfile.txt` 文件中删除 `user1` 用户的 ACL 条目。

删除所有扩展 ACL 条目

setfacl -b config_dir

删除 `config_dir` 目录的所有扩展 ACL 条目(保留默认权限)。

删除默认 ACL 条目

setfacl -k project_data

从 `project_data` 目录中删除所有已设置的默认 ACL 条目。

安装

`setfacl` 命令通常作为 `acl` 包的一部分提供。大多数 Linux 发行版默认安装了它,但如果找不到该命令,您可以使用以下命令进行安装。

Debian/Ubuntu 系统

sudo apt update && sudo apt install acl

使用 APT 包管理器安装 `acl` 包。

RHEL/CentOS/Fedora 系统

sudo yum install acl
# 或
sudo dnf install acl

使用 YUM 或 DNF 包管理器安装 `acl` 包。

提示与注意事项

有关有效使用 `setfacl` 和避免潜在问题的提示和注意事项。

与 getfacl 一起使用

使用 `setfacl` 设置 ACL 后,务必使用 `getfacl <文件/目录>` 命令检查当前设置的 ACL。这有助于验证权限是否按预期应用。

  • 检查命令: getfacl <文件/目录>

理解掩码 (mask) 权限

ACL 条目可能包含一个“掩码 (mask)”条目。掩码定义了应用于所有用户和组 ACL 条目的最大有效权限。也就是说,如果授予特定用户或组的权限高于掩码权限,则实际应用的权限将受掩码限制。使用 `setfacl` 设置 ACL 时,掩码可能会自动调整,因此最好使用 `getfacl` 进行检查。

  • 作用: 限制所有用户/组 ACL 条目的最大有效权限
  • 检查: 在 getfacl 输出中查看 'mask::' 部分

与默认权限的交互

当文件或目录设置了 ACL 时,使用 `ls -l` 命令查看时,权限字符串末尾会附加一个 `+` 符号。这表示除了标准的 Unix 权限外,还应用了额外的 ACL。ACL 是对标准 Unix 权限模型的补充,但有时会增加复杂性,因此应谨慎使用。

  • ACL 应用指示: ls -l 输出时权限字符串末尾的 '+' 符号

递归应用 (-R) 时需注意

使用 `-R` 选项递归应用 ACL 时要小心。特别是与 `-b`(删除所有 ACL)一起使用时,可能会意外删除所有子文件和子目录的 ACL。建议始终先使用 `--test` 选项预览结果,或在对重要数据进行备份后再应用。

  • 建议: 使用 --test 选项进行预检查,对重要数据进行备份后再应用

相同类别命令