守护进程应以专用低权限用户运行并精准赋权:创建-r -s /sbin/nologin -M系统用户,配置User/Group、CapabilityBoundingSet=CAP_NET_BIND_SERVICE、ProtectSystem=strict、PrivateTmp=true等限制项,并reload重启验证。

让守护进程以低特权身份运行,不是“降权”而是“精准赋权”——去掉它不需要的一切,只留完成任务所必需的最小能力。核心不是避免root,而是不让root成为默认选项。
创建并绑定专用低权限用户
每个守护进程都该有自己独立的系统用户,不能共用、不能登录、不能提权:
- 用
sudo useradd -r -s /sbin/nologin -M myapp创建系统级用户(-M确保不建家目录) - 确认该用户不属于
wheel、sudo或任何特权组:groups myapp - 在 systemd service 文件中强制指定:
[Service]<br>User=myapp<br>Group=myapp
- 同步修正关键路径所有权:
sudo chown -R myapp:myapp /var/log/myapp /var/cache/myapp
用能力机制替代 root 绑定低端口
监听 80/443 不再是 root 的特权,而是可精确授予的能力:
- 在 unit 文件中添加:
CapabilityBoundingSet=CAP_NET_BIND_SERVICE<br>AmbientCapabilities=CAP_NET_BIND_SERVICE
- 禁用其他高危能力:
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_MODULE CAP_SYS_PTRACE CAP_AUDIT_WRITE - 切勿用
setcap直接给二进制加能力——会绕过 systemd 的约束和审计链路
限制文件系统可见性与写入范围
防止进程读取敏感配置、写入系统路径或利用 SUID 提权:
- 启用严格只读保护:
ProtectSystem=strict(挂载/usr、/boot、/etc为只读) - 屏蔽用户空间:
ProtectHome=true(隐藏/home、/root、/run/user) - 显式放开必要路径:
ReadWritePaths=/var/log/myapp /var/cache/myapp - 禁用 SUID/SGID 执行:
RestrictSUIDSGID=true
收紧系统调用与运行环境
从内核层压缩攻击面,让进程即使被劫持也难做坏事:
- 启用临时空间隔离:
PrivateTmp=true PrivateDevices=true ProcSubset=pid - 禁止新特权:
NoNewPrivileges=true - 启用系统调用白名单:
SystemCallFilter=@system-service(或引用自定义 JSON 策略) - 修改完立即生效:
sudo systemctl daemon-reload && sudo systemctl restart myapp,再用systemctl show myapp | grep -E "(User|Capability|Protect|Private)"核对配置是否落地
不复杂但容易忽略细节。

















