![如何防止绑定动态更新更改原始区域文件?](https://linux22.com/image/766910/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E7%BB%91%E5%AE%9A%E5%8A%A8%E6%80%81%E6%9B%B4%E6%96%B0%E6%9B%B4%E6%94%B9%E5%8E%9F%E5%A7%8B%E5%8C%BA%E5%9F%9F%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在使用 certbot DNS 插件颁发 Let's Encrypt 证书。Certbot 使用动态 DNS 更新添加一条TXT
记录以供验证。Bind.jnl
为该区域创建一个文件。此TXT
记录仅存在 30 秒,然后被 certbot 删除。当该过程完成后,一切都应该恢复正常。
副作用是 bind 会覆盖我原来的区域文件(所有者为root
)并将其另存为named
。此外,区域文件的内容完全被重新格式化,我不喜欢这种方式。
有没有办法阻止 bind 尝试更改原始区域文件?有什么方法可以告诉 bind 此动态更新是临时的、仅保留在内存中还是其他什么?
还有一个不太重要的问题。如果 bind 无法保存.jnl
没有named
所有权的文件,但它却可以轻松覆盖拥有的区域文件,那么它为什么会给出权限被拒绝的错误root
?
答案1
一旦使用动态 DNS,您就不应该期望区域文件采用任何特定格式,而应该让 bind 来管理它。这就是为什么您有rndc
命令freeze
和thaw
。
在您的情况下,您应该拆分关注点。_acme-challenge
在您的区域中创建,作为CNAME
指向另一个区域的。然后,此区域可以不受动态更新的影响,您可以按照自己喜欢的方式拥有区域文件。
在另一个区域,您启用动态更新并确保TXT
在那里添加记录。
但它可以轻松覆盖 root 拥有的区域文件?
编辑(包括删除)文件的权限取决于文件所在的目录所有权/权限,而不是文件本身的权限。想象一下,一个目录以一个文件开始,其内容是其中的文件列表……