当前位置:首页>Linux>Linux下setfacl 权限管理基础使用

Linux下setfacl 权限管理基础使用

  • 2026-10-06 16:57:51
Linux下setfacl 权限管理基础使用

setfacl 是 Linux 中用于设置文件访问控制列表(ACL)的命令。ACL 提供了比传统 Linux 权限(所有者/组/其他人)更灵活的权限管理机制。

基本语法

setfacl [选项] 规则 文件/目录

常用选项

选项说明
-m修改或添加 ACL 规则
-x删除指定的 ACL 规则
-b删除所有扩展 ACL 规则
-k删除默认 ACL 规则
-R递归应用到目录及其内容
-d设置默认 ACL(仅对目录有效)
--set完全替换当前 ACL

规则格式

1. 针对用户

# 设置特定用户的权限
setfacl -m u:用户名:权限 文件

# 示例:给用户 alice 读写权限
setfacl -m u:alice:rw file.txt

2. 针对组

# 设置特定组的权限
setfacl -m g:组名:权限 文件

# 示例:给组 developers 读执行权限
setfacl -m g:developers:rx project/

3. 针对其他人

# 设置其他人的权限
setfacl -m o:权限 文件

4. 权限表示

  • 使用字母:r(读)、w(写)、x(执行)、-(无权限)

  • 使用数字:类似 chmod 的八进制(4=读,2=写,1=执行)

常用示例

1. 为用户设置权限

# 给特定用户添加读写权限
setfacl -m u:john:rw document.txt

# 给用户 bob 设置读权限
setfacl -m u:bob:r document.txt

2. 为组设置权限

# 给组添加读执行权限
setfacl -m g:staff:rx /shared_folder

# 给多个组设置权限
setfacl -m g:admin:rwx,g:users:rx script.sh

3. 递归设置目录 ACL

# 递归给目录及其内容设置权限
setfacl -R-m u:tom:rwx /home/tom/projects/

# 递归给目录设置默认 ACL
setfacl -R-d-m u:tom:rwx /home/tom/projects/

4. 删除 ACL 规则

# 删除特定用户的 ACL
setfacl -x u:john document.txt

# 删除特定组的 ACL
setfacl -x g:staff document.txt

# 删除所有 ACL(恢复到传统权限)
setfacl -b document.txt

5. 设置默认 ACL(目录)

# 设置目录的默认 ACL,新文件将继承这些权限
setfacl -d-m u:john:rw shared_directory/
setfacl -d-m g:staff:rx shared_directory/

查看 ACL

使用 getfacl 命令查看已设置的 ACL:

getfacl 文件/目录

实用场景示例

场景1:共享 Web 目录

# 允许 www-data 组读写,开发者组只读
sudo setfacl -R-m g:www-data:rwx /var/www/html/
sudo setfacl -R-m g:developers:rx /var/www/html/
sudo setfacl -R-d-m g:www-data:rwx /var/www/html/

场景2:协作项目目录

# 团队成员有读写权限,新文件自动继承组权限
mkdir /projects/team_project
setfacl -m g:team:rwx /projects/team_project
setfacl -d-m g:team:rwx /projects/team_project
setfacl -m mask::rwx /projects/team_project

场景3:备份用户访问

# 允许备份用户读取所有配置文件
setfacl -R-m u:backup:r /etc/
setfacl -m u:backup:rx /etc/   # 目录需要执行权限才能进入

注意事项

  1. 文件系统需要支持 ACL(通常 ext4、xfs 等都支持)

  2. 使用 mount 命令检查是否启用了 ACL(通常默认启用)

  3. ACL 规则遵循顺序:用户、组、其他人

  4. 修改文件权限(chmod)可能影响 ACL mask 值

  5. 备份和恢复 ACL:getfacl file > acl.txt 和 setfacl --restore=acl.txt

实用技巧

# 备份所有 ACL
getfacl -R /path/to/dir > backup.acl

# 恢复 ACL
setfacl --restore=backup.acl

# 复制 ACL 从一个文件到另一个
getfacl source | setfacl --set-file=- target

# 查看 ACL 对进程有效权限的影响
getfacl -e file.txt

最新文章

随机文章