首頁 Linux教程Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路

運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

bind介紹

在局域網環境中,一般我們要搭建DNS服務,使用的是BIND(Berkeley Internet Name Domain)軟件來實現,BIND提供了一個名為named(也叫named daemon)的服務程序,用于處理DNS查詢。

BIND 由 Internet Systems Consortium (ISC) 開發和維護,所以可以訪問ISC 的官方網站來獲取關于 BIND的相關信息。

除了BIND外,還有其它的軟件也可以用來搭建DNS服務,例如powerdns,dnsmasq,unbound,coredns(主要用在k8s環境中)等。

ISC官網:https://www.isc.org/

搭建正向解析DNS服務

正向解析:將域名轉換為與之關聯的IP地址的過程

反向解析:一個查找與特定IP地址關聯的域名的過程

1、安裝bind

一般通過Linux發行版提供的軟件包管理工具(例如yum、apt)進行安裝即可,如果需要進行編譯安裝,可以去官網或者github下載源碼,參考管理員手冊進行編譯安裝。

  • 地址:https://www.isc.org/download/
  • github:https://github.com/isc-projects/bind9

使用包管理工具進行安裝:

例如:ubuntu2004安裝bind9

# ubuntu
apt install bind9

# centos
yum install bind

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖
添加圖片注釋,不超過 140 字(可選)

2、修改配置

通過軟件包管理工具安裝了bind9服務后,配置文件一般放在 /etc/bind/ 目錄下,主配置文件一般是 named.conf

例如:在ubuntu2004中使用apt進行安裝后,默認帶的配置文件有這些

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖1
添加圖片注釋,不超過 140 字(可選)

在主配置文件中,使用include 指令來引入了其它的配置文件。

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖2
添加圖片注釋,不超過 140 字(可選)

有一個叫作named.conf.options的配置文件,包含了一個 options配置塊,options塊用于指定全局服務器選項。這些選項會影響BIND服務器的整體行為。

例如:端口指定、工作目錄指定、上層DNS、查詢權限等。

端口配置

bind默認監聽UDP和TCP的53端口,如果要修改端口可以在這個配置文件(named.conf.options)中進行修改。(一般情況下這個端口不用改)

# any 表示any 允許所有的機器訪問本機這個dns服務器
# ipv6端口指定
listen-on-v6 port 5353 { any; };

# ipv4端口指定
listen-on port 5353 { any; };

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖3
添加圖片注釋,不超過 140 字(可選)

說明:

當使用 ss -ntl | grep 53 查看端口監聽時,有一個 127.0.0.53%lo:53 。這個是 systemd-resolved 服務默認監聽的地址和端口,在ubuntu1804及其以上的版本中默認啟用 systemd-resolved服務。

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖4
添加圖片注釋,不超過 140 字(可選)

日志配置

默認情況下,BIND把日志消息寫到系統日志里面的,例如centos是/var/log/messages文件,ubuntu則是/var/log/syslog。如果我們想要自定義bind的日志存放位置話,可以通過loging配置塊來實現。(如果沒需求可以不改)

loging配置塊定義如何記錄服務器的活動。您可以指定記錄哪些類別的消息、它們的嚴重性以及它們應該記錄到哪里。

(1)一般是/etc/bind目錄下單獨創建一個文件,叫作 named.conf.logging,通過在這個配置文件里面添加日志的相關配置。

sudo vim /etc/bind/named.conf.logging
logging {
    channel query_log {
        file "/var/log/named/query.log";
        severity info;
        print-time yes;
    };
    channel other_log {
        file "/var/log/named/other.log";
        severity info;
        print-time yes;
    };

    category queries {
        query_log;
    };
    category default {
        other_log;
    };
};

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖5
添加圖片注釋,不超過 140 字(可選)

說明:

  • 需要保證文件的所屬組是bind(chown bind:bind /etc/bind/named.conf.logging)
  • 需要保證bind對存放日志的目錄具有讀寫權限(chown bind:bind /var/log/named)

