如何允许用户重新加载区域文件?

kas*_*erd 3 bind

我有一个权威 DNS 服务器池,它们必须为 5 个用户托管区域,每个用户有 2 到 10 个区域。

每个用户都可以使用公钥认证通过 ssh 连接到服务器。我面临的要求是,只要用户能够连接到服务器上的 ssh 端口,他们还必须能够在不依赖任何其他网络通信的情况下更新自己的区域

到目前为止,我所做的是将每个区域配置为从拥有该区域的用户的主目录加载,如下例所示:

zone "example.com" {
     type master;
     file "/home/example/zones/example.com";
};
Run Code Online (Sandbox Code Playgroud)

我不知道是否有任何关于直接从用户的主目录加载区域文件的建议。我尝试了一些搜索,但没有发现支持或反对这种做法的建议。

它似乎有效,但更改仅在我重新启动或重新加载绑定后才会生效,我目前必须以 root 身份执行此操作。

我使用的发行版为 BIND 9.8 提供了安全补丁。所以我下载了 9.8 版本的“BIND 9 管理员参考手册”来寻找用户指示绑定重新加载区域的方法。

我找到了该rndc命令,但是 BIND 上的访问控制似乎不够精细,无法仅将机密用于重新加载特定区域。我可以指定允许访问的 IP 地址和 HMAC-MD5 机密的组合,但任何此类允许访问的组合都将被允许通过rndc.

如何允许用户重新加载他们的区域文件而不授予他们其他管理权限?

在这一点上,我想我可以使用sudocommand选项.ssh/authorized_keys来授予用户调用特定rndc命令的权限。

这是一种可取的方法还是我应该做其他事情?

我也考虑过使用区域传输。但我对区域传输如何工作的理解是,接收 DNS 服务器在区域传输中充当客户端,而发送 DNS 服务器充当服务器。如果我的理解是正确的,这意味着让客户端向服务器提供新版本的区域是不可能的。因此,似乎如果我要采用这种方法,我将不得不使用隐藏主设置,该隐藏主设置在 VPN 客户端上运行,由于我无法完全制定的原因,这感觉是错误的。

use*_*494 13

我会通过 sudo

user1    ALL=(root)    /usr/sbin/rndc reload user1.domain1.com, /usr/sbin/rndc reload user1.domain2.com
user2    ALL=(root)    /usr/sbin/rndc reload user2.domain1.com, /usr/sbin/rndc reload user2.domain2.com
Run Code Online (Sandbox Code Playgroud)