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


21

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

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


2
单位文件的外观如何,将其添加到您的问题中?通常systemd,以root权限运行单元文件。
托马斯

Answers:


31

告诉systemd使用来运行服务sudo

sudo 与它无关。

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

将它们设置为root(或删除它们,因为默认情况下以root运行)。


我已经将其设置为使用特定用户,就像使用指南进行配置一样。但是对于我来说,这是不合适的。我删除了它以默认情况下以root身份运行,现在一切正常!
路加福音

2
以root身份运行与用root运行并不完全相同User=root。看我的答案。
马克·斯托斯伯格'18

该文件在哪里可以编辑?
马修


15

要清除的是,systemd系统服务默认情况下以root用户身份运行,但是默认行为与使用运行系统服务之间仍然存在差异User=root

在生成的进程中的环境变量中所述,只有设置以下变量,才设置这些变量User=

$USER, $LOGNAME, $HOME, $SHELL

我测试以确认这一发现。因此,如果要作为root用户运行systemd服务,并且需要上述变量之一,则需要设置User=root


谢谢!那是对我所拥有的应用程序唯一起作用的东西
Pedro Torres

注意:如果您设置User = root,您可能还应该设置Group = root :) superuser.com/a/1452367/39364
rogerdpack

2

临时解决方案,但在紧急情况下起作用:

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

可以与在systemd单元文件中具有sudo特权的用户一起运行,如下所示:

[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

这有多个问题:首先,前两个答案说明了为什么不需要使用用户然后再使用sudo的原因,并显示了正确的使用方法。其次,无论如何您都不应该以root用户身份运行Webapp。第三,您的Web应用程序应位于常规Web服务器(如Nginx)之后。
迈克尔·汉普顿

对于您的任何观点,我都不会不同意。但是,如果像我这样的人想要一个准系统,尽可能快地支持服务器,这是一个可行的选择。
daino3

几乎可以尽快。显然,使用sudo会降低启动速度。这是没有必要的。
迈克尔·汉普顿

@MichaelHampton我正在尝试编写后门,因此我发现此答案很有帮助!
P. Soutzikevich

1

默认情况下,以系统用户身份运行该服务,该服务以root用户身份运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.