关键进程权限加固核心是精准约束:为nginx等服务设user=www-data,启用protectsystem=strict、nonewprivileges=yes、readwritepaths指定可写路径,并验证配置文件权限、服务状态及实际行为可用性。

关键进程的权限环境加固,核心是让进程“只拿该拿的权、只读该读的文件、只连该连的端口”,不是统一降权,而是按角色精准约束。
识别哪些进程必须受控
不是所有进程都值得投入精力——优先锁定三类高危目标:
- 以 root 启动但实际不需要 root 权限的服务:比如 Nginx、PostgreSQL、Redis 默认常以 root 启动后再 drop 权限,若配置错误或版本缺陷,可能残留能力;
- 监听公网端口的长期运行进程:如 sshd、httpd、node.js 主服务进程,它们是攻击链起点;
- 直接操作敏感路径的进程:例如备份脚本访问 /etc/shadow、日志轮转程序写入 /var/log/auth.log、定时任务执行 chmod 命令等。
用 systemd 服务单元做最小权限封装
避免直接用 root 运行,改用 systemd 的细粒度权限控制机制:
- 设置 User= 和 Group=(如 nginx.service 中设 User=www-data);
- 禁用继承能力:NoNewPrivileges=yes 阻止 fork 后提权;
- 限制文件系统视图:ProtectSystem=strict 挂载 /usr、/boot、/etc 为只读;
- 屏蔽危险系统调用:RestrictSUIDSGID=true + RestrictNamespaces=true;
- 指定允许访问的路径:ReadWritePaths=/var/log/nginx /run/nginx.pid,其余默认拒绝。
检查并清理进程实际所需的文件权限
进程能否读写某文件,取决于它运行时的 uid/gid 和文件权限的匹配结果,而非“看起来应该能”:
- 用 ps -eo pid,user,group,args | grep nginx 查清真实运行身份;
- 用 find /etc/nginx -type f ! -user www-data -o ! -group www-data 2>/dev/null 找出配置文件归属异常项;
- 确保证书私钥(如 /etc/nginx/ssl/key.pem)权限为 600、属主为 www-data 或专用密钥用户;
- 禁止进程所在组对关键配置有写权限——比如 /etc/nginx/conf.d/*.conf 若属组可写,攻击者可通过提权后的同组账户篡改。
验证权限收缩后服务是否仍可用
加固不是目的,可用才是底线。每次调整后必须验证:
- 重启服务:systemctl restart nginx;
- 检查状态:systemctl status nginx(重点看 Failed 或 Permission denied);
- 模拟进程视角:sudo -u www-data ls -l /etc/nginx/nginx.conf 看是否可读;
- 触发实际行为:curl 本地接口、reload 配置、上传文件测试写权限路径;
- 查日志:journalctl -u nginx -n 50 --no-pager,过滤 “Permission denied”、“open() failed” 类错误。
不复杂但容易忽略——进程权限基线不是设完就结束,而是要和它的配置文件、数据目录、临时路径形成闭环约束。











