需要允许用户重新启动bind9

我想给www-data用户使用这个命令重新启动bind9的能力

服务bind9重新启动

目前,他们可以执行它,它会停止bind9,但不会再次重新启动,抱怨权限不会允许chmod命名文件。

你能指出我要做什么的方向吗?

更新

好的,所以我按要求把这条线添加到了sudoers。

www-data ALL=NOPASSWD: /etc/init.d/bind9 

它还有一些问题:

 root@LAMPREY:~# su www-data $ service bind9 restart * Stopping domain name service... bind9 rndc: error: none:0: open: /etc/bind/rndc.key: permission denied rndc: could not load rndc configuration [ OK ] * Starting domain name service... bind9 chmod: changing permissions of `/var/run/named': Operation not permitted $ exit 

我也试着运行另一个命令

 /etc/init.d/bind9 restart * Stopping domain name service... bind9 rndc: error: none:0: open: /etc/bind/rndc.key: permission denied rndc: could not load rndc configuration [ OK ] * Starting domain name service... bind9 chmod: changing permissions of `/var/run/named': Operation not permitted $ exit 

结果相同

为什么你不想让用户访问到sudo来运行这个特定的命令? 这正是sudo所devise的情况。

添加

 www-data somehost= /sbin/service bind9 restart 

将授予用户www-data权限,以便在某些主机上运行service bind9 restart (以及仅该命令)。

要回答以上所有三个问题:当rndc已经具备了你所需要的能力时, sudo是一个过度的rndc ,另外还有一个选项来重载本地主机以外的名字服务器。

脚本rndc-confgen将为您生成一个rndc.conf文件,您可以将其保存到/etc/rndc.conf并使www-data可读:

 shadur@Romulus:~$ rndc-confgen # Start of rndc.conf key "rndc-key" { algorithm hmac-md5; secret "zGHUrg0X5Id4rn27A0Nb9A=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; }; # End of rndc.conf # Use with the following in named.conf, adjusting the allow list as needed: # key "rndc-key" { # algorithm hmac-md5; # secret "zGHUrg0X5Id4rn27A0Nb9A=="; # }; # # controls { # inet 127.0.0.1 port 953 # allow { 127.0.0.1; } keys { "rndc-key"; }; # }; # End of named.conf 

然后可以将注释掉的部分添加到/etc/bind/named.conf中,以便告诉服务器它应该正确地响应该密钥(运行rndc-confgen时随机生成该密钥)。

完成上述操作并重新启动绑定一次后,www-data用户应该能够通过rndc命令发出命令进行绑定。

rndc restart会完全重启服务器; rndc reconfig将导致它重新加载它的named.conf文件; rndc reload将检查并重新加载所有区域; rndc reload <zone>将检查并重新加载。

还有其他的命令 你可以通过简单地inputrndc而不用任何命令来得到一个列表。

手术刀不要用电锯。 当你甚至不需要root的时候不要使用sudo

为什么不给他们sudo的权利,只是重新启动绑定?

 www-data ALL=NOPASSWD: /etc/init.d/bind9 

然后你可以运行它,它应该工作..也可以使用rndc,如果你设置你的密钥重新加载绑定

完成@ Mike的回答

运行visudo ,文件/etc/sudoers将在您的默认文本编辑器中打开。 不要以其他方式打开文件。

然后添加下面一行,最好在最后

 www-data ALL = NOPASSWD: /usr/sbin/service bind9 restart 

保存并退出编辑器。 现在,用户www-data可以运行以下命令来重新启动绑定

 sudo /usr/sbin/service bind9 restart 

rndc reload应该可以在PHP系统()调用中正常工作,而不需要修改特定的权限。 我同意重新启动绑定是不必要的,因为如果你允许用户这样做,你可能会花费更多的时间来重新启动服务,而不是实际启动和联机服务请求。