(2)編寫好配置文件后,將配置文件通過在主配置文件中通過include指令來引入。

include "/etc/bind/named.conf.logging";

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖6
添加圖片注釋,不超過 140 字(可選)

logging的指令說明:

  • channel: 定義日志輸出通道
  • category: 指定某個日志類別應記錄到哪個通道
  • file: 指定日志文件的路徑
  • severity: 設置日志級別

(3)重啟服務后即可生效

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖7
添加圖片注釋,不超過 140 字(可選)

訪問控制

通過option配置塊的allow-query 和 allow-transfer可以用于設置訪問控制。如果不設置默認就是允許任何客戶端進行查詢和請求區域傳輸。

  • allow-query: 用于控制哪些客戶端可以向DNS服務器發起查詢
  • allow-transfer: 用于控制哪些DNS服務器被允許從當前服務器同步(或請求)區域數據,即進行區域傳輸。
options {
	allow-query  { any; };
	allow-transfer { none; }; # none:不允許任何服務器同步或請求該服務器上的完整區域數據。,如果要允許修改為any或指定的ip地址
}

上層DNS指定

當BIND服務器收到一個它無法直接回答的DNS查詢時(例如,因為它不是查詢的域的權威服務器,并且查詢結果也不在其緩存中),會默認到互聯網上找根。為了提高查詢效率,將這個查詢轉發(forward)到 forwarders 列表中指定的一個或多個DNS服務器上去。

options {
        forwarders {
                114.114.114.114;
                180.76.76.76;
        };

}

區域配置

這是配置DNS正向解析的第一步。bind的區域配置是通過 zone 配置塊來實現的。區域配置就是配置域名解析的規則。

例如:自帶的 named.conf.default-zones 這個文件中,就配置了一些默認的解析規則。

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖8
添加圖片注釋,不超過 140 字(可選)

例如:我需要將 www.yongshen.com 這個FQDN解析為ipv4地址10.0.0.66,可以這樣做:

(1)先創建區域配置文件,命名方式一般是 域名.zones。 一般單獨創建一個目錄來存放,方便后期管理

mkdir /etc/bind/yongshen
chown bind:bind /etc/bind/yongshen

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖9
添加圖片注釋,不超過 140 字(可選)

然后在這個目錄下編輯區域配置文件:

sudo vim /etc/bin/yongshen/yongshen.zones
zone "yongshen.com." {
        type master;
        file "/etc/bind/yongshen/db.yongshe.com";
};

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖10
添加圖片注釋,不超過 140 字(可選)

區域配置文件說明

zone配置塊,大致的格式就是:

zone "要解析的域名" {
	type master; # master表示這個是權威區域,該服務器為該區域內的所有域名提供權威答案
	file xxxx;   # 指定的文件包含了這個區域的所有資源記錄
};

type指令說明

type用于指定定義區域的類型,常見的類型有以下這些:

  • master:當有請求來時,可以根據file指定的文件中的信息返回權威答案
  • slave:當有請求來時,它可以響應請求,但它是一個從屬或備份區域。它從指定的主服務器復制區域數據,自身不能直接修改區域內容。任何修改都需要在主服務器上進行,并隨后同步到從服務器
  • hint:此區域用于配置根DNS服務器的信息

file指令說明

file指令用于指定 區域文件,也叫 區域數據文件。這個文件包含了若干條資源記錄,通過這個文件可以為域名提供詳細的解析信息。

這個文件的作用就是告訴BIND:“當有人查詢某個FQDN時,請給他這個IP地址作為答案”。

(2)編輯區域數據文件 區域配置文件搞定后,需要創建zone配置塊中file指定的區域數據文件,一個區域數據文件由若干條區域數據記錄組成。

