需要允许用户重新启动 bind9

需要允许用户重新启动 bind9

我想让 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 是不必要的,因为如果您允许用户这样做,您最终可能会花费比服务实际启动并在线处理请求更多的时间来重启服务。

相关内容