SYSCTL.D(5)

NAME
sysctl.d - 在啟動時配置核心引數

SYNOPSIS

/etc/sysctl.d/*.conf

/run/sysctl.d/*.conf

/usr/lib/sysctl.d/*.conf

描述

在系統啟動時， systemd-sysctl.service(8) 根據上面列出的配置檔案設定 sysctl(8)[1] 核心引數。

配置檔案格式

配置檔案的格式是 一系列"KEY=VALUE"行(每行一對)。 空行以及以 "#" 或 ";" 開頭的行都將被忽略。

注意，在KEY內部，可以使用 "/" 或 "." 作為分隔符。 如果第一個分隔符是 "/" ， 那麼其餘的分隔符將保持原樣； 如果第一個分隔符是 "." ，那麼互換所有的 "/" 與 "." ； 例如，"kernel.domainname=foo" 等價於 "kernel/domainname=foo" ，都會將 "foo" 寫入 /proc/sys/kernel/domainname 引數中。 同樣的，"net.ipv4.conf.enp3s0/200.forwarding" 等價於 "net/ipv4/conf/enp3s0.200/forwarding" ， 都是指 /proc/sys/net/ipv4/conf/enp3s0.200/forwarding 引數。

sysctl.d/ 中的設定將在系統啟動的早期被應用。 針對網路介面的配置， 則會在對應的網路接口出現的時候被應用， 具體說來就是 net.ipv4.conf.*, net.ipv6.conf.*, net.ipv4.neigh.*, net.ipv6.neigh.* 引數。

許多 sysctl 引數僅在載入相應的核心模組之後才可用。 因為核心模組是按需動態載入的 (例如在插入新硬體或啟動網路時)， 所以在系統啟動早期執行的 systemd-sysctl.service(8) 無法設定那些依賴於特定核心模組的引數。 對於這些引數， 首選的方法是通過 udev(7) 規則來設定， 次選的方法是將這些模組新增到 modules-load.d(5) 中， 因為 modules-load.d(5) 中的模組會在執行 systemd-sysctl.service(8) 前被無條件的靜態載入(參見"例子"小節)。

配置目錄及其優先順序

配置檔案依次從 /etc/, /run/, /usr/lib/ 目錄中讀取。 配置檔案的名稱必須符合 filename.conf 格式。 對於不同目錄下的同名配置檔案，僅以優先順序最高的目錄中的那一個為準。 具體說來就是： /etc/ 的優先順序最高、 /run/ 的優先順序居中、 /usr/lib/ 的優先順序最低。

軟體包應該將自帶的配置檔案安裝在 /usr/lib/ 目錄中。 /etc/ 目錄僅供系統管理員使用。 所有的配置檔案(無論位於哪個目錄中)，統一按照檔名的字典順序處理。 如果在多個配置檔案中設定了同一個選項， 那麼僅以檔名最靠後(字典順序)的那一個為準。 為了便於排序，建議給所有配置檔案 都加上兩位十進位制數字的檔名字首。

如果系統管理員想要遮蔽 /usr/lib/ 目錄中的某個配置檔案， 那麼最佳做法是在 /etc/ 目錄中 建立一個指向 /dev/null 的同名符號連結， 即可徹底遮蔽 /usr/lib/ 目錄中的同名檔案。 如果軟體包自帶的某個配置檔案位於 initrd 映象中， 那麼還必須重新生成 initrd 映象。

例子

Example 1. 設定核心YP域名

/etc/sysctl.d/domain-name.conf:

    kernel.domainname=example.com

Example 2. 利用udev規則設定動態核心模組的引數(方法一)

/etc/udev/rules.d/99-bridge.rules:

    ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \
          RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/bridge"

/etc/sysctl.d/bridge.conf:

    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0

因為此方法在載入模組的同時設定模組的引數， 所以僅在載入 br_netfilter 模組之後才能過濾橋接包， 若不想過濾橋接包， 只要不載入 br_netfilter 模組即可。

Example 3. 利用 modules-load.d 目錄設定動態核心模組的引數(方法二)

/etc/modules-load.d/bridge.conf:

    br_netfilter

/etc/sysctl.d/bridge.conf:

    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0

因為此方法總是無條件的載入 br_netfilter 模組， 並且總是無條件的設定模組的引數， 所以總是無條件的過濾橋接包，若不想過濾橋接包， 必須主動解除安裝 br_netfilter 模組。

參見

systemd(1), systemd-sysctl.service(8), systemd-delta(1), sysctl(8)[1], sysctl.conf(5), modprobe(8)

NOTES

1.  sysctl(8)
    [set $man.base.url.for.relative.links]//man/sysctl.html

跋
本頁面中文版由中文 man 手冊頁計劃提供。

翻譯人員：金步國
金步國作品集：http://www.jinbuguo.com
中文 man 手冊頁計劃：https://github.com/man-pages-zh/manpages-zh