将 sudo 与 ExecStart (systemd) 结合使用

using sudo with ExecStart (systemd)

我正在尝试让一个 node.js 站点在端口 80 上运行(我正在使用 Digital Ocean)。我在服务文件

中使用 systemd 来执行此操作
...
ExecStart=/usr/bin/nodejs /var/www/bin/app.js
...

在本地主机上,如果我使用 sudo 启动站点,这在端口 80 上工作正常,但在没有 sudo 的情况下。显然你需要 运行 作为 1024 以下端口的 root。

如何在 ExecStart 中启用 sudo?或者我在这里完全走错了路,如果是这样,我如何在端口 80 上获取 express 应用程序?

干杯,迈克

Systemd 默认以 root 身份启动 ExecStart= 中所述的可执行文件。这意味着如果您没有在我们的服务文件中指定 User= 或 Group=,您的二进制文件将以特权启动。

您可以通过启动 id 或 whoami 程序来验证这一点。例如:ExecStart=/usr/bin/idExecStart=/usr/bin/whoami(请注意程序的路径可能因您而异)

Systemd 默认以 root 身份启动 ExecStart= 中所述的可执行文件。

但是,如果您在服务文件中指定了 User=Group= 来覆盖默认值,并且仍然需要 运行 需要 sudo 的可执行文件,请在前面加上带有您 sudo 位置的绝对路径的命令:

...
ExecStart=/usr/bin/sudo /usr/bin/nodejs /var/www/bin/app.js
...