sudo vim /etc/bind/yongshen/db.yongshe.com
$TTL    86400
@       IN      SOA     master.yongshe.com. admin.yongshe.com. (
                            2023102401  ; Serial
                            3600        ; Refresh
                            1800        ; Retry
                            604800      ; Expire
                            86400       ; Minimum TTL
                            )

@          IN      NS      master.yongshen.com.
master     IN      A    10.0.0.66

www        IN      A    10.0.0.66

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖11
添加圖片注釋,不超過 140 字(可選)

區域數據文件說明

一個區域數據文件由若干條區域數據記錄組成,每條區域記錄由 5 部分組成:

NAME   [TTL]   IN   type   value

NAME

NAME:指定當前負責解析的域名,可以使用 @ 符號來表示當前解析的域名就是 區域配置里面改zone配置塊指定的域名

例如:

www   IN      A    10.0.0.66 表示要解析的FQDN就是 www.yongshen.com


TTL

TTL:表示緩存過期的時間,當一個客戶端(或者遞歸DNS服務器)向權威DNS服務器查詢一個域名并得到答案后,這個答案(DNS記錄)會被緩存在客戶端或遞歸服務器上。TTL值就是告訴這些客戶端或服務器應該緩存這條記錄多長時間。在這個緩存時間內,如果再次有對同一條DNS記錄的查詢,客戶端或遞歸服務器可以直接從自己的緩存中獲取答案,超過TTL指定的時間了記錄就會從緩存中被移除,相同的查詢請求就需要重新請求。


IN

IN:指的就是這個記錄屬于Internet類,其他類基本上都沒用了


type

type用于指定區域記錄的類型,不同類型的區域記錄有不同的作用。并且不同的類型,對應的value值也不同。

  • A: 表示這條資源記錄類型是 IPv4地址記錄,用于將一個域名映射為IPv4地址,所以value對應的值就是一個IPv4地址。

例如:

www        IN      A    10.0.0.66

  • AAAA: 表示這條資源記錄類型是 IPv4地址記錄,用于將一個域名映射為IPv6地址,value對應的值就是一個IPv6地址

例如:

mail IN AAAA 2001:db8::1

  • NS: 這種記錄類型用于指定哪些DNS服務器是權威服務器,對應的value值是權威DNS服務器的域名(末尾的點不能省略)

例如:

@          IN      NS      master.yongshen.com. 表明權威服務器是  master.yongshen.com.

具體過程如下:

1、當客戶端(或其他DNS服務器)想要解析一個特定的域名,例如 www.yongshen.com, 它首先會查詢其本地緩存或前置DNS服務器。如果沒有找到答案,它可能會進一步查詢根服務器或其他已知的上級服務器來尋找關于yongshen.com域的權威服務器信息。

2、在此情境中,權威服務器的標識為 master.yongshen.com,這是通過NS記錄 @ IN NS master.yongshen.com. 指定的。這告訴詢問者,如果想要解析屬于yongshen.com域的任何主機名,它應該聯系master.yongshen.com。

3、 但這還不夠,因為詢問者需要知道master.yongshen.com的實際IP地址才能與之聯系。為了提供這一信息,還有一條A記錄:master IN A 10.0.0.66,告訴詢問者master.yongshen.com的IPv4地址是10.0.0.66。

4、當查詢請求到達IP地址10.0.0.66的服務器時,因為該服務器已經配置為yongshen.com域的權威服務器并擁有該域的完整區域文件(通過zone配置塊的type和file實現的),它會查找關于www.yongshen.com的記錄。在此例中,它找到了記錄www IN A 10.0.0.66,所以它會將10.0.0.66這個地址返回給詢問者。

  • SOA:這種類型的資源記錄在每個區域數據文件中有且只有一個,且是第一條記錄。用來設置這個區域的一些屬性信息的。對應的value就是這個區域的相關屬性信息。
# 郵箱只起到說明作用,不起實質的作用

