守护进程安全加固的核心是降权与隔离:创建专用低权限用户、用能力机制替代root绑定端口、限制文件系统访问、隔离临时环境与进程视图。

守护进程安全加固的核心,是让服务以尽可能低的权限运行,同时严格约束它能访问哪些文件。不是“能不能跑起来”,而是“即使被攻破,能造成多大破坏”。
创建专用低权限用户运行服务
绝不要用 root 直接启动守护进程。每个服务都应有独立身份:
- 用
useradd -r -s /bin/false serviceuser创建无登录能力的系统用户 - 在 systemd unit 文件中明确指定:
User=serviceuser和Group=serviceuser - 确保该用户不在
wheel、sudo或其他特权组中 - 检查其家目录不存在或为空,shell 设为
/sbin/nologin
用能力机制替代 root 绑定低端口
需要监听 80 或 443 端口时,不必给整个进程 root 权限:
- 在 service 文件中添加:
CapabilityBoundingSet=CAP_NET_BIND_SERVICE - 配合
AmbientCapabilities=CAP_NET_BIND_SERVICE,使能力在子进程中保留 - 移除其他高危能力,例如:
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE - 验证方式:
getcap /path/to/binary应显示仅含所需能力
限制文件系统访问范围
防止进程读取或篡改无关路径,尤其是敏感配置和用户数据:
- 启用
ProtectSystem=strict:把/usr、/boot、/etc挂为只读 - 启用
ProtectHome=true:屏蔽/home、/root、/run/user - 显式声明可写路径:
ReadWritePaths=/var/log/service /var/cache/service - 对关键目录设权限:
chown -R serviceuser:serviceuser /var/log/service,chmod 750 /var/log/service
隔离临时环境与进程视图
减少通过共享资源(如 /tmp)或 /proc 泄露信息或发起攻击的机会:
- 启用
PrivateTmp=true:为进程分配独立的/tmp命名空间 - 启用
PrivateDevices=true:隐藏/dev/kvm、/dev/mem等危险设备节点 - 启用
ProcSubset=pid:使/proc下只显示本进程及其子进程 - 添加
NoNewPrivileges=true:阻止 execve 后提权,封堵 setuid 二进制利用路径











