将 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/id
或 ExecStart=/usr/bin/whoami
(请注意程序的路径可能因您而异)
Systemd 默认以 root 身份启动 ExecStart=
中所述的可执行文件。
但是,如果您在服务文件中指定了 User=
或 Group=
来覆盖默认值,并且仍然需要 运行 需要 sudo
的可执行文件,请在前面加上带有您 sudo
位置的绝对路径的命令:
...
ExecStart=/usr/bin/sudo /usr/bin/nodejs /var/www/bin/app.js
...
我正在尝试让一个 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/id
或 ExecStart=/usr/bin/whoami
(请注意程序的路径可能因您而异)
Systemd 默认以 root 身份启动 ExecStart=
中所述的可执行文件。
但是,如果您在服务文件中指定了 User=
或 Group=
来覆盖默认值,并且仍然需要 运行 需要 sudo
的可执行文件,请在前面加上带有您 sudo
位置的绝对路径的命令:
...
ExecStart=/usr/bin/sudo /usr/bin/nodejs /var/www/bin/app.js
...