systemd服务依赖的用户必须是系统用户,即UID在1–999范围内且Shell为/usr/sbin/nologin等禁用登录的账户,需用useradd -r -s /usr/sbin/nologin创建,并手动补建同名系统组以确保权限正确。

直接用 useradd,但必须加 -r 参数,否则创建的是普通用户,不是系统用户。
systemd 服务依赖的用户必须是系统用户
比如你写了个自定义 systemd service,User= 配置项里填了 myapp,启动时会报 Failed at step USER spawning —— 因为 myapp 用户没被识别为系统用户,/etc/passwd 里 UID 小于 1000 才会被 systemd 视为合法系统账户。
-
useradd -r会自动分配 UID 在 1–999 范围(具体取决于系统配置,Ubuntu 默认从 999 往下找空闲值) - 不加
-r的useradd默认从 1000 起分配 UID,哪怕你手动指定-u 99,也不代表它具备系统用户语义;只有-r才触发完整系统用户初始化流程 -
adduser命令不支持创建系统用户,强行用会失败或创建出 UID 合理但属性缺失的“假系统用户”
创建时必须显式禁用交互和登录能力
系统用户不该有密码、家目录、Shell 或登录权限,否则既不安全也违背设计意图。默认 useradd -r 仍可能分配 /bin/sh 作为 Shell,需手动覆盖:
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 用
-s /usr/sbin/nologin或-s /bin/false禁用登录(推荐前者,更明确) - 不要加
-m:系统用户不需要家目录;加了反而会在 /home 下留空目录,还可能触发 skel 文件复制 - 避免
-p设置密码;如需认证(如 ssh 密钥登录),应走专用机制,而非系统用户密码 - 示例命令:
sudo useradd -r -s /usr/sbin/nologin -c "My app service account" myapp
/etc/passwd 条目必须符合 systemd 认可格式
创建后检查 cat /etc/passwd | grep myapp,确认输出中:
- 第三字段(UID)是 1–999 之间的数(如
998) - 第四字段(GID)对应一个同名系统组(
myapp:x:998:),或至少是已存在的系统组 GID - 第六字段(家目录)通常是
/或/nonexistent,不是/home/myapp - 第七字段(Shell)是
/usr/sbin/nologin或/bin/false,不是/bin/bash或空 - 如果发现 UID ≥ 1000 或 Shell 是
/bin/sh,说明创建时漏了-r或-s,需usermod修正或删掉重来
最容易被忽略的是:系统用户创建后不会自动建同名组,-r 只保证 UID 范围,组仍需手动处理;若服务需要文件属主权限,得补一句 sudo groupadd -r myapp 再 sudo usermod -g myapp myapp。

















