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

我有一个权威的DNS服务器池,必须为5个用户分别拥有2到10个区域的主机区域。

每个用户可以使用公钥authenticationssh到服务器。 我所面对的要求是, 只要用户能够连接到服务器上的ssh端口,他们也必须能够更新他们自己的区域而不依赖任何其他的networking通信

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

zone "example.com" { type master; file "/home/example/zones/example.com"; }; 

我不知道是否存在关于直接从用户的主目录加载区域文件的build议。 我尝试了一些search,发现没有build议或反对这种做法。

它似乎工作,但更改只有重新启动或重新加载绑定后生效,我目前必须作为根。

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

我发现了rndc命令,但是看起来BIND上的访问控制不够精细,只能用来重新加载特定的区域。 我可以指定允许访问的IP地址和HMAC-MD5机密的组合,但允许任何这样的允许访问的组合允许通过rndc调用所有的命令。

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

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

这是一个明智的做法,还是应该做别的事情?

我也考虑过使用区域转移。 但我对区域传输工作的理解是,接收的DNS服务器在区域传输中充当客户端,而发送DNS服务器充当服务器。 如果我的理解是正确的,这意味着有一个客户端提供一个新版本的区域到服务器是不可能的。 所以看来,如果我采取这种方法,我将不得不使用一个隐藏的主设置与VPN客户端上运行的隐藏主,这是由于我无法完全制定的理由感觉不对。

我会通过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 

你可以要求你的客户使用像git这样的rcs工具来更新他们的区域文件并把他们推送到他们的homedirs。 在那里,使用sudo规则user1700494指示(我将添加named-checkzone和named-checkconf)来创build一个具有post接收挂钩的git存储库。

为了完整起见,以下是build议的用户1700494的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 

这样你就可以把所有的东西放在版本控制中,这样你就可以在需要的时候轻松地返回,而且用户不需要在服务器上login和修改文件,所有的事情都可以在自己的环境中完成。 此外,您只有在validation文件正确后才能重新加载服务器。

我会build议每个绑定实例在LXC上运行。 每个用户都有自己的绑定实例。 为他们提供各自实例的凭据。