生产环境目录权限必须遵循最小权限原则:分离角色、隔离数据、限制执行、禁用全局可写;主目录归属专用用户,结构分bin/(750)、conf/(640)、data/logs/(750);Web根目录设750,静态文件640,上传目录770并禁脚本解析;系统目录需定期校验;权限配置须自动化管控与持续校验。

生产环境的目录权限必须严格遵循最小权限原则——只给用户或进程完成任务所必需的最低权限,不额外开放读、写、执行中的任何一项。核心思路是:分离角色(管理员、应用用户、服务账户)、隔离数据(配置、代码、日志、上传)、限制执行(非必要不设x)、禁用全局可写(尤其/var/www、/opt/app等)。
应用主目录(如 /opt/myapp)
应归属专用运行用户(如 appuser:appgroup),禁止 root 直接拥有。结构建议分三级:
- bin/:仅 appuser 可读可执行(750),禁止写入;脚本需静态检查无硬编码敏感信息
- conf/:仅 appuser 可读(640),禁止组和其他人写入与执行;配置文件中密码类字段应外置或由密钥管理服务注入
- data/ 和 logs/:appuser 可读写(750),但禁止执行权限;logrotate 配置需确保归档后权限仍为 640
Web 根目录(如 /var/www/myapp)
Web 服务器(如 nginx)以 www-data 或 nginx 用户身份运行,该用户仅需读取静态资源和进入目录,无需写入或执行能力:
- 目录本身设为 750,属主为部署用户(deploy),属组为 www-data
- HTML/CSS/JS 等静态文件统一设为 640,禁止组和其他人执行
- 上传目录(如 uploads/)必须单独挂载、独立属组(如 www-data:uploadgroup),权限 770,并在 Web 服务器中限制脚本解析(如 nginx 中 deny .php$)
系统关键目录的加固要点
/etc、/usr、/bin 等系统路径默认权限已较严格,但生产中易被误改,需重点盯防:
- /etc/shadow、/etc/passwd:保持 644 和 600,定期用 stat 检查;避免将应用配置混入 /etc 下未受控子目录
- /var/log:属主 root:syslog,日志文件 640,轮转后自动重设权限;应用日志不应直接写入 /var/log,而走 journal 或专用目录
- /tmp 和 /var/tmp:启用 sticky bit(1777),防止用户删他人文件;对容器化部署,建议挂载 tmpfs 并设 nosuid,noexec
自动化与持续校验机制
人工设置易遗漏,需嵌入运维流程:
- 使用 Ansible playbook 或 Puppet manifest 统一声明权限,禁止手工 chmod/chown
- 在 CI/CD 流水线中加入权限扫描步骤(如用 open-scap 或自定义 find 命令检查 world-writable 目录)
- 每日定时任务校验关键路径(如 /opt/myapp/conf/**、/var/www/myapp)权限是否漂移,异常时告警并自动回滚