@ IN SOA <主域名服務器名> <負責人郵箱> (
    <序列號>   ; Serial Number
    <刷新時間> ; Refresh Interval
    <重試時間> ; Retry Interval
    <過期時間> ; Expire Time
    <最小TTL>  ; Minimum TTL
)

字段說明:

  • 主域名服務器名稱:權威的名稱服務器,負責該DNS區域(通常為完全限定的域名),用于告訴其他服務器或者客戶端:“如果你有關于這個區域的問題,你應該來問我?!?(在SOA記錄中指定的主域名服務器名稱通常就是該區域的權威名稱服務器,這與NS記錄中列出的名稱服務器一致。)
  • 負責人郵箱:負責這個區域的管理員的電子郵件地址,一般使用“.”替代“@”。
  • 序列號:表示區域文件的版本的數字,更改區域文件時應該增加這個數字。這樣如果搭建了主從架構,從屬或備份的DNS服務器知道主服務器的數據已經更改,從而觸發更新。
  • 刷新時間:搭建主從架構時,告訴從屬服務器多久檢查主服務器的序列號一次
  • 重試時間:從屬服務器在刷新時間結束后嘗試聯系主服務器但失敗,它會在這個“重試時間”結束后再次嘗試。
  • 過期時間:從屬服務器在多長時間內無法與主服務器通信后,將停止回答關于這個區域的查詢。例如向從服務器請求:www.tom.com的ip地址是多少, 但是604800秒后都沒法和主服務器通信,所以它就不會回答這個請求了。
  • 最小TTL:其他服務器應該緩存此區域中任何記錄的最短時間。

(3)將區域文件加入主配置文件 區域文件和區域數據文件都創建和配置后,需要將區域文件加入主配置文件中。

sudo vim /etc/bind/named.conf
include "/etc/bind/yongshen/yongshen.zones";

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖12
添加圖片注釋,不超過 140 字(可選)

3、重啟服務

重啟bind服務后測試是否生效,我在ubuntu2004中使用apt安裝bind后,發現有bind9和named這兩個服務。

查看named的service文件時,發現使用Alias=bind9.service指定了一個叫作bind9.service的別名。

所以在使用ssytemctl enable named后,/lib/systemd/system/named.service在 /etc/systemd/system/下創建了兩個service文件, /etc/systemd/system/bind9.service和/etc/systemd/system/multi-user.target.wants/named.service。

bind9 是在 Debian 及其衍生版本(如 Ubuntu)上的軟件包名稱和服務名稱。在這些發行版中,通常將 named 的服務文件設置為 bind9.service,以與軟件包的名稱保持一致。所以使用named或者bind9來管理bind進程都是一樣的。

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖13
添加圖片注釋,不超過 140 字(可選)
sudo systemctl restart bind9.service


4、測試

可以通過dig工具來測試,dig默認使用的是53端口,如果修改了bind服務器的端口,需要使用 -p 參數來指定端口號

# dig通過 @ 來指定DNS服務器地址

dig www.yongshen.com @10.0.0.66 -p 5353

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖14
添加圖片注釋,不超過 140 字(可選)

除了使用dig來測試dns是否可用外,還可以使用以下工具進行測試:

  • host:如果需要指定DNS服務器地址,直接在后面寫地址就行了。例如:host www.baidu.com 192.168.13.66
  • nslookup:和host使用一樣,例如:nslookup www.baidu.com 192.168.13.66

說明: 如果DNS服務器的端口不是默認的53,只有dig提供了 -p參數來指定,host和nslookup都是不能手動指定端口的,


注意事項

BIND中FQDN說明:

在DNS和bind中,完全限定域名的表現形式為由一個點(.)結尾的域名。這個點代表DNS層級結構的根,所以FQDN實際上是從某個節點一直到DNS的根的完整表示。末尾不帶點就是一個相對于名。

