ACL是解决Web服务器跨用户目录共享安全问题的有效手段,通过设置默认ACL、当前目录ACL及Web服务用户精准授权,实现细粒度、可继承、多角色访问控制,并需定期审计与避免chmod误操作。

Web服务器跨用户目录共享时,单纯依赖传统权限(如Linux的user:group:rwx)容易导致越权访问或权限过紧影响协作。ACL(Access Control List)能提供更精细、可继承、多用户多角色的访问控制能力,是解决跨用户目录共享安全问题的有效手段。
启用并验证文件系统ACL支持
多数现代Linux发行版默认启用ACL,但需确认ext4/xfs等文件系统挂载时包含acl选项:
- 运行 mount | grep " / " 查看根分区是否含 acl 参数;若无,需在 /etc/fstab 对应行添加 ,acl(如:
/dev/sda1 / ext4 defaults,acl 0 1),然后 sudo mount -o remount / - 用 getfacl /testdir 测试:若返回 ACL 信息(含 # file: /testdir 等),说明已就绪;若报错“Operation not supported”,则需检查文件系统类型与挂载参数
为共享目录设置基础ACL策略
以 Web 共享目录 /var/www/shared 为例,需让开发组(devgrp)、运维组(opsgrp)和特定用户(alice)协同访问,同时限制其他用户:
- 设置默认ACL(影响新创建子文件/目录):
setfacl -d -m g:devgrp:rwx,g:opsgrp:rx,u:alice:rw /var/www/shared - 设置当前目录ACL(立即生效):
setfacl -m g:devgrp:rwx,g:opsgrp:rx,u:alice:rw,o::--- /var/www/shared - 关键点:o::--- 彻底关闭“其他用户”权限;-d 确保后续新建文件自动继承;rx 对目录是进入+列表,对文件是读+执行(脚本类需显式加x)
配合Web服务器用户(如www-data)精准授权
Web服务进程(如Apache/Nginx)通常以 www-data 用户运行,需确保其能读取(或写入)共享内容,但又不破坏协作逻辑:
- 若仅需读取静态资源:
setfacl -m u:www-data:r-x /var/www/shared(目录)
setfacl -R -m u:www-data:r-- /var/www/shared(递归设文件只读) - 若需上传或动态写入(如CMS附件):
先创建专用子目录(如 /var/www/shared/uploads),再单独授权:
setfacl -m u:www-data:rwx,g:devgrp:rx /var/www/shared/uploads
并设默认ACL确保新上传文件归属可控 - 避免将 www-data 加入业务组(如 devgrp),防止其获得额外权限;ACL 授权更清晰、可审计
定期审计与自动化维护
ACL规则易被忽略或误操作覆盖,需建立检查机制:
- 用 getfacl -R /var/www/shared | grep -E "^(#|user:|group:|other:)" 快速查看所有ACL条目
- 编写简短校验脚本(如 cron 每日运行):
if ! getfacl /var/www/shared | grep -q "u:www-data:r.-"; then echo "ALERT: www-data missing read on shared"; fi - 禁止直接用 chmod 修改带ACL的目录权限——它会清除扩展ACL;应使用 setfacl -m 或 setfacl --remove-all 后再 chmod

















