4

目标

我想在 Ubuntu 12.04 上配置 bind9 以注销到命名管道。目的是将日志记录重定向到 syslog-ng 服务。

问题

我的问题是,当我将日志记录通道定向到命名管道文件时,绑定服务将无法启动。这是日志记录子句,其中 query.log 是 FIFO 文件:

logging {
  channel query.log {
      file "/var/log/named/query.log";
      severity info;
      print-time yes;
      print-category yes;
  };

  category queries  { query.log; };
  category ....
};

这是在 syslog 中找到的输出:

Jun 12 12:37:53 hostname named[19400]: isc_file_isplainfile '/var/log/named/query.log' failed: invalid file
Jun 12 12:37:53 hostname named[19400]: configuring logging: invalid file
Jun 12 12:37:53 hostname named[19400]: loading configuration: invalid file

我试过的

我已经验证权限是正确的,并且记录到标准文件可以正常工作。我还验证了我可以通过管道发送数据,方法是运行

sudo -u bind bash -c 'echo "test" > /var/log/named/query.log'

我看到数据按预期出现在 syslog-ng 中。我还在 Apparmor 中将 /usr/sbin/named 设置为抱怨和禁用,但我仍然遇到这个问题。

帮助?

我提议做的事情可能吗?如果是这样,任何关于我可能做错了什么的指针。

4

1 回答 1

0

1)回答问题

Bind9 记录到命名

a) 我在BIND9-s源代码中寻找解决方案,发现不修改源代码无法解决。

b)最接近的解决方案是登录stderr

logging {
  channel query.log {
   stderr;
   severity info;
   print-time yes;
   print-category yes;
 };

 category queries  { query.log; };
};

并通过修改 BIND9 启动脚本将其重定向到命名管道。我通过修改/etc/init.d/bind9做到了:

  • 你需要找到启动命令。就我而言,它是第 64 行

    if start-stop-daemon --start --oknodo --quiet --exec '/usr/sbin/named' \

    --pidfile ${PIDFILE} -- $OPTIONS"; 然后

  • 并将其修改为:

    if start-stop-daemon --start --oknodo --quiet --exec '/bin/bash' \

    --pidfile ${PIDFILE} -- -c "/usr/sbin/named -g $OPTIONS 2> /var/log/named/queries.log $;"; 然后

2)回答目的

bind9 允许您通过配置直接登录到 syslog:

logging {
 category queries { default_syslog; };
};

default_syslog 通道默认将日志写入 syslog。

或者您可以编写显式配置:

logging {
  channel query.log {
   syslog daemon;
   severity info;
   print-time yes;
   print-category yes;
 };

 category queries  { query.log; };
};

请参阅日志配置手册: http ://www.zytrax.com/books/dns/ch7/logging.html

于 2014-11-29T16:55:24.847 回答