守护进程安全加固需遵循权限最小化原则:创建专用低权限用户、用CAP_NET_BIND_SERVICE替代root绑定低端口、ProtectSystem=strict和ProtectHome=true限制文件访问、CapabilityBoundingSet禁用危险能力、seccomp-bpf过滤系统调用、PrivateTmp=true等隔离环境,并重启服务验证。

守护进程(Daemon)在Linux系统中以非交互方式长期运行,常承担关键服务功能。权限最小化是其安全加固的核心原则——即仅授予完成任务所必需的权限,避免以root身份过度运行,降低被提权或横向渗透的风险。
明确进程运行身份,禁用root直接执行
绝大多数守护进程无需root权限即可工作。应为每个服务创建专用低权限用户(如nginx、redis),并通过User和Group指令在systemd unit文件或启动脚本中强制指定:
- 编辑/etc/systemd/system/myapp.service,添加:
User=myapp
Group=myapp - 确保该用户无登录Shell(/sbin/nologin)、无家目录、不属wheel或sudo组
- 若进程需绑定低端口(如80/443),改用CAP_NET_BIND_SERVICE能力替代root身份:
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
限制文件系统访问范围
通过命名空间与路径约束,防止进程读写无关路径:
- 启用ProtectSystem=strict:挂载/usr、/boot、/etc为只读
- 使用ProtectHome=true屏蔽/home、/root、/run/user
- 对必须写入的目录(如日志、缓存),显式声明:
ReadWritePaths=/var/log/myapp /var/cache/myapp - 必要时启用RestrictSUIDSGID=true,阻止进程设置SUID/SGID位
收紧系统调用与资源能力
利用seccomp-bpf过滤非必要系统调用,结合capability机制剥离特权:
- 默认禁用危险能力:
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_MODULE CAP_SYS_PTRACE CAP_SYS_BOOT CAP_AUDIT_WRITE - 按需保留最小集合,例如日志服务可保留CAP_SYSLOG,网络服务保留CAP_NET_BIND_SERVICE
- 启用SystemCallFilter=@system-service(预定义白名单),或自定义seccomp策略文件(JSON格式)并用SystemCallFilter=@myfilter引用
- 添加NoNewPrivileges=true,禁止进程通过execve提升权限
隔离运行环境,阻断隐式攻击面
借助cgroup v2与namespace实现深度隔离:
- 启用PrivateTmp=true:为进程分配独立/tmp,避免临时文件竞争
- 启用PrivateDevices=true:隐藏/dev下敏感设备节点(如/dev/kvm、/dev/mem)
- 启用ProcSubset=pid:使/proc仅显示本进程及子进程信息
- 设置内存与CPU限制:
MemoryMax=512M
CPUQuota=50%
实际加固需结合服务特性逐项验证——修改unit配置后务必执行systemctl daemon-reload && systemctl restart myapp,并检查journalctl -u myapp -f确认无权限拒绝日志。不复杂但容易忽略。










