我想给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系统()调用中正常工作,而不需要修改特定的权限。 我同意重新启动绑定是不必要的,因为如果你允许用户这样做,你可能会花费更多的时间来重新启动服务,而不是实际启动和联机服务请求。