关键在于分层控制:目录设755基础权限确保所有人可读可执行,acl限定pubmgr组写权限,并启用default acl使新文件默认只读(g:pubmgr:rx、o::r--),再辅以发布流程加固。

要让公共发布目录实现“发布专员可写、其余人仅能浏览”,关键不是单纯设一个 ACL 规则,而是分层控制:目录本身需允许所有人读取(含执行权限以进入),但写权限严格限定给特定用户或组;同时必须启用默认 ACL,确保新上传文件自动继承只读属性,防止误设可写文件破坏安全边界。
1. 目录基础权限与属主属组设定
先明确角色归属:创建专用系统组(如 pubmgr),将所有发布专员加入该组;目录属组设为 pubmgr,属主可设为 root 或运维管理账号(不直接用于发布)。
- 设置目录权限为 755(
rwxr-xr-x):保证所有人可进入(x)、列出内容(r)、读取文件(r) - 执行:
chown :pubmgr /var/www/public&&chmod 755 /var/www/public
2. 配置当前 ACL 限定写入权限
ACL 不替代基础权限,而是叠加精细化控制。只允许 pubmgr 组对目录有写+执行权(即创建/删除/重命名),其他用户保持只读。
- 运行:
setfacl -m g:pubmgr:rwx /var/www/public - 确认无其他用户或组被意外赋予 w 权限(可用
getfacl /var/www/public检查)
3. 启用 default ACL 确保新文件默认只读
这是最容易被忽略却最关键的一环——若不设默认 ACL,发布专员上传的 HTML、JS 文件可能默认带 644 权限,虽不能改,但若含敏感信息仍会被任意读取;更严重的是,若误传可执行脚本(如 .sh),可能被恶意调用。
- 启用继承:
setfacl -d -m g:pubmgr:rx /var/www/public - 同时限制其他用户默认无任何权限:
setfacl -d -m o::r-- /var/www/public(或更保守地设为o::---,依赖 umask 补充) - 验证:
getfacl /var/www/public应显示default: group:pubmgr:r-x和default: other::r--
4. 发布流程加固建议
ACL 是静态控制,还需配合操作规范防人为失误:
- 发布专员应使用专用账号登录,该账号 不设 shell 登录权限(
/sbin/nologin),仅用于 FTP/SFTP 或 CI 工具推送 - CI/CD 脚本中强制指定
umask 022,避免本地环境 umask 过宽导致文件权限失控 - 定期扫描:
find /var/www/public -type f ! -perm -444,及时发现非标准读权限文件











