标准答案

  1. 服务账户应只拥有读取配置、写入必要目录和绑定所需资源的权限,数据目录与代码目录分离。
  2. 需要低端口、原始网络或特定设备时,优先使用 capability、代理或启动阶段特权后降权,而不是整个服务保持 root。
  3. 还要限制工作目录、环境变量、子进程、网络出口和可写路径,避免攻击者利用可写代码或配置提权。
  4. 改成非 root 后应验证日志、证书、临时目录、socket、升级和优雅停机等完整流程。

题目解析

非 root 运行把进程的默认文件、设备和系统管理权限降到服务真正需要的范围,能够降低命令注入、依赖漏洞或路径穿越被利用后的影响。但它不是完整沙箱;Linux capabilities、setuid 文件、可写目录、容器配置、SELinux/AppArmor 和内核漏洞仍可能改变边界。

迁移时应先列出实际访问清单:配置和证书读取、日志和数据写入、Unix socket、低端口、子进程和设备。把代码目录设为只读,把数据和临时目录单独授权;需要特权的动作交给代理或启动阶段完成后降权,并验证升级、轮转和停机流程。

常见误区

  • 误区:为了启动方便一直使用 root。改正:建立专用服务账户,按实际文件、网络和设备需求授予最小权限。
  • 误区:只改 User 字段。改正:同时检查可写目录、Secret、capability、子进程、socket 和强制访问控制。

作者信息