在zone配置塊中: 定義了一個區域,這個zone配置塊負責處理關于yongshen.com的DNS請求,在指定區域名稱的時候,如果最后加了點(.)表示這是一個完全限定域名(不加點BIND也通常將其視為FQDN),但是可能會出現在不帶點的情況下,把他當作一個相對域,從而給它加上后綴。

例如:特定的網絡(企業或大學網絡)里面會自動加上后綴,不帶點可能就給加上后綴了

在區域數據文件中

  • 資源記錄的NAME部分指定了需要處理的域名,很多時候使用的都是相對域名。例如:www IN A 10.0.0.66,會自動將當前zone的名稱追加在其后面。 www.yongshen.com
  • 如果使用了全限定域名,例如:www.yongshen.com. IN A 10.0.0.66,就不會將當前zone的名稱追加在其后面

$TTL說明

$TTL 是一個全局默認TTL,用于指定那些沒有明確設置TTL的記錄的生存時間。只需要在文件的頂部定義一次TTL,它會自動應用到所有后續的記錄上,除非這些記錄自己有明確的TTL設置

@ 符號說明

@ 符號是一個簡寫,代表當前區域的主域名,即在zone配置塊中指定的域名。

除了@符號外,經常用的還有一個 * 號, 符號是一個通配符,和shell中的*效果一樣,用來匹配該域中的任何未明確指定的主機名。

例如:

www    IN A 10.0.0.66
*    IN A 10.0.0.67

查詢www.yongshen.com 會范圍10.0.0.66,查詢其它的,例如mail.yongshen.com就返回10.0.0.67

區域數據文件省略說明

在BIND的區域文件中,連續的資源記錄(RRs)可以省略與前一條相同的部分。例如:

# 域名 example.com. 在后續的記錄中被省略了,因為它與前一條記錄相同。
example.com.    IN    A    192.0.2.1
                IN    NS   ns.example.com.
                IN    MX   10 mail.example.com.

BIND配置文件特點

  1. BIND的配置文件有點和JSON格式相似,它們都具有層次結構和使用括號來定義塊。
  2. BIND使用大括號來定義一個塊,并且每個配置語句以分號結束
  3. 可以使用//進行單行注釋,或使用/* */進行多行注釋。

配置文件檢查

編寫完配置文件后,可以通過named-checkconf和named-checkzone檢查配置文件是否有語法錯誤。

named-checkconf 檢查的是named.conf這個配置文件,也可以手動指定配置文件

# 不指定配置文件 默認檢查named.conf
named-checkconf

# 手動指定配置文件
named-checkconf  /path/x.conf

named-checkzone 檢查的是域名對應的區域數據庫文件

格式為:

named-checkzone [zone-name] [zone-file-path]

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖15
添加圖片注釋,不超過 140 字(可選)

主從結構配置

通過配置BIND的主從結構,實現區域數據的冗余和負載分擔。

具體操作就是: 1、主服務器配置區域信息、如果發生數據的更改只能在主服務器上完成。

2、從服務器負責從主服務器復制區域數據信息,從服務器也可以回答關于其區域的DNS查詢

主服務器配置:

(1)在options配置快中通過allow-transfer設置只能從服務器進行區域傳輸,如果不寫默認所有的服務器都能進行傳輸,太危險。

options {
	allow-transfer { 192.168.0.102; };
}

(2)區域配置和區域數據配置,實現方法就和上面搭建正向解析DNS步驟是一樣的。

# 區域配置
sudo vim /etc/bin/yongshen/yongshen.zones
zone "yongshen.com." {
        type master;
        file "/etc/bind/yongshen/db.yongshe.com";
};

# 區域數據配置
sudo vim /etc/bind/yongshen/db.yongshe.com
$TTL    86400
@       IN      SOA     master.yongshe.com. admin.yongshe.com. (
                            2023102401  ; Serial
                            3600        ; Refresh
                            1800        ; Retry
                            604800      ; Expire
                            86400       ; Minimum TTL
                            )

@          IN      NS      master.yongshen.com.
master     IN      A    10.0.0.66

