生产环境目录权限划分需按角色、生命周期、敏感度物理隔离:统一部署于/opt/{app-name}或/srv/{app-name},禁用/usr/local及家目录;服务账户专用最小化(uid≥1000、无shell);配置与数据解耦,密钥不落地;sudo仅限授权绝对路径脚本。

生产环境的目录权限划分,核心是让每个路径承担明确职责,同时杜绝越权访问和误操作风险。不是简单设个755就完事,而是按角色、生命周期、敏感度做物理隔离和权限收敛。
统一部署路径与刚性目录结构
所有应用必须部署在 /opt/{app-name} 或 /srv/{app-name},禁用 /usr/local 和用户家目录。结构必须严格分层:
-
/opt/myapp/bin/:仅存放可执行文件,权限设为
755,属主为专用用户(如myapp:myapp),禁止组和其他用户写入 -
/opt/myapp/etc/:配置文件目录,权限
644,属组可读但不可写;敏感配置(如密钥)单独抽离,用加密方式加载 -
/opt/myapp/log/:日志目录权限
750,属组可写,由logrotate管理轮转,避免日志撑爆磁盘 -
/var/lib/myapp/:运行时数据(数据库、缓存等),权限
700或更严,仅限服务用户访问
服务账户必须专用且最小化
每个应用启动必须使用独立系统用户,UID ≥1000,禁用 shell 登录(/usr/sbin/nologin)。关键点:
- 不复用
www-data、nginx等通用服务账号,避免横向越权 - 该用户只加入必要附加组(如
myapp-log用于写日志),不加入sudo或docker组 - 进程启动后,检查
ps auxf | grep myapp确认 UID/GID 正确,无 root 残留
配置与数据必须解耦且受控
配置不能硬编码进二进制,也不能放在代码仓库明文提交。推荐做法:
- 配置文件统一放
/opt/myapp/etc/,通过环境变量或启动参数注入动态值(如数据库地址) - 密钥类配置(API Key、TLS 私钥)不落地,改用 Vault 或 KMS 在运行时注入,或挂载为只读 secret volume
- 数据库文件、上传目录等数据路径,必须指向
/var/lib/myapp/或/data/myapp/,禁止写入/tmp或/opt下的非数据目录
sudo 权限只开放必需运维动作
运维人员不直接登录服务账户,也不拥有 root 密码。需通过 sudo 执行有限操作:
- 用
visudo编辑,禁止直接 vim 修改;启用Defaults logfile记录所有 sudo 行为 - 只授权具体脚本,例如:
%ops ALL=(myapp) NOPASSWD: /opt/myapp/bin/reload.sh - 禁用
NOPASSWD: ALL和(ALL) ALL这类高危规则;命令路径必须绝对,禁止通配符 - 重启服务类操作,封装为带健康检查的 wrapper 脚本,失败自动回退,不裸调
systemctl restart
不复杂但容易忽略。











