【问题标题】:Why start-stop-daemon needs privileges?为什么 start-stop-daemon 需要特权?
【发布时间】:2014-10-25 21:58:31
【问题描述】:

我正在编写一个守护程序,我想使用 start-stop-daemon 命令来执行它,但是当我在命令行中使用它时,我得到:

The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
start-stop-daemon: command not found

但是当我将它与 sudo 一起使用时,它运行完美,但我需要它在守护进程中运行,我认为在守护进程的 bash 脚本中使用 sudo 并不好:

sudo start-stop-daemon --start --background ...

不是吗?当我从中删除 sudo 时,它给了我找不到命令。我该如何解决?如果在守护进程中使用 sudo 是错误的。

【问题讨论】:

  • 您可能需要解释您希望该命令做什么......例如,您要启动什么守护程序,以及您希望拥有它的用户。
  • 我希望它能运行一个程序
  • 如果你有一个守护进程可以在完全无特权的情况下做一些有用的事情,你为什么要使用start-stop-daemon?
  • 帮助你不容易吧?
  • @ams 不,我正在尝试基于 cmets 和答案的不同解决方案。这就是我回复晚的原因。

标签: linux shell daemon


【解决方案1】:

start-stop-daemon也可以设置守护进程的用户ID。

也就是说,您通常会使用来自 /etc/rc.d 中的脚本的 start-stop-daemon,该脚本以 root 权限运行,来自本周使用的 init 系统 (sysvinit , upstart, systemd, ...) 和/或来自service(8) 命令。

因此,如果用户应该能够启动/停止服务(这是一种相当少见的情况),您可以使用 sudoers 文件授予他们对 service 命令的访问权限,名称为您的服务作为强制性的第一个参数。

不过,一般来说,编写您的服务,以便它可以在启动时或安装期间简单地启动,并且只要它正在运行,用户就可以使用它。如果用户需要能够启动和停止服务的实例,那么你的守护进程是在管理实例的业务,并且实例管理器应该持续运行,然后用户通过套接字联系这个服务(所以用户不要'根本不需要sudo,这将使许多不安装sudo 的管理员的生活更轻松)。

【讨论】:

    【解决方案2】:

    这取决于您在“/etc/sudoers”中的设置。

    如果环境被重置(默认), 以下路径定义 'secure_path' 包含 /sbin(摘自 Ubuntu '/etc/sudoers'):

    Defaults        env_reset
    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    

    否则需要提供完整的程序路径

    /sbin/start-stop-daemon
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 2016-07-03
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多