The Will Will Web | Ubuntu 10.04 如何正確設定次要 DNS 伺服器 (Slave DNS)

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

Ubuntu 10.04 如何正確設定次要 DNS 伺服器 (Slave DNS)

今天架設了壹台次要 DNS 伺服器 (Slave DNS) 起來,不過設定完成之後卻一直無法正確寫入 Zone File,系統記錄一直出現 permission denied 的錯誤訊息,不過我再三檢查後確定檔案與目錄權限是沒問題的,詭異的就是一直無法正確建立起 Slave 的 Zone 檔案,我查過了 Primary DNS 的 Log 已經確定資料正確傳回 Slave 了,到底是什麼問題呢?原來是寫入的目錄被 AppArmor 系統保護住了!

§ 以下是錯誤示範,���提供情境描述之用 §

事情是這樣發生的,我原本有壹台非常老舊的 DNS 伺服器是用 Fedora Core 3 架設的,現在把設定檔全部都到新安裝的 Ubuntu 10.04,Ubuntu 的 DNS 主要設定放在 /etc/bind 目錄下,我把 master 與 slave 的檔案全部都分別寫入到 /etc/bind/master 與 /etc/bind/slave 目錄下。

named.conf.local 裡指定的檔案路徑用的是絕對路徑,移過來之後並沒有注意用相對路徑就能設定,因此不懷疑有他的繼續沿用,改路徑而已:

不過當我利用 /etc/init.d/bind9 restart 重新啟動後,卻在 /var/log/syslog 系統記錄檔中發現以下錯誤:

  • Jan 10 13:15:08 XXX named[23349]: zone example.com/IN: Transfer started.
  • Jan 10 13:15:08 XXX named[23349]: transfer of 'example.com/IN' from 172.16.100.53#53: connected using 172.16.100.1#59972
  • Jan 10 13:15:08 XXX named[23349]: dumping master file: /etc/bind/slave/tmp-3qrrrWGEq6: open: permission denied
  • Jan 10 13:15:08 XXX named[23349]: transfer of 'example.com/IN' from 172.16.100.53#53: failed while receiving responses: permission denied
  • Jan 10 13:15:08 XXX named[23349]: transfer of 'example.com/IN' from 172.16.100.53#53: Transfer completed: 0 messages, 14 records, 0 bytes, 0.007 secs (0 bytes/sec)

從上述訊息可以判斷出應該是 Zone Transfer 已經完成而且有 14 筆紀錄,但是在本地端卻無法儲存檔案的權限問題,進一步瞭解後才得知原來是寫入的目錄被 AppArmor 系統保護住了,必須手動將特定目錄加入寫入權限才行。

 

§ 以下是正確設定方式,有兩種方式,二選一即可 §  (推薦使用方法二進行設定)

方法一:修改 /etc/apparmor.d/usr.sbin.named 設定檔

如下圖示,加上一行 /etc/bind/slave/** rw, 進去,記得要設定 rw 才是代表「可讀可寫」的意思。

 

 

方法二:在 /etc/bind/named.conf.local 設定相對路徑

其實從方法一的圖示可以看出 /var/cache/bind 目錄早就已經設定開啟了可讀可寫的設定,而且我們在 /etc/bind/named.conf.options 設定檔也定義了 named 的開始目錄就是在 /var/cache/bind 這裡。

所以,我最後修改 /etc/bind/named.conf.local 設定檔如下(請注意我從絕對路徑改成相對路徑了):

 

而這些設定好的 Slave Zone 檔案就會自動建立在 /var/cache/bind 目錄下!

如果你想將 master 與 slave 的 zone file 分開而想將檔案建立在 /var/cache/bind 下的子目錄的話,則必須注意目錄的寫入權限與擁有者資訊,請透過以下指令進行目錄建立:

mkdir /var/cache/bind/slave
chmod g+w /var/cache/bind/slave
chgrp bind /var/cache/bind/slave

 

設定好之後你一樣可以在 /etc/bind/named.conf.local 設定檔裡使用相對路徑即可:

 

補充說明

  • 如果你用的是 RedHat Linux 可以修改 /etc/sysconfig/named 設定檔,並加上以下設定:
  • ENABLE_ZONE_WRITE=yes

 

相關連結