服务账号管理核心是“各干各的活、只拿该拿的权”,需创建专用系统账户(如useradd -r -s /sbin/nologin -m -u myservice),禁用登录与密码,严格限制文件权限、capabilities、selinux/apparmor策略,禁止root运行,并通过日志、审计和定期巡检持续验证。

管理服务器服务账号,核心是让每个服务“各干各的活、只拿该拿的权”,不越界、不共享、不留后门。不是给个普通用户就完事,更不能让服务跑在 root 下——那是把大门钥匙直接焊死在黑客手里。
为每个服务创建专用系统账户
服务账号必须和人用的账号分开,且默认不能登录、没有家目录、不配密码。常用命令如下:
- useradd -r -s /sbin/nologin -M -U myservice:-r 表示系统用户,-s /sbin/nologin 禁止交互登录,-M 跳过创建家目录,-U 自动建同名主组
- 确认账号已创建:id myservice,查看 UID 和所属组
- 检查 /etc/passwd 中该用户 shell 是否为 /sbin/nologin,/etc/shadow 中密码字段是否为 *(表示禁用密码登录)
严格限制服务可访问的资源
账号建好了只是第一步,还要管住它能碰什么、能干什么:
- 文件与目录权限:配置文件、数据目录、日志路径全部归属该服务用户,权限设为 750(目录)或 640(文件),禁止 world 可读写
- Capability 精简:在 systemd 服务单元文件中使用 CapabilityBoundingSet= 限定能力,例如只允许绑定端口:CapabilityBoundingSet=CAP_NET_BIND_SERVICE,禁用 CAP_SYS_ADMIN 等高危能力
- SELinux 或 AppArmor 策略:启用强制访问控制,定义服务只能读自身配置、写指定日志路径、监听特定端口,即使被提权也无法越界
禁止 root 运行服务,禁用远程 root 登录
这是最基础也最容易被忽视的安全红线:
- 编辑 /etc/ssh/sshd_config,设置 PermitRootLogin no,然后执行 sudo systemctl restart sshd
- 检查服务进程实际运行身份:ps aux | grep myservice,确保 USER 列显示的是 myservice,不是 root
- 若已有服务以 root 启动,需修改其 systemd 单元文件中的 User= 和 Group= 字段,并重载配置:sudo systemctl daemon-reload && sudo systemctl restart myservice
配合审计与持续验证
权限不是设完就一劳永逸,得有人盯着、定期查:
- 用 sudo journalctl -u myservice 查看服务日志,确认无权限拒绝报错(如 “Permission denied”)
- 用 sudo auditctl -w /etc/myservice/ -p wa 监控关键配置目录的读写行为
- 每季度执行一次权限巡检:find /opt/myservice /var/lib/myservice -not -user myservice -ls,找出归属异常的文件











