插件窝 干货文章 应用Linux ACL:个性化文件权限管理

应用Linux ACL:个性化文件权限管理

权限 ACL setfacl 设置 660    来源:    2025-04-09

Linux ACL:个性化文件权限管理

什么是ACL?

ACL(Access Control List,访问控制列表)是Linux系统中用于实现更细粒度文件权限控制的机制,它扩展了传统的Unix权限系统(user/group/others三种权限)。

为什么需要ACL?

传统的Unix权限系统有以下局限性: - 只能为一个用户、一个组和其他人设置权限 - 无法为多个用户或多个组设置不同权限 - 无法为特定用户和组组合设置权限

ACL解决了这些问题,允许为任意数量的用户和组设置精确的权限。

检查ACL支持

在开始使用ACL前,请确认: 1. 文件系统是否支持ACL(ext3/4、xfs、btrfs等现代文件系统通常支持) 2. 系统是否安装了ACL工具

# 检查文件系统是否支持ACL
mount | grep acl

# 如果没有输出,可以重新挂载文件系统启用ACL
mount -o remount,acl /

基本ACL命令

1. 查看ACL

getfacl 文件名

示例输出:

# file: testfile
# owner: user1
# group: group1
user::rw-
user:user2:r--
group::r--
mask::r--
other::r--

2. 设置ACL

setfacl -m u:用户名:权限 文件名  # 为用户设置
setfacl -m g:组名:权限 文件名    # 为组设置

示例:

setfacl -m u:user2:rw testfile   # 给user2读写权限
setfacl -m g:developers:rx project/  # 给developers组读执行目录权限

3. 删除ACL条目

setfacl -x u:用户名 文件名  # 删除用户ACL
setfacl -x g:组名 文件名    # 删除组ACL

4. 删除所有ACL条目

setfacl -b 文件名

常用选项

  • -R: 递归设置(用于目录)
  • -d: 设置默认ACL(新创建的文件/目录将继承这些权限)
  • -k: 删除默认ACL

实际应用示例

1. 共享目录权限管理

# 创建共享目录
mkdir /shared

# 设置组所有权
chown :team /shared

# 设置基础权限
chmod 770 /shared

# 为特定用户添加权限
setfacl -m u:guest:rx /shared

# 为另一个组添加权限
setfacl -m g:contractors:rwx /shared

# 设置默认ACL,使新文件继承权限
setfacl -dm u::rwx,g::rwx,o::--- /shared

2. Web服务器目录权限

# 允许apache用户读取网站文件
setfacl -R -m u:apache:r-x /var/www/html

# 允许开发组完全访问
setfacl -R -m g:webdev:rwx /var/www/html

# 设置默认ACL,使新文件自动获得适当权限
setfacl -R -dm u:apache:r-x,d:g:webdev:rwx /var/www/html

ACL权限掩码

ACL中的mask定义了用户和组能够获得的最大权限。设置ACL时,实际有效权限是请求权限与mask的交集。

查看和设置mask:

getfacl file | grep mask
setfacl -m m::rwx file

注意事项

  1. 备份重要文件:修改权限前建议备份
  2. 权限继承:理解默认ACL如何影响新创建的文件
  3. 性能影响:过多ACL条目可能影响性能
  4. 兼容性:确保所有需要访问的系统都支持ACL
  5. 备份ACL:可以使用getfacl备份权限,setfacl恢复

备份和恢复ACL

# 备份目录ACL
getfacl -R /path/to/dir > acl_backup.txt

# 恢复ACL
setfacl --restore=acl_backup.txt

通过合理使用ACL,您可以实现比传统Unix权限更灵活、更精确的文件系统访问控制。