www        IN      A    10.0.0.66

從服務器配置;

(1)在options配置快中通過allow-transfer設置不允許所有的服務器都能進行傳輸,保證安全

options {
	allow-transfer { none; };
}

(2)區域配置和主服務器的區域配置略有不同,首先就是要使用masters 指定主服務器的ip地址,而且file指定不在指定一個區域數據文件了,而是指定指定同步過來的資源記錄存放位置

# 區域配置
sudo vim /etc/bin/yongshen/yongshen.zones
zone "yongshen.com." {  # 區域名稱要保持一致
        type slave;     # 類型為slave
		 masters {192.168.0.102;}; # 指定為主服務器地址
        file "/var/cache/bind/db.yongshe.com"; # 指定同步過來的資源記錄存放位置
};

說明:

從服務器(Slave)通過file指令指定同步過來的資源記錄(zone data)的存放位置。這個位置是一個文件系統路徑,指向一個文件,當從服務器從主服務器(Master)進行區域傳輸時,這個文件會被更新。

例如:

  • 基于Debian/Ubuntu的系統:資源記錄通常存放在/etc/bind/zones/或/var/cache/bind/下
  • 基于Red Hat/CentOS的系統:資源記錄通常存放在/var/named/或/var/named/slaves/
  • 其他UNIX/Linux系統:路徑可能會有所不同,但通常會在/var/named/或/etc/namedb/之類的位置

說明;如果需要將同步過來的資源文件存放在一個指定的位置,需要修改一些去安全權限才行。

(3)測試

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖16
添加圖片注釋,不超過 140 字(可選)

AppArmor

在ubuntu2004中搭建主從架構的時候,從服務器上通過file指定同步過來的資源記錄存放位置,默認是存放在/var/cache/bind下,如果自定義一個目錄會出現 “dumping master file: xxxxx: open: permission denied”這種提示,這是因為受到了AppArmor定義的策略影響。

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖17
添加圖片注釋,不超過 140 字(可選)

這個輸出說明了named有一個策略被激活了,策略的名字是(/usr/sbin/named),這個策略影響著正在運行的named進程(PID 468483)

AppArmor說明

AppArmor是Linux的一個內核安全模塊,它是基于路徑來限制程序能夠訪問的資源,從而增強系統的安全性。大多數情況下,在 Ubuntu 和 openSUSE 等發行版中默認啟用AppArmor模塊,Red Hat系列的發行版默認啟動的是SELinux模塊。

AppArmor一般用于在特定路徑下隔離應用程序的環境,例如可以限制一個進程只能訪問必要的文件和目錄,即使文件系統給予它足夠的權限了,通過AppArmor進行限制后照樣沒權限。

AppArmor有兩種工作模式:enforce(強制)模式和complain(投訴)模式,強制模式下不符合策略的操作會被拒絕。而投訴模式下不會組織不符合策略的操作,只會記錄到日志。

AppArmor為進程定義的策略規則是存放在 /etc/apparmor.d/ 目錄中,策略規則文件命名方式按照 進程所在的絕對路徑命名(需要把/換為.)

例如:為 /usr/sbin/named 定義的 AppArmor 策略文件將命名為 usr.sbin.named。因為named進程的路徑是:/usr/sbin/named

AppArmor 策略文件也是特別簡單的,只需要在配置文件里面加入相關文件路徑,然后指定權限。策略生效后進程就只能按照定義的策略隊則權限去訪問一個文件了。

文件路徑     權限

例如:給某個進程編寫一個策略文件,策略規則是只能以讀權限訪問A文件,那么除了A文件他有讀權限,其它目錄相對于這個進程來說,什么操作權限都沒有。

named的默認策略:

根據AppArmor策略文件的定義規則,為 /usr/sbin/named 定義的 AppArmor 策略文件將命名為 usr.sbin.named。

