允许非sudo组控制Upstart作业
我正在尝试设置Upstart作业以在系统启动时运行,并且也可以由除sudo
之外的组的成员启动/停止。 在以前的版本中,我使用了update-rc.d
和/etc/init.d/
存储的脚本,通过将%Group ALL = NOPASSWD: /etc/init.d/scriptname
到我的sudoers文件来实现这一点,但是我似乎无法获得与Upstart相同的工作。
我尝试将%Group ALL = NOPASSWD: /sbin/initctl start jobname
到sudoers文件,但尝试运行命令start jobname
会产生以下错误:
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
就我所知,这是一个抱怨我的用户帐户如何没有权力在Upstart的D-Bus配置文件中发送’开始’消息。 我无法真正找到有关如何编辑该文件的任何信息,以授予组访问特定服务的权限 – 这样的选项是否存在? 有没有办法编辑Sudoers文件,以便我可以在不编辑配置文件的情况下运行作业? 我最好坚持以前的版本吗?
您可以从找出特定于Upstart的D-Bus配置的位置开始。 从错误消息中看到destination="com.ubuntu.Upstart"
片段? 现在尝试使用D-Bus配置文件在文件夹中grep它:
vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1 /etc/dbus-1/system.d/Upstart.conf: [...skipped...]
该Upstart.conf
文件包含一些策略示例。 我猜你可以尝试从中找出政策的格式。 然后尝试让您的特定用户只需要它所需的操作。 例如,如:
这应该允许pope_benedict
用户启动该工作。
请注意,’allow’策略属性的值列在原始错误消息中。
我个人在/etc/sudoers.d/jobname_myuser文件中使用以下行:
myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname
如下所述: https : //serverfault.com/a/390723/68608
sudo中不存在这样的选项。
Sysv脚本和Upstart配置文件之间的区别就在于:Sysv脚本本身就是脚本,可执行文件,您可以告诉sudo允许某些组执行它们。 另一方面,Upstart配置文件只是配置文件,而不是可执行文件,因此start
(symlink到initctl
)的执行是sudo允许的。 这里的问题是允许人们运行initctl
,允许他们initctl
所有内容。
如果您只关注一项工作,解决方案就很简单了。 制作一个脚本,比如说/usr/bin/jobname.sh
#!/bin/sh initctl $1 jobname
然后chmod 755 /usr/bin/jobname.sh
并最终将该可执行文件添加到你的sudoers文件中:
%Group ALL = NOPASSWD: /usr/bin/jobname.sh
这样,每个人都可以调用jobname.sh start
或jobname.sh stop
来控制这个特定的工作。 您可能需要添加一些检查以仅允许start
和stop
参数等。
如上所述,dbus守护程序有一个配置文件,专门用于特定应用程序。
ls /etc/dbus-1/system.d/ avahi-dbus.conf bluetooth.conf ... Upstart.conf wpa_supplicant.con
配置文件还会建立资源限制,安全性参数等。
有关详细信息,请参阅dbus-daemon-1(1) – Linux手册页
要允许组启动/停止Upstart作业,请将以下策略添加到/etc/dbus-1/system.d/Upstart.conf
在更改默认策略之前,您应该考虑此类策略的安全隐患。 YourGroupName的成员将能够启动/停止所有 Upstart作业。