![需要配置 BIND 服务器查询日志的版本](https://linux22.com/image/801128/%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%20BIND%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9F%A5%E8%AF%A2%E6%97%A5%E5%BF%97%E7%9A%84%E7%89%88%E6%9C%AC.png)
我一直在尝试让 BIND 服务器查询日志工作,创建 3 个版本,每个版本最大 100mb。系统是 SUSE SLES 11。我在网上找到了很多关于如何操作的文章,但除了破坏 DNS 服务器之外,它们什么也没做。该机器是一个 VirtualBox 客户机,所以我可以继续回到一个未修改的快照,该快照没有进行任何查询日志记录。
如果我手动将日志记录语句添加到named.conf中,named将不再加载。消息显示“isc_stdio_open‘无论我告诉它什么’失败:找不到文件。”chown named.named logfile不会以任何方式帮助或改变行为。直接对apparmor配置文件进行任何操作,包括只保存而不更改它,apparmor将永远不会再次加载该配置文件。它会说已经有一个配置文件。
恢复快照 -> 现在恢复到未做任何更改的状态
使用 GUI 工具配置 dns 服务器的日志记录。named 不会启动,因为它仍然没有权限或找不到日志文件。chown named.named logfile 没有帮助。使用 gui 工具配置 apparmor。这至少不会终止 apparmor 配置文件,但无论如何都无法解决这种情况。
我已在 2 个不同的 VM 上尝试过此操作,均为 SLES 11,均只是基本采用所有默认安装,尚未投入生产。
我尝试了几种不同的使用 GUI 工具和手动修改配置文件的组合。我尝试了日志文件的不同位置,例如 /var/log/querylog、/var/log/querylogs/querylog、/root/queries。我尝试使用 touch 创建日志文件,然后将其 chown 为 named.named。我尝试使用 GUI 创建文件/目录,然后设置权限。
有人知道如何在 SLES 11 BIND 服务器上以 3 个文件为单位轮换获取 DNS 查询日志吗?这似乎不应该有这么大的麻烦。
编辑
目前named.conf的日志部分如下所示:
日志记录 { 通道日志文件 { 文件“/var/log/query_log.log” 版本 3 大小 100M; }; 类别默认 { log_file; }; };
/var/log/messages 中报告的内容是:
工作目录不可写。isc_stdio_open
'/var/log/named/query_log.log'失败:未找到文件>配置日志记录:未找到文件退出(由于致命错误)
所以看起来存在某种权限问题。我创建了该目录并在其中放置了一个名为 query_log.log 的空白文件。我让 named 成为所有者,并授予每个人对 /var/log/named 的读取、写入和执行权限,并授予每个人对 /var/log/named/query_log.log 的读写权限
/var/log/named 的 ls -l
-rwxrwxrwx l 命名 命名 0 4月26日 08:43 query_log.log
ls - /var/log
//各种文件和目录
drwxr-xr-x 2 named named 4093 Apr 26 09:26 named
编辑2
要启动绑定服务器,我使用 rcnamed start 如果我删除日志记录部分以便可以启动命名,运行 ps aux | grep named 会显示 /usr/sbin/named 正在以用户命名的身份运行。
感谢您迄今为止的帮助。我该怎么做才能让它正常工作?
答案1
有人知道如何在 SLES 11 BIND 服务器上以 3 个文件为单位轮换获取 DNS 查询日志吗?这似乎不应该有这么大的麻烦。
这不应该是一个麻烦——语法简单且易于练习(成千上万的名称服务器管理员都使用它。)理论上是可能的,但你不太可能在其中发现新的错误。让我们看看更可能的原因。
首先检查一下你的语法永远不会有坏处。正如 BIND 管理员参考手册(又名“ARM”,适合你的 BIND 版本的 ARM 副本包含在你的 BIND 源中或可以在 ISC 的网站上找到)6.2.10 中所述,你应该首先定义一个通道,例如:
channel example_query_channel {
file "bind_query.log" versions 3 size 20m;
print-time yes;
print-category yes;
};
然后将您感兴趣的记录类别(即“查询”)定向到该频道:
category queries {
example_query_channel;
};
您可以使用 BIND 附带的 named-checkconf 实用程序在尝试重新启动 BIND 之前检查配置文件的语法是否有错误。
如果这对您不起作用,则说明您遇到了某种文件系统权限问题,而不是 BIND 问题;BIND 以某种方式被阻止写入您在其相应目录中指定的文件。也许您正在放弃以非 root 用户身份运行的权限,并且该用户没有 -x 权限来遍历从文件系统根目录到您正在写入的目录的路径中的所有目录,或者您没有 -w 权限来写入该目录中的文件。或者您可能有另一个安全层(您提到了 AppArmor),这会使问题进一步复杂化。