访问控制列表(Access Control Lists,ACL)是Linux系统中一种更精细的权限管理机制,它扩展了传统的Unix权限系统(user/group/other)。ACL允许您为特定用户或组设置更细粒度的文件访问权限。
在开始使用ACL前,请确保您的文件系统支持ACL:
# 检查文件系统是否支持ACL
mount | grep acl
如果输出中没有显示acl
选项,您可能需要重新挂载文件系统:
# 重新挂载根文件系统并启用ACL(临时)
mount -o remount,acl /
要永久启用ACL,请编辑/etc/fstab
文件,在相关文件系统的选项中添加acl
。
getfacl 文件名或目录名
示例:
getfacl /var/www/html/index.html
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
# 删除特定用户的ACL权限
setfacl -x u:用户名 文件名或目录名
# 删除特定组的ACL权限
setfacl -x g:组名 文件名或目录名
# 删除所有ACL权限(恢复传统权限)
setfacl -b 文件名或目录名
默认ACL会影响在该目录下新创建的文件和目录。
setfacl -d -m u:用户名:权限 目录名
setfacl -d -m g:组名:权限 目录名
示例:
# 设置默认ACL,使新创建的文件都能被webadmin用户读取
setfacl -d -m u:webadmin:r /var/www/html
# 创建共享目录
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
# 设置网站目录权限
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
getfacl
检查重要目录的权限-d
选项)getfacl -R /path > acl_backup.txt
备份ACLsetfacl --restore=acl_backup.txt
恢复ACL通过合理使用Linux ACL,您可以实现比传统Unix权限更精细的访问控制,更好地保护您的系统和数据安全。