以非特权用户身份运行守护程序

以非特权用户身份运行守护程序

我正在尝试在我的 Ubuntu VPS 上设置 Thin Ruby 应用程序服务器。我创建了一个特定的帐户,在其下安装了 rbenv 以及所有 gem。

我正在寻找一种便捷的方法来实现以下目标:

  1. 在我的非特权用户帐户下运行我的 Thin Rack 应用程序。
  2. 使应用程序作为守护进程运行
  3. 让守护进程在系统启动时自动运行
  4. 使守护进程可重新启动
  5. 使 Nginx 通过 unix 域套接字访问应用程序。

目标二和目标三是最棘手的。是否可以为用户定义脚本,以便在系统启动时以该用户身份运行?

答案1

要在启动时启动,请在您的用户 crontab 文件中添加一行(使用crontab -e):

带参数的 @reboot /path/to/your/script

该脚本的实际内容根据您的需要而有所不同。它可能只是启动守护进程,或者可能启动一个您传递配置的更智能的代理。这样,如果服务由于某种原因意外终止,您可以自动重新启动服务。

答案2

您只需要调整发行版的启动脚本模板即可。相信每个人都有这样的模板。

如果您使用 systemd,那么您可以指定要在单元文件中使用的用户。

如果您使用旧的初始化脚本,那么该脚本可能使用startprocstart_daemon。您可以向这些包装器添加参数以配置用户 ID。

或者您将程序设置为 SUID(不是针对 root 用户,而是针对目标用户)并将执行权限限制为受信任的用户(或仅限 root 用户)。

相关内容