核心是创建专用低权限系统用户并配合能力限制、文件系统隔离与运行时约束;需在[service]段设user=/group=、禁用登录shell、启用privatetmp=true/protectsystem=strict/nonewprivileges=true及capabilityboundingset精准授权。

为 systemd 服务配置基于账号的安全隔离,核心是避免用 root 运行服务,改用专用低权限用户,并辅以能力限制、文件系统隔离和运行时约束。这不是简单改个 User= 字段,而是一套组合策略。
指定专用服务用户与组
在 service 文件的 [Service] 段中明确声明运行身份:
- 使用 User= 和 Group= 指向一个仅用于该服务的系统用户(如
nginx、redis),而非普通用户或 root - 确保该用户 shell 设为
/sbin/nologin或/usr/sbin/nologin,禁用交互式登录 - 服务用户不应有家目录(除非必要),且其 UID/GID 应落在系统保留范围(通常 1–999)
启用最小能力集替代 root 权限
当服务需执行特权操作(如绑定 80/443 端口、调整时间、加载模块)时,不提升整个进程权限,而是授予精确能力:
yuanfang-skills 的共享设计系统,提供 token CSS 变量、12+ 主题以及可复用的布局类型 HTML 块,供 yuanfang-html-image(以及 fu...)使用。
- 绑定低端口:添加
CAP_NET_BIND_SERVICE,配合CAPABILITYBOUNDINGSET=CAP_NET_BIND_SERVICE和AmbientCapabilities=CAP_NET_BIND_SERVICE - 禁止获取新权限:
NoNewPrivileges=true阻止 setuid/setgid 生效 - 按需启用其他能力(如
CAP_SYS_TIME仅用于 NTP 服务),避免滥用ALL
强化运行时环境隔离
限制服务可访问的资源范围,缩小攻击面:
-
PrivateTmp=true:为服务提供独立的/tmp和/var/tmp,防止临时文件冲突或越权读写 -
ProtectSystem=strict:挂载只读的/usr、/boot、/etc,阻止篡改系统文件 -
ProtectHome=true:隐藏所有用户家目录(/home、/root) -
ReadOnlyPaths=或InaccessiblePaths=可进一步屏蔽敏感路径(如/proc/kcore)
验证与调试要点
配置后务必验证是否真正生效:
- 重启服务后运行
ps -o user,group,capability -p $(pgrep -f nginx)查看实际 UID、GID 和已启用能力 - 用
systemctl show nginx.service | grep -E "(User|Group|Capability|Protect)"核对 unit 解析值 - 尝试以服务用户身份手动执行命令(如
sudo -u nginx curl http://localhost),确认权限边界符合预期










