配置 Systemd 服务以 root 访问权限运行

配置 Systemd 服务以 root 访问权限运行

我在 Raspbian Jessie 上用 Systemd 设置了一个 node.js 应用程序形式的服务,它使用自己的用户帐户。但是,我发现该服务无法正常运行,因为它没有必要的权限。我安装的一个节点模块需要 root 访问权限。如果我使用 sudo 手动运行该应用程序,一切都会正常进行。

有没有办法告诉 systemd 使用 sudo 运行该服务?

答案1

sudo告诉 systemd 使用?来运行服务

sudo与此无关。

通常,您可以使用单元文件部分中的User=andGroup=指令指示 systemd 以特定用户/组的身份运行服务。[Service]

将它们设置为 root(或者删除它们,因为以 root 身份运行是默认设置)。

答案2

需要明确的是,systemd系统服务默认以 root 身份运行,但是默认行为和使用 运行系统服务之间仍然存在差异User=root

正如记录的那样衍生进程中的环境变量User=,仅当设置了时才会设置这些变量:

$USER, $LOGNAME, $HOME, $SHELL

我进行了测试以确认这一发现。因此,如果您想以 root 身份运行需要上述变量之一的 systemd 服务,则需要设置User=root

答案3

这是一个临时的解决方案,但在紧急情况下却能发挥作用:

/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'

可以以具有 sudo 权限的用户身份在 systemd 单元文件中运行,如下所示:

[Unit]
Description=Rails Webserver
After=syslog.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target

答案4

在这种情况下,以系统用户身份运行它,默认情况下,服务以 root 身份运行。

相关内容