插件窝 干货文章 指南:使用Linux ACL保护您的文件和目录

指南:使用Linux ACL保护您的文件和目录

权限 ACL setfacl 文件 262    来源:    2025-04-09

Linux ACL 使用指南:保护您的文件和目录

什么是ACL?

访问控制列表(Access Control Lists,ACL)是Linux系统中一种更精细的权限管理机制,它扩展了传统的Unix权限系统(user/group/other)。ACL允许您为特定用户或组设置更细粒度的文件访问权限。

为什么使用ACL?

  • 传统Unix权限只能设置一个所有者、一个组和其他用户的权限
  • ACL允许您为多个用户和组设置不同的权限
  • 更灵活地控制文件和目录的访问

检查ACL支持

在开始使用ACL前,请确保您的文件系统支持ACL:

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

如果输出中没有显示acl选项,您可能需要重新挂载文件系统:

# 重新挂载根文件系统并启用ACL(临时)
mount -o remount,acl /

要永久启用ACL,请编辑/etc/fstab文件,在相关文件系统的选项中添加acl

ACL基本命令

1. 查看ACL权限

getfacl 文件名或目录名

示例:

getfacl /var/www/html/index.html

2. 设置ACL权限

setfacl -m u:用户名:权限 文件名或目录名
setfacl -m g:组名:权限 文件名或目录名

权限格式: - r:读 - w:写 - x:执行 - -:无权限

示例:

# 允许用户john读取和写入文件
setfacl -m u:john:rw /var/www/html/index.html

# 允许developers组读取和执行文件
setfacl -m g:developers:rx /var/www/html/index.html

3. 删除ACL权限

# 删除特定用户的ACL权限
setfacl -x u:用户名 文件名或目录名

# 删除特定组的ACL权限
setfacl -x g:组名 文件名或目录名

# 删除所有ACL权限(恢复传统权限)
setfacl -b 文件名或目录名

4. 设置默认ACL(仅对目录有效)

默认ACL会影响在该目录下新创建的文件和目录。

setfacl -d -m u:用户名:权限 目录名
setfacl -d -m g:组名:权限 目录名

示例:

# 设置默认ACL,使新创建的文件都能被webadmin用户读取
setfacl -d -m u:webadmin:r /var/www/html

实际应用示例

场景1:共享目录的多用户访问

# 创建共享目录
mkdir /shared
chmod 770 /shared

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

# 设置ACL,允许特定用户访问
setfacl -m u:john:rwx /shared
setfacl -m u:sarah:rx /shared

# 设置默认ACL,使新文件继承权限
setfacl -d -m g:developers:rwx /shared
setfacl -d -m u:john:rwx /shared
setfacl -d -m u:sarah:rx /shared

场景2:Web服务器文件保护

# 设置网站目录权限
chown -R www-data:www-data /var/www/html

# 允许开发者组读取,但只有www-data可以写入
setfacl -R -m g:developers:r-x /var/www/html
setfacl -d -R -m g:developers:r-x /var/www/html

# 允许特定管理员完全访问
setfacl -R -m u:webadmin:rwx /var/www/html
setfacl -d -R -m u:webadmin:rwx /var/www/html

最佳实践

  1. 谨慎使用执行权限:只在必要时授予x权限
  2. 定期审计ACL:使用getfacl检查重要目录的权限
  3. 结合传统权限使用:ACL是传统权限的补充,不是替代
  4. 记录权限变更:维护权限变更日志以便追踪
  5. 测试权限设置:在应用前测试ACL设置,确保不会意外锁定重要文件

常见问题解决

问题1:ACL设置后不生效

  • 检查文件系统是否支持ACL
  • 确保没有SELinux或其他安全模块干扰
  • 检查是否有上级目录的限制性权限

问题2:权限继承不正常

  • 确认是否正确设置了默认ACL(使用-d选项)
  • 检查新文件创建时的umask设置

问题3:备份和恢复ACL权限

  • 使用getfacl -R /path > acl_backup.txt备份ACL
  • 使用setfacl --restore=acl_backup.txt恢复ACL

通过合理使用Linux ACL,您可以实现比传统Unix权限更精细的访问控制,更好地保护您的系统和数据安全。