LPI Linux 認證/LPIC2 考試 202/網路客戶端管理
|
|
- DHCP 配置
- NIS 配置
- LDAP 配置
- PAM 身份驗證
- DHCP 配置
描述:考生應能夠配置 DHCP 伺服器並設定預設選項,建立子網和建立動態分配的範圍。此目標包括新增靜態主機,設定單個主機的選項,以及新增 BOOTp 主機。還包括配置 DHCP 中繼代理,並在更改後重新載入 DHCP 伺服器。
關鍵檔案,術語和實用程式包括
dhcpd.conf dhcpd.leases
大多數閱讀本文的人已經瞭解 DHCP 協議。只是作為一個快速的提醒。DHCP 代表動態主機配置協議,通常用於在網路中分發特定的網路設定。例如預設閘道器、名稱伺服器、IP 地址等等。
關於協議本身的一個小例子。
<在此插入關於 DHCP 請求的示意圖>
安裝 dhcpd 後,主配置檔案可以在 /etc/dhcpd.conf 中找到。對於 Debian 安裝,應在安裝完成後立即編輯 /etc/default/dhcp,並根據您的設定更改以下行。
INTERFACES="eth1" # or "eth1 eth2", whatever interfaces you wish to serve ip's.
dhcpd.conf 檔案分為全域性引數和子網特定引數。每個子網都可以覆蓋全域性引數。最常用的引數如下。
option domain-name "example.com";
option domain-name-servers "192.168.0.1, 193.190.63.172"
option subnet-mask 255.255.255.0; # global Subnet mask
default-lease-time 600; # Seconds each DHCP lease is granted and after which a request for the same ip is launched.
max-lease-time 7200; # If DHCP server does not respond, keep IP till 7200 seconds are passed.
subnet 192.168.0.0 netmask 255.255.255.240 { # Subnet for first 13 devices, 10 of which are servers, 3 printers
range 192.168.0.10 192.168.0.13; # Range of IP's for our printers
option subnet-mask 255.255.255.240;
option broadcast-address 192.168.0.15; # This is the subnets broadcast address
option routers 192.168.0.14; # The gateway of this subnet
option time-servers 192.168.0.14; # Gateway is running a timeserver
option ntp-servers 192.168.0.14; # Gateway running a timeserver
}
subnet 192.168.0.16 netmask 255.255.255.224 { # Subnet for 29 computers
range 192.168.0.17 192.168.0.45;
option subnet-mask 255.255.255.224;
option broadcast-address 192.168.0.47;
option routers 192.168.0.46;
}
group {
host server1 { # the first fixed server for subnet 192.168.0.0/28
server-name server1;
hardware ethernet 0f:45:d3:23:11:90;
fixed-address 192.168.0.1;
}
host server2 {
server-name server2;
hardware ethernet 0f:45:d3:23:11:91;
fixed-address 192.168.0.2;
}
}
此示例只是提供關於可能的選項和覆蓋的提示。
更多資訊可以在 dhcpd.conf 和 dhcp-options 的手冊頁中找到。在這些頁面中查詢有關使用 DHCP 伺服器來提供 BOOTP 的資訊,這對無盤客戶端很有用。
描述:考生應能夠配置 NIS 伺服器併為主要配置檔案建立 NIS 地圖。此目標包括將系統配置為 NIS 客戶端,設定 NIS 從伺服器,以及配置在 nsswitch.conf 中搜索本地檔案、DNS、NIS 等等的能力。
關鍵檔案,術語和實用程式包括
nisupdate, ypbind, ypcat, ypmatch, ypserv, ypswitch, yppasswd, yppoll, yppush, ypwhich, rpcinfo nis.conf, nsswitch.conf, ypserv.conf /etc/nis/netgroup /etc/nis/nicknames /etc/nis/securenets
NIS 代表網路資訊服務。它的目的是向網路上的所有機器提供必須在整個網路中都知道的資訊。NIS 可能會分發的資訊包括登入名/密碼/主目錄 (/etc/passwd) 和組資訊 (/etc/group)
例如,如果您的密碼條目記錄在 NIS passwd 資料庫中,您將能夠登入網路上所有執行 NIS 客戶端程式的機器。
在一個網路中,必須至少有一臺機器充當 NIS 伺服器。您可以有多個 NIS 伺服器,每個伺服器服務不同的 NIS “域” - 或者您可以有協作的 NIS 伺服器,其中一臺是主 NIS 伺服器,所有其他伺服器都是所謂的從 NIS 伺服器(針對某個 NIS “域” 而言!)- 或者您也可以混合使用它們...
從伺服器只儲存 NIS 資料庫的副本,並在主 NIS 伺服器的資料庫發生更改時從主 NIS 伺服器接收這些副本。根據網路中機器的數量和網路的可靠性,您可能決定安裝一個或多個從伺服器。每當 NIS 伺服器出現故障或響應請求的速度過慢時,連線到該伺服器的 NIS 客戶端將嘗試查詢一個正常執行的或響應速度更快的伺服器。
NIS 資料庫採用 DBM 格式,源自 ASCII 資料庫。例如,檔案 /etc/passwd 和 /etc/group 可以使用 ASCII 到 DBM 的翻譯軟體(“makedbm”,包含在伺服器軟體中)直接轉換為 DBM 格式。主 NIS 伺服器應該同時具有 ASCII 資料庫和 DBM 資料庫。
從伺服器將收到對 NIS 地圖的任何更改的通知(透過“yppush”程式),並自動檢索必要的更改以同步其資料庫。NIS 客戶端不需要這樣做,因為它們總是與 NIS 伺服器對話以讀取儲存在其 DBM 資料庫中的資訊。
要執行下面提到的任何軟體,您需要執行程式 /usr/sbin/portmap。RPC 埠對映器 (portmap(8)) 是一個將 RPC 程式號轉換為 TCP/IP(或 UDP/IP)協議埠號的伺服器。它必須執行才能對該機器上的 RPC 伺服器(如 NIS 或 NIS+ 伺服器)進行 RPC 呼叫(這是 NIS/NIS+ 客戶端軟體所做的)。當 RPC 伺服器啟動時,它會告訴埠對映器它正在監聽哪個埠號,以及它準備服務哪些 RPC 程式號。當客戶端希望對給定程式號進行 RPC 呼叫時,它首先會聯絡伺服器機器上的埠對映器以確定應傳送 RPC 資料包的埠號。
由於 RPC 伺服器可能由 inetd(8) 啟動,因此埠對映器應該在 inetd 啟動之前執行。對於安全的 RPC,埠對映器需要時間服務。確保時間服務在所有主機的 /etc/inetd.conf 中啟用
# Time service is used for clock synchronization. # time stream tcp nowait root internal time dgram udp wait root internal
重要:不要忘記在更改其配置檔案後重啟 inetd!
設定 NIS 需要什麼?
確定您是伺服器、從伺服器還是客戶端:您的機器將成為具有現有 NIS 伺服器的網路的一部分您網路中還沒有任何 NIS 伺服器
在第一種情況下,您只需要客戶端程式 (ypbind、ypwhich、ypcat、yppoll、ypmatch)。最重要的程式是 ypbind。該程式必須始終執行,這意味著它應該始終出現在程序列表中。它是一個守護程序,需要從系統的啟動檔案(例如 /etc/init.d/nis、/sbin/init.d/ypclient、/etc/rc.d/init.d/ypbind、/etc/rc.local)啟動。一旦 ypbind 執行,您的系統就變成了 NIS 客戶端。
在第二種情況下,如果您沒有 NIS 伺服器,那麼您還需要一個 NIS 伺服器程式(通常稱為 ypserv)。第 9 節描述瞭如何在您的 Linux 機器上使用“ypserv”守護程序設定 NIS 伺服器。
ypbind 守護程序
較新的 ypbind 版本有一個配置檔案叫做 /etc/yp.conf。你可以在裡面硬編碼 NIS 伺服器 - 更多資訊請參見 ypbind(8) 手冊頁。你還需要這個檔案用於 NYS。一個例子
ypserver 10.10.0.1 ypserver 10.0.100.8 ypserver 10.3.1.1
如果系統能夠在沒有 NIS 的情況下解析主機名,你可以使用主機名,否則你必須使用 IP 地址。ypbind 3.3 有一個 bug,只會使用最後一個條目(例如 ypserver 10.3.1.1)。所有其他條目都會被忽略。ypbind-mt 會正確處理這個問題,並使用第一個響應的條目。
在將 ypbind 納入啟動檔案之前,最好測試一下它。要測試 ypbind,請執行以下操作
確保你已經設定了 YP 域名。如果沒有設定,請執行以下命令:/bin/domainname nis.domain
其中 nis.domain 應該是一個 _不_ 通常與你的機器的 DNS 域名相關的字串!這樣做是為了讓外部攻擊者更難從你的 NIS 伺服器獲取密碼資料庫。如果你不知道你的網路上的 NIS 域名是什麼,請諮詢你的系統/網路管理員。
如果 "/usr/sbin/portmap" 還沒有執行,請啟動它。如果目錄 "/var/yp" 不存在,請建立它。啟動 "/usr/sbin/ypbind"
使用命令 "rpcinfo -p localhost" 檢查 ypbind 是否已成功向 portmapper 註冊其服務。輸出應該像
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100007 2 udp 637 ypbind
100007 2 tcp 639 ypbind
或者像這樣(取決於你使用的 ypbind 版本)
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100007 2 udp 758 ypbind
100007 1 udp 758 ypbind
100007 2 tcp 761 ypbind
100007 1 tcp 761 ypbind
你也可以執行 "rpcinfo -u localhost ypbind"。這個命令應該產生類似於
program 100007 version 1 ready and waiting
program 100007 version 2 ready and waiting
輸出取決於你安裝的 ypbind 版本。重要的是隻有 "version 2" 訊息。現在你應該能夠使用 NIS 客戶端程式,如 ypcat 等。例如,"ypcat passwd.byname" 將會顯示整個 NIS 密碼資料庫。
重要:如果你跳過了測試步驟,請確保你已經設定了域名,並建立了目錄 /var/yp。這個目錄 _必須_ 存在,才能使 ypbind 成功啟動。要檢查域名是否設定正確,請使用 yp-tools 2.2 中的 /bin/ypdomainname。它使用 yp_get_default_domain() 函式,該函式更加嚴格。它不允許例如 "(none)" 域名,這是 Linux 下的預設值,會導致很多問題。
如果測試成功,你可能需要更改你的啟動檔案,以便 ypbind 在引導時啟動,你的系統將充當 NIS 客戶端。確保在啟動 ypbind 之前設定域名。好了,就是這樣。重啟機器,觀察引導訊息,看看 ypbind 是否真的啟動了。對於主機查詢,你必須在 /etc/host.conf 檔案中的查詢順序行中設定(或新增)"nis"。更多詳細資訊,請閱讀手冊頁 "resolv+.8"。在你的 NIS 客戶端的 /etc/passwd 檔案中新增以下行
+::::::
你也可以使用 + 和 - 字元來包含/排除或更改使用者。如果你想排除使用者 guest,只需在你的 /etc/passwd 檔案中新增 -guest。你想為使用者 "linux" 使用不同的 shell(例如 ksh)?沒問題,只需在你的 /etc/passwd 檔案中新增 "+linux::::::/bin/ksh"(不帶引號)。你不希望更改的欄位必須留空。你也可以使用 Netgroups 來控制使用者。
例如,要允許只有 miquels、dth 和 ed 以及 sysadmin netgroup 的所有成員登入,但讓所有其他使用者的帳戶資料可用,請使用
+miquels:::::::
+ed:::::::
+dth:::::::
+@sysadmins:::::::
-ftp
+:*::::::/etc/NoShell
請注意,在 Linux 中,你也可以覆蓋密碼欄位,就像我們在本例中所做的那樣。我們還刪除了登入 "ftp",因此它不再存在,匿名 ftp 將無法工作。netgroup 將如下所示
sysadmins (-,software,) (-,kukuk,)
網路服務切換檔案 /etc/nsswitch.conf 決定了在請求特定資訊時執行查詢的順序,就像 /etc/host.conf 檔案決定主機查詢的方式一樣。例如,行
hosts: files nis dns
指定主機查詢函式應首先在本地 /etc/hosts 檔案中查詢,然後是 NIS 查詢,最後是域名服務(/etc/resolv.conf 和 named),如果找不到匹配項,則返回錯誤。該檔案必須對所有使用者可讀!你可以在手冊頁 nsswitch.5 或 nsswitch.conf.5 中找到更多資訊。
適用於 NIS 的良好的 /etc/nsswitch.conf 檔案是
# /etc/nsswitch.conf passwd: compat group: compat
# For libc5, you must use shadow: files nis shadow: compat passwd_compat: nis group_compat: nis shadow_compat: nis hosts: nis files dns services: nis [NOTFOUND=return] files networks: nis [NOTFOUND=return] files protocols: nis [NOTFOUND=return] files rpc: nis [NOTFOUND=return] files ethers: nis [NOTFOUND=return] files netmasks: nis [NOTFOUND=return] files netgroup: nis bootparams: nis [NOTFOUND=return] files publickey: nis [NOTFOUND=return] files automount: files aliases: nis [NOTFOUND=return] files
伺服器程式 ypserv
如果你執行伺服器作為主伺服器,請確定你需要透過 NIS 提供哪些檔案,然後在 /var/yp/Makefile 中的 "all" 規則中新增或刪除相應的條目。你應該始終檢視 Makefile 並編輯檔案開頭的 Options。
ypserv 1.1 和 ypserv 1.2 之間有一個重大變化。從 1.2 版本開始,檔案控制代碼被快取。這意味著如果你建立新的對映,你必須始終使用 -c 選項呼叫 makedbm。確保你使用的是 ypserv 1.2 或更高版本中的新 /var/yp/Makefile,或者在 Makefile 中向 makedbm 新增 -c 標誌。如果你沒有這樣做,ypserv 將繼續使用舊的對映,而不是更新的對映。
現在編輯 /var/yp/securenets 和 /etc/ypserv.conf。更多資訊,請閱讀 ypserv(8) 和 ypserv.conf(5) 手冊頁。
確保 portmapper (portmap(8)) 正在執行,然後啟動伺服器 ypserv。命令 « rpcinfo -u localhost ypserv » 應該輸出類似於
program 100004 version 1 ready and waiting program 100004 version 2 ready and waiting
“version 1” 行可能缺失,具體取決於你使用的 ypserv 版本和配置。只有在你有舊的 SunOS 4.x 客戶端時才需要它。
現在生成 NIS (YP) 資料庫。在主伺服器上執行
% /usr/lib/yp/ypinit -m
在從伺服器上確保 ypwhich -m 工作。這意味著,你的從伺服器必須配置為 NIS 客戶端,然後你才能執行 « /usr/lib/yp/ypinit -s masterhost » 將主機安裝為 NIS 從伺服器。就這樣,你的伺服器已啟動並執行。
如果你遇到更大的問題,你可以在不同的 xterm 中以除錯模式啟動 ypserv 和 ypbind。除錯輸出應該會顯示問題所在。
如果你需要更新對映,請在 NIS 主伺服器的 /var/yp 目錄中執行 make。這將更新對映(如果原始檔較新),並將檔案推送到從伺服器。請不要使用 ypinit 來更新對映。你可能需要編輯從伺服器上的 root 的 crontab,並新增以下行
20 * * * * /usr/lib/yp/ypxfr_1perhour
40 6 * * * /usr/lib/yp/ypxfr_1perday
55 6,18 * * * /usr/lib/yp/ypxfr_2perday
這將確保大多數 NIS 對映保持最新,即使在從伺服器在主伺服器上更新時處於關閉狀態而導致更新丟失的情況下也是如此。
你可以在以後隨時新增從伺服器。首先,確保新從伺服器有權聯絡 NIS 主伺服器。然後執行
% /usr/lib/yp/ypinit -s masterhost
在新的從伺服器上。在主伺服器上,將新從伺服器名稱新增到 /var/yp/ypservers,並在 /var/yp 中執行 make 以更新對映。
rpc.ypxfrd 用於加快將非常大的 NIS 對映從 NIS 主伺服器傳輸到 NIS 從伺服器的速度。如果 NIS 從伺服器收到一條訊息,表明有一個新的對映,它將啟動 ypxfr 來傳輸新對映。ypxfr 將使用 yp_all() 函式從主伺服器讀取對映的內容。當有非常大的對映需要由資料庫庫儲存時,此過程可能需要幾分鐘。
rpc.ypxfrd 伺服器透過允許 NIS 從伺服器簡單地複製主伺服器的對映檔案而不是從頭開始構建自己的對映檔案來加快傳輸過程。rpc.ypxfrd 使用基於 RPC 的檔案傳輸協議,因此不需要構建新的對映。
rpc.ypxfrd 可以由 inetd 啟動。但由於它的啟動速度很慢,因此應該與 ypserv 一起啟動。你只需要在 NIS 主伺服器上啟動 rpc.ypxfrd。
每當使用者更改密碼時,NIS 密碼資料庫以及可能依賴於 NIS 密碼資料庫的其他 NIS 資料庫都應該更新。程式 "rpc.yppasswdd" 是一個處理密碼更改的伺服器,確保 NIS 資訊將相應更新。rpc.yppasswdd 現在已整合到 ypserv 中。你不需要更舊的單獨的 yppasswd-0.9.tar.gz 或 yppasswd-0.10.tar.gz,也不應該再使用它們。ypserv 1.3.2 中的 rpc.yppasswdd 具有完整的 shadow 支援。yppasswd 現在是 yp-tools-2.2.tar.gz 的一部分。
您只需要在 NIS 主伺服器上啟動 rpc.yppasswdd。預設情況下,使用者不允許更改其全名或登入 Shell。您可以使用 -e chfn 或 -e chsh 選項允許這樣做。如果您的 passwd 和 shadow 檔案不在 /etc 以外的目錄中,則需要新增 -D 選項。例如,如果您將所有原始檔放在 /etc/yp 中,並希望允許使用者更改其 Shell,則需要使用以下引數啟動 rpc.yppasswdd
rpc.yppasswdd -D /etc/yp -e chsh
或
rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh
您無需再做任何事情。您只需要確保 rpc.yppasswdd 使用與 /var/yp/Makefile 相同的檔案。錯誤將使用 syslog 記錄。
如果一切正常(應該如此),您可以使用一些簡單的命令來驗證您的安裝。假設您的 passwd 檔案由 NIS 提供,則命令
% ypcat passwd
應該會給出 NIS passwd 檔案的內容。命令
% ypmatch userid passwd
(其中 userid 是任意使用者的登入名)應該會給出使用者在 NIS passwd 檔案中的條目。"ypcat" 和 "ypmatch" 程式應該包含在您的傳統 NIS 或 NYS 發行版中。在伺服器和客戶端上正確配置 NIS 後,您需要確保配置在重新引導後仍然有效。在 RedHat 上,在 /etc/sysconfig/network 檔案中建立或修改變數 NISDOMAIN。
=== 練習 ===.
關鍵術語、檔案和實用程式:Slapd slapd.conf
== PAM 身份驗證 == 測試
PAM(可插拔身份驗證模組)是一種靈活的使用者身份驗證機制。從 UNIX 的誕生之日起,使用者身份驗證就一直透過使用者輸入密碼並由系統檢查輸入的密碼是否與儲存在 /etc/passwd 中的加密官方密碼相符來實現。這個想法是,如果使用者能正確輸入其秘密密碼,那麼使用者*就是*該使用者。這是最初的情況。從那時起,許多新的使用者身份驗證方法變得流行起來。包括對 /etc/passwd 檔案的更復雜的替換,以及硬體裝置智慧卡等。問題是,每次開發新的身份驗證方案時,都需要重寫所有必要的程式(login、ftpd 等),以支援它。PAM 提供了一種開發獨立於身份驗證方案的程式的方法。這些程式需要在執行時附加 "身份驗證模組" 才能工作。要附加哪個身份驗證模組取決於本地系統設定,由本地系統管理員自行決定。PAM 身份驗證 Linux-PAM(Linux 的可插拔身份驗證模組)是一套共享庫,使本地系統管理員可以選擇應用程式如何驗證使用者身份。換句話說,在不(重寫和)重新編譯支援 PAM 的應用程式的情況下,可以切換它使用的身份驗證機制。實際上,人們可以完全升級本地身份驗證系統,而無需觸及應用程式本身。歷史上,需要對給定使用者進行身份驗證的應用程式必須編譯為使用特定的身份驗證機制。例如,在傳統的 UN*X 系統中,使用者身份的驗證是透過使用者輸入正確的密碼來完成的。這個密碼在加上兩個字元的 ``salt 後,被加密(使用 crypt(3))。然後,如果這個加密密碼與使用者在系統密碼資料庫(/etc/passwd 檔案)中的條目中的第二個欄位相同,則對使用者進行身份驗證。在這些系統上,大多數(如果不是全部)形式的許可權都是根據這種單一的身份驗證方案授予的。許可權以個人使用者識別符號 (uid) 和各種組的成員資格的形式出現。根據使用者的個人和組身份提供服務和應用程式。傳統上,組成員資格是根據 /etc/group 檔案中的條目分配的。 PAM 身份驗證 不幸的是,計算機速度的提高和網路計算的廣泛引入,使曾經安全的身份驗證機制(如這種機制)變得容易受到攻擊。鑑於此類現實,新的身份驗證方法不斷湧現。Linux-PAM 專案的目的是將許可權授予軟體的開發與安全且適當的身份驗證方案的開發分開。這是透過提供一個函式庫來實現的,應用程式可以使用該庫來請求對使用者進行身份驗證。這個 PAM 庫在本地配置了一個系統檔案 /etc/pam.conf(或位於 /etc/pam.d/ 中的一系列配置檔案),透過本地可用的身份驗證模組對使用者請求進行身份驗證。模組本身通常位於 /lib/security 目錄中,並採用動態載入物件檔案的形式(參見 dlopen(3))。PAM 身份驗證 概述 對於新手來說,我們先考慮一個例子。我們採用一個為使用者提供服務的應用程式;login 就是這樣的一個程式。login 做兩件事,首先它確定請求的使用者就是他們聲稱的使用者,其次它為他們提供請求的服務:在 login 的情況下,服務是執行在使用者身份下的一個命令 shell(bash、tcsh、zsh 等)。傳統上,前一步是透過 login 應用程式提示使用者輸入密碼,然後驗證密碼是否與系統上的密碼一致來實現的;因此,驗證了就係統而言,使用者就是他們聲稱的使用者。這是委託給 Linux-PAM 的任務。從應用程式程式設計師(在本例中是編寫 login 應用程式的人)的角度來看,Linux-PAM 負責處理這個身份驗證任務 - 驗證使用者身份。PAM 身份驗證 Linux-PAM 的靈活性在於,您,系統管理員,可以自由指定要使用的身份驗證方案。您可以在 Linux 系統上的任何/所有支援 PAM 的應用程式上自由設定方案。也就是說,您可以從簡單信任(pam_permit)之類的原始方法進行身份驗證,也可以從視網膜掃描、聲紋和一次性密碼的組合之類的嚴格方法進行身份驗證!為了說明您面臨的靈活性,請考慮以下情況:一名系統管理員(家長)希望提高她使用者(孩子)的數學能力。她可以配置他們的最喜歡的 ``Shoot 'em up game(當然支援 PAM)來透過要求他們提供兩個小於 12 的隨機數的乘積來對他們進行身份驗證。很明顯,如果遊戲還不錯,他們很快就會學會乘法表。隨著他們的成長,身份驗證可以升級為包括(長)除法! PAM 身份驗證 Linux-PAM 處理四種不同的(管理)任務型別。這些是:身份驗證管理;帳戶管理;會話管理;以及密碼管理。將首選的管理方案與應用程式的行為相關聯是透過相關 Linux-PAM 配置檔案中的條目實現的。管理功能由配置檔案中指定的模組執行。Linux-PAM 庫會查詢 PAM 配置檔案的內容並載入適用於應用程式的模組。這些模組分為四個管理組之一,並按照它們在配置檔案中出現的順序進行堆疊。這些模組在被 Linux-PAM 呼叫時,會為應用程式執行各種身份驗證任務。透過使用應用程式提供的對話函式,可以交換來自使用者或提供給使用者的文字資訊。PAM 身份驗證 Linux-PAM 旨在為系統管理員提供極大的靈活性,以便配置他們系統中的許可權授予應用程式。由 Linux-PAM 控制的系統安全方面的本地配置包含在兩個位置之一:單個系統檔案 /etc/pam.conf;或 /etc/pam.d/ 目錄。該檔案中的 Linux-PAM 特定標記不區分大小寫。但是,模組路徑區分大小寫,因為它們表示檔名稱,並反映了典型 Linux 檔案系統的依賴大小寫。每個模組的任何給定模組的引數的大小寫敏感性是為每個模組定義的。除了下面描述的行之外,還為系統管理員提供了兩個特殊字元以方便使用:註釋以 `#' 開頭,並擴充套件到下一行末尾;此外,模組規範行可以使用 `\' 轉義的換行符進行擴充套件。/etc/pam.conf 檔案的一般配置行具有以下形式:服務名稱模組型別控制標記模組路徑引數 PAM 身份驗證 下面,我們將解釋每個標記的含義。配置 Linux-PAM 的第二種(也是最近採用的一種)方式是透過 /etc/pam.d/ 目錄的內容。在解釋了上述標記的含義之後,我們將描述這種方法。
服務名稱與該條目關聯的服務的名稱。通常,服務名稱是給定應用程式的常規名稱。例如,`ftpd'、`rlogind' 和 `su' 等。有一個特殊的服務名稱,保留用於定義預設身份驗證機制。它的名稱為 `OTHER',可以使用小寫或大寫字元指定。請注意,當為命名的服務指定了一個模組時,`OTHER' 條目將被忽略。
PAM 身份驗證 模組型別(目前)四種模組型別之一。四種類型如下
auth;此模組型別提供使用者身份驗證的兩個方面。首先,它透過指示應用程式提示使用者輸入密碼或其他識別方式來確定使用者就是他們聲稱的使用者。其次,該模組可以透過其憑據授予屬性來授予組成員資格(獨立於上面討論的 /etc/groups 檔案)或其他特權。
account;此模組執行基於非身份驗證的帳戶管理。它通常用於根據一天中的時間、當前可用的系統資源(最大使用者數)或申請使用者的可能位置來限制/允許訪問服務 - `root' 登入僅在控制檯上進行。
session;主要地,此模組與在使用者可以獲得服務之前/之後需要執行的操作相關聯。此類操作包括記錄有關與使用者開啟/關閉某些資料交換的資訊、掛載目錄等。
password; 這種最後一個模組型別是更新與使用者關聯的身份驗證令牌所必需的。 通常,對於每個基於“挑戰/響應”的身份驗證(auth)模組型別,都有一個模組。 PAM 身份驗證控制標誌 控制標誌用於指示 PAM 庫將如何對與其關聯的模組的成功或失敗做出反應。 由於模組可以堆疊(相同型別的模組按順序執行,一個接一個),因此控制標誌決定了每個模組的相對重要性。 應用程式不會意識到 `/etc/pam.conf' 檔案中列出的各個模組的成功或失敗。 相反,它從 Linux-PAM 庫接收到一個彙總的成功或失敗響應。 這些模組的執行順序與 /etc/pam.conf 檔案中的條目順序一致; 較早的條目在較晚的條目之前執行。 從 Linux-PAM v0.60 開始,此控制標誌可以使用兩種語法之一定義。 控制標誌的更簡單(且歷史)語法是定義單個關鍵字以指示與特定模組的成功或失敗相關的關注嚴重程度。 有四個這樣的關鍵字:required、requisite、sufficient 和 optional。 PAM 身份驗證控制標誌 Linux-PAM 庫以以下方式解釋這些關鍵字: required; 這表示模組的成功對於模組型別設施的成功是必需的。 在所有剩餘的模組(相同模組型別)執行完畢之前,此模組的失敗不會對使用者顯而易見。
requisite; 與 required 相似,但是,如果這樣的模組返回失敗,則控制將直接返回到應用程式。 返回值與第一個返回失敗的 required 或 requisite 模組相關聯。 請注意,此標誌可用於防止使用者有機會在不安全的介質上輸入密碼。 可以想象,這種行為可能會通知攻擊者系統上的有效帳戶。 這種可能性應與在敵對環境中暴露敏感密碼的不可忽視的擔憂相權衡。
sufficient; 此模組的成功被認為“足夠”,以使 Linux-PAM 庫相信該模組型別已成功完成其目的。 如果之前沒有 required 模組失敗,則不會呼叫更多此型別的“堆疊”模組。 (請注意,在這種情況下,不會呼叫後續的 required 模組。)此模組的失敗不會被視為對滿足應用程式(該模組型別已成功)具有致命性。
Optional; 顧名思義,此控制標誌將模組標記為對使用者應用程式服務的成功或失敗不關鍵。 通常,Linux-PAM 在確定模組堆疊是否會成功或失敗時會忽略此類模組。 但是,如果之前或後續堆疊模組沒有明確的成功或失敗,則此模組將決定對應用程式的響應性質。 後一種情況的一個示例是,當其他模組返回類似於 PAM_IGNORE 的內容時。 PAM 身份驗證控制標誌: 更加複雜(更新)的語法更具體,併為管理員提供了對使用者身份驗證方式的很大控制。 此形式的控制標誌用方括號分隔,並由一系列 value=action 令牌組成
[value1=action1 value2=action2 ...]
這裡,valueI 是以下返回值之一:success; open_err; symbol_err; service_err; system_err; buf_err; perm_denied; auth_err; cred_insufficient; authinfo_unavail; user_unknown; maxtries; new_authtok_reqd; acct_expired; session_err; cred_unavail; cred_expired; cred_err; no_module_data; conv_err; authtok_err; authtok_recover_err; authtok_lock_busy; authtok_disable_aging; try_again; ignore; abort; authtok_expired; module_unknown; bad_item; 和 default。 這些中的最後一個(default)可用於設定未明確定義的那些返回值的操作。 actionI 可以是正整數或以下令牌之一:ignore; ok; done; bad; die; 和 reset。 當指定為操作時,正整數 J 可用於指示將跳過當前模組型別的下一個 J 個模組。 這樣,管理員可以開發一個具有多個不同執行路徑的適度複雜的模組堆疊。 透過單個模組的反應可以確定採取哪條路徑。 PAM 身份驗證
ignore - 當與模組堆疊一起使用時,模組的返回狀態不會影響應用程式獲得的返回碼。
bad - 此操作表示應將返回碼視為表明模組失敗的指示。 如果此模組是堆疊中第一個失敗的模組,則其狀態值將用於整個堆疊的狀態值。
die - 等效於 bad,並且具有終止模組堆疊和 PAM 立即返回到應用程式的副作用。
ok - 這告訴 PAM 管理員認為此返回碼應直接影響整個模組堆疊的返回碼。 換句話說,如果堆疊的前一個狀態會導致返回 PAM_SUCCESS,則模組的返回碼將覆蓋此值。 請注意,如果堆疊的前一個狀態包含一些指示模組失敗的值,則此“ok”值將不會用於覆蓋該值。
done - 等效於 ok,並且具有終止模組堆疊和 PAM 立即返回到應用程式的副作用。
reset - 清除模組堆疊狀態的所有記憶體,並從下一個堆疊模組開始重新開始。 PAM 身份驗證 以下四個關鍵字:required; requisite; sufficient; 和 optional,在 [...] 語法方面都有等效表示式。 它們如下
required 等效於 [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
requisite 等效於 [success=ok new_authtok_reqd=ok ignore=ignore default=die]
sufficient 等效於 [success=done new_authtok_reqd=done default=ignore]
optional 等效於 [success=ok new_authtok_reqd=ok default=ignore]
為了感受這種新語法的強大功能,以下是一些您可以使用它的示例。 隨著 Linux-PAM-0.63 的推出,引入了客戶端外掛代理的概念。 這使得 PAM 可以使用客戶端/伺服器應用程式固有的傳輸協議來支援機器到機器的身份驗證。 藉助“[...] value=action ... ]”控制語法,可以將應用程式配置為支援與相容客戶端的二進位制提示,但可以優雅地切換到針對較舊的遺留應用程式的替代身份驗證模式。 PAM 身份驗證
Module-path
動態可載入物件檔案的路徑名; 可插拔模組本身。 如果模組路徑的第一個字元是“/”,則假設它是一個完整路徑。 如果不是這種情況,則給定的模組路徑將附加到預設模組路徑:/lib/security
Args Args 是在呼叫模組時傳遞給模組的令牌列表。 類似於典型的 Linux shell 命令的引數。 通常,有效引數是可選的,並且特定於任何給定的模組。 無效引數被模組忽略,但是,當遇到無效引數時,模組需要向 syslog(3) 寫入錯誤。 有關通用選項列表,請參見下一節。
配置文 件 (其中之一) 中的任何格式不正確的行通常都會導致 (為謹慎起見) 身份驗證過程失敗。 使用對 syslog(3) 的呼叫將相應的錯誤寫入系統日誌檔案。 PAM 身份驗證 基於目錄的配置 從 0.56 版本開始,比單個配置檔案更靈活,可以透過 /etc/pam.d/ 目錄的內容來配置 libpam。 在這種情況下,目錄中將填充檔案,每個檔案的檔名都等於服務名稱(小寫):它是命名服務的個人配置檔案。 Linux-PAM 可以以兩種模式之一進行編譯。 首選模式使用 /etc/pam.d/ 或 /etc/pam.conf 配置,但不會同時使用兩者。 也就是說,如果存在 /etc/pam.d/ 目錄,則 libpam 僅使用此目錄中包含的檔案。 但是,如果不存在 /etc/pam.d/ 目錄,則使用 /etc/pam.conf 檔案(這很可能是您首選發行版使用的模式)。 另一種模式是按順序使用 /etc/pam.d/ 和 /etc/pam.conf。 在此模式下,/etc/pam.d/ 中的條目將覆蓋 /etc/pam.conf 中的條目。 /etc/pam.d/ 中每個檔案語法類似於 /etc/pam.conf 檔案語法,由以下形式的行組成:module-type control-flag module-path arguments 唯一的區別是沒有服務名稱。 服務名稱當然是給定配置檔案的名稱。 例如,/etc/pam.d/login 包含登入服務的配置。 PAM 身份驗證 此配置方法比單檔案方法具有許多優點。 我們在此列出它們以幫助讀者決定採用哪種方案: 降低應用程式配置錯誤的可能性。 手動編輯配置檔案時,需要輸入的欄位更少。 更易於維護。 可以重新配置一個應用程式,而不會有干擾系統上其他應用程式的風險。 可以將不同服務的配置檔案符號連結到單個檔案。 這使得更容易在不同的應用程式之間保持一致的系統訪問策略。 (請注意,為了節省空間,也可以對多個配置檔案進行硬連結。 但是,在管理此安排時應謹慎,因為編輯硬連結檔案可能會破壞連結。) 配置檔案解析速度可能更快。 只有在服務繫結到其模組時才解析相關條目。 可以使用檔案系統的檔案保護限制對各個 Linux-PAM 配置檔案的讀取訪問許可權。 包管理變得更簡單。 每次安裝新應用程式時,都可以隨附一個 /etc/pam.d/xxxxxx 檔案。 PAM 身份驗證 以下是一些任何模組都可能理解的可選引數。 引數(包括這些)通常是可選的。 Debug: 使用 syslog(3) 呼叫將除錯資訊記錄到系統日誌檔案。
no_warn : Instruct module to not give warning messages to the application. use_first_pass : The module should not prompt the user for a password. Instead, it should obtain the previously typed password (from the preceding auth module), and use that. If that doesn't work, then the user will not be authenticated. (This option is intended for auth and password modules only). try_first_pass : The module should attempt authentication with the previously typed password (from the preceding auth module). If that doesn't work, then the user is prompted for a password. (This option is intended for auth modules only). use_mapped_pass : This argument is not currently supported by any of the modules in the Linux-PAM distribution because of possible consequences associated with U.S. encryption exporting restrictions. Within the U.S., module developers are, of course, free to implement it (as are developers in other countries).
expose_account: 通常,模組採用有關使用者帳戶的一些資訊的洩露並不是一個安全的策略。 有時,諸如使用者名稱或主目錄或首選 shell 之類的資訊可用於攻擊使用者的帳戶。 但是,在某些情況下,此類資訊不被視為威脅: 在安全的環境中要求使用者輸入密碼時顯示使用者的全名也可以被稱為“友好”。 expose_account 引數是一個標準的模組引數,用於鼓勵模組在當地管理員認為適當的情況下,對帳戶資訊不那麼保密。 PAM 身份驗證 配置檔案示例條目 預設策略: 如果系統要被視為安全,那麼它最好有一個相當安全的“OTHER”條目。 以下是偏執設定(這倒不失為一個好的起點!)
- default; 拒絕訪問
OTHER auth required pam_deny.so OTHER account required pam_deny.so OTHER password required pam_deny.so OTHER session required pam_deny.so
雖然從根本上來說這是一個安全的預設設定,但這對配置錯誤的系統並不十分同情。 例如,這樣的系統很容易被鎖定,因為如果檔案其餘部分寫錯了,就會鎖定所有使用者。 pam_deny 模組不是很複雜。 例如,它在被呼叫時不會記錄任何資訊,因此,除非系統使用者在無法執行服務應用程式時聯絡管理員,否則管理員可能會在很長一段時間內不知道他的系統配置錯誤。 PAM 身份驗證 在上述示例中的那些行之前新增以下行將為管理員提供適當的警告。
- default; 醒醒! 此應用程式未配置
OTHER auth required pam_warn.so OTHER password required pam_warn.so
擁有兩個 ``OTHER auth 行是堆疊的一個示例。在使用 /etc/pam.d/ 配置的系統上,相應的預設設定可以透過以下檔案實現
- 預設配置: /etc/pam.d/other
auth required pam_warn.so auth required pam_deny.so account required pam_deny.so password required pam_warn.so password required pam_deny.so session required pam_deny.so PAM 身份驗證 在安全性較低的計算機上,系統管理員希望對 Linux-PAM 的強大功能一無所知的計算機上,以下行選擇(在 /etc/pam.conf 中)可能會模仿歷史上熟悉的 Linux 設定。
- default; 標準 UN*X 訪問
OTHER auth required pam_unix.so OTHER account required pam_unix.so OTHER password required pam_unix.so OTHER session required pam_unix.so
PAM 身份驗證 關鍵術語、檔案和實用程式 : /etc/pam.d /etc/pam.conf /lib/libpam.so.*