我想让 www-data 用户能够使用此命令重新启动 bind9
服务bind9重启
目前,他们可以执行它,它将停止 bind9,但不会再次重新启动它,并抱怨权限不允许对文件“named”进行 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
结果相同
答案1
为什么你不想让用户访问来sudo
运行这个特定的命令?这正是 sudo 的设计目的。
添加
www-data somehost= /sbin/service bind9 restart
将授予用户 www-dataservice bind9 restart
在 somehost 上运行(且仅限该命令)的权限。
答案2
回答以上三个问题:当已经具备了你需要的功能,再加上重新加载名称服务器的选项时,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>
将仅检查并重新加载。
还有其他命令;您只需输入rndc
任何命令即可获得列表。
当手术刀能解决问题时,不要使用电锯;sudo
当你甚至不需要成为根时,也不要使用它。
答案3
为什么不授予他们 sudo 权限来重新启动 bind?
www-data ALL=NOPASSWD: /etc/init.d/bind9
然后你就可以运行它了,它应该可以工作。如果你设置了键来重新加载绑定,你也可以使用 rndc
答案4
rndc reload 应该可以在 PHP system() 调用中正常工作,而无需修改特定权限。我同意重启 bind 是不必要的,因为如果您允许用户这样做,您最终可能会花费比服务实际启动并在线处理请求更多的时间来重启服务。