ehigh@ubuntu:~$ cat  /etc/apparmor.d/usr.sbin.named
# vim:syntax=apparmor
# Last Modified: Fri Jun  1 16:43:22 2007
#include <tunables/global>

# 定義了named進程的權限和限制的作用域。
/usr/sbin/named flags=(attach_disconnected) {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  # capability指令 定義了named進程能夠使用的Linux功能
  capability net_bind_service,
  capability setgid,
  capability setuid,
  capability sys_chroot,
  capability sys_resource,

  # 明確了可以訪問哪些文件
  # 定義了文件和目錄訪問權限, r:代表讀取權限。 w:代表寫入權限。 k:允許named進程鎖定文件。 l:代表鏈接權限。m:代表執行權限,并將文件作為共享對象加載。

  # /etc/bind should be read-only for bind
  # /var/lib/bind is for dynamically updated zone (and journal) files.
  # /var/cache/bind is for slave/stub data, since we're not the origin of it.
  # See /usr/share/doc/bind9/README.Debian.gz
  /etc/bind/** r,
  /var/lib/bind/** rw,
  /var/lib/bind/ rw,
  /var/cache/bind/** lrw,
  /var/cache/bind/ rw,
   .......
  # some people like to put logs in /var/log/named/ instead of having
  # syslog do the heavy lifting.
  /var/log/named/** rw,
  /var/log/named/ rw,
   ......
}


解決方法;

為了解決自定義區域數據文件沒權限這個問題,可以采取以下方案:

方法一: 將AppArmor工作模式改為complain模式實現進程不受到策略的影響。

# 修改策略模式
sudo aa-complain /etc/apparmor.d/usr.sbin.named

# 重新加載策略
sudo apparmor_parser -r /path/to/profile



方法二:

修改named的策略文件,將存放區域數據文件的目錄加到策略文件中,并賦予對應的權限。

sudo vim /etc/apparmor.d/usr.sbin.named
/etc/bind/zones/** lrw,

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖18
添加圖片注釋,不超過 140 字(可選)

例如:自定義從服務器存儲資源數據文件的目錄為/etc/bind/zones

1、修改策略文件,將自定義的目錄加入到策略文件中,并指定操作權限

sudo vim /etc/apparmor.d/usr.sbin.named
/etc/bind/zones/** lrw,

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖19
添加圖片注釋,不超過 140 字(可選)

2、修改區域配置文件,讓 同步過來的資源記錄存放位置 自定義存放到/etc/bind/zones中

zone "foreverhigh.com" {
        type slave;
        masters {192.168.5.202;};
        file "/etc/bind/zones/db1.foreverhigh.com";
};

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖20
添加圖片注釋,不超過 140 字(可選)

3、修改目錄權限,讓bind擁有讀寫權限

sudo chmod 755 /etc/bind/zones

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖21
添加圖片注釋,不超過 140 字(可選)

4、重新加載策略文件并且重啟bind服務

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.named

sudo systemctl restart bind9

5、檢查是否生效

Linux 搭建DNS服務: 從菜鳥到網絡管理大神的進階之路插圖22
添加圖片注釋,不超過 140 字(可選)

鏈接:https://www.cnblogs.com/arthinking/p/14450337.html

(版權歸原作者所有,侵刪)

文末福利

掃碼無償領?。▊渥⑦\維入門到進階)

專家指南:Linux LVS四種工作模式及其最佳實踐插圖4
添加圖片注釋,不超過 140 字(可選)

添加圖片注釋,不超過 140 字(可選)

專家指南:Linux LVS四種工作模式及其最佳實踐插圖5

本文鏈接:http://www.thecarconnectin.com/46823.html

網友評論comments

發表回復

您的電子郵箱地址不會被公開。

暫無評論

Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
掃二維碼
掃二維碼
返回頂部
国产曰批视频免费观看完|久久久一本精品99久久精品66直播|色天使色偷偷AV一区二区三区|国产色秀视频在线播放|亚洲欧洲免费三级网站