如何完全以非root用户身份运行服务?

如何完全以非root用户身份运行服务?

我正在尝试运行一个应用程序(代码服务器) 作为sudo用户。此应用程序基本上允许我在线运行 Visual Studio Code。我创建了以下服务文件:(vsc.service

[Unit]
Description=Running Visual Studio Code Online

[Service]
User=dev001
Group=dev001
WorkingDirectory=/home/dev001/projects
Type=simple
ExecStart=/usr/bin/sudo /usr/bin/vsc.sh

[Install]
WantedBy=multi-user.target

如您所见,服务文件包含用户和组信息。

这是我想要作为服务运行的脚本(/usr/bin/vsc.sh

cd /home/dev001/projects
code-server -p 80 --allow-http --password somepassword

它运行良好,但问题是运行该进程的用户仍然保持为 root,但以 dev001 的身份工作。这是通过正在运行的服务进行终端访问的屏幕截图:

vscode 终端窗口截图

如果您对该问题有任何解决方案,请帮助我。

编辑01:

我利用 nginx 的帮助进行了端口转发(反向代理)以解决该问题,直到 code-server 成熟并具有直接在端口 80 或 443 上运行的守护进程支持。我使用这种方法获得的一个好处是,我能够安装 letsencrypt ssl。所以我的环境正在按我需要的方式运行。还有其他问题,但它们与此线程无关。

答案1

您的屏幕截图有什么相关性?您显示的是 shell 的用户和目录。我可能误解了,但我认为这里存在一些混淆。

您拥有的 SystemD 服务应在您以用户身份启动机器时启动。您可以使用或或类似命令dev001找到它。这里的关键不是查看您的 shell,而是查看实际进程的所有者。systemctlps aux | grep vsc.sh

sudo systemctl enable vsc.service
sudo systemctl start vsc.service
sudo ps aux | grep vsc

您应该看到您的服务正在由文件中设置的用户运行vsc.service

相关内容