为什么start-stop-daemon需要特权?

时间:2014-09-01 16:21:32

标签: linux shell daemon

我正在编写一个守护进程,我想使用 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时它运行完美但我需要它在守护进程中运行我认为在守护进程中使用sudo在bash脚本中是不好的:

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

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

2 个答案:

答案 0 :(得分:1)

这取决于您在' / etc / sudoers'。

中的设置

如果重置环境(默认), 以下路径定义' secure_path' contains / 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

答案 1 :(得分:1)

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

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

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

一般情况下,编写服务以便可以在启动时或安装期间简单地启动,并在用户运行时使用。如果用户需要能够启动和停止服务实例,那么您的守护程序处于管理实例的业务中,并且实例管理器应该持续运行,然后用户通过套接字联系此服务(因此用户不要完全需要sudo,这会使许多不安装sudo的管理员的生活变得更加轻松。