在 systemd 服务单元文件的 [service] 段中设置 user 和可选 group 字段,可指定服务运行身份;需提前创建用户、配置目录权限,修改后执行 daemon-reload 并 restart 服务验证生效。

直接在 systemd 服务单元文件的 [Service] 段中设置 User 和可选的 Group 字段,就能让服务以指定用户身份运行。
修改服务的 .service 文件
找到对应服务的 unit 文件,通常位于 /etc/systemd/system/(自定义服务)或 /usr/lib/systemd/system/(系统自带服务)。用文本编辑器打开,例如:
- 确认服务已停用:
sudo systemctl stop myapp.service - 编辑文件:
sudo nano /etc/systemd/system/myapp.service - 在
[Service]段内添加或修改两行:
[Service] User=webuser Group=webgroup ExecStart=/usr/bin/python3 /opt/myapp/app.py
若只需指定用户,Group 可省略;用户必须已存在,且对服务所需路径有读写执行权限。
确保用户和权限就绪
systemd 不会自动创建用户,需提前配置好运行账户:
- 创建专用用户(不设登录 shell,增强安全性):
sudo useradd --shell /usr/sbin/nologin --home-dir /var/lib/myapp webuser - 设置服务目录归属:
sudo chown -R webuser:webgroup /var/lib/myapp /opt/myapp - 检查关键路径权限,特别是日志、PID 文件、配置文件所在目录
重载配置并验证生效
保存修改后,必须重新加载 systemd 配置才能使变更生效:
- 重载单位定义:
sudo systemctl daemon-reload - 重启服务:
sudo systemctl restart myapp.service - 验证进程属主:
ps -eo pid,user,comm,args | grep myapp或sudo systemctl status myapp.service查看 “Main PID” 对应的 USER 列
区分系统服务与用户服务
如果服务仅需当前登录用户运行(非开机即启、不依赖系统级资源),可放在用户级 systemd 中:
- 服务文件路径改为:~/.config/systemd/user/myapp.service
- 启用时加
--user参数:systemctl --user enable --now myapp.service - 注意:需开启用户 session 的 linger:
sudo loginctl enable-linger $USER,否则 reboot 后服务不自动启动











