Linux系統(tǒng)是一個(gè)多用戶、多進(jìn)程的操作系統(tǒng),并且,它提供了眾多的系統(tǒng)和網(wǎng)絡(luò)服務(wù)給用戶使用。因此,從應(yīng)用角度來(lái)說(shuō),它不可避免地需要對(duì)大量的應(yīng)用及其用戶進(jìn)行安全認(rèn)證,只有通過(guò)了安全認(rèn)證的用戶才能合理、合法地使用相應(yīng)的系統(tǒng)和網(wǎng)絡(luò)服務(wù)。PAM機(jī)制是一個(gè)非常成熟的安全認(rèn)證機(jī)制,可以為L(zhǎng)inux多種應(yīng)用提供安全、可靠的認(rèn)證服務(wù)。本文將對(duì)PAM機(jī)制的原理、配置及其應(yīng)用進(jìn)行詳細(xì)介紹,用戶可以高效地使用該技術(shù)保證Linux系統(tǒng)的安全。linux操作系統(tǒng)
1 PAM認(rèn)證機(jī)制簡(jiǎn)介
為安全起見(jiàn),計(jì)算機(jī)系統(tǒng)只有經(jīng)過(guò)授權(quán)的合法用戶才能訪問(wèn),在這里如何正確鑒別用戶的真實(shí)身份是一個(gè)關(guān)鍵的問(wèn)題。所謂用戶鑒別,就是用戶向系統(tǒng)以一種安全的方式提交自己的身份證明,然后由系統(tǒng)確認(rèn)用戶的身份是否屬實(shí)的過(guò)程。換句話說(shuō),用戶鑒別是系統(tǒng)的門(mén)戶,每個(gè)用戶進(jìn)入到系統(tǒng)中都必須經(jīng)過(guò)鑒別這一道關(guān)。linux 命令
Linux學(xué)習(xí)
嵌入式認(rèn)證模塊(PAM)機(jī)制采用模塊化設(shè)計(jì)和插件功能,使得我們可以輕易地在應(yīng)用程序中插入新的鑒別模塊或替換原先的組件,而不必對(duì)應(yīng)用程序做任何修改,從而使軟件的定制、維持和升級(jí)更加輕松,因?yàn)殍b別機(jī)制與應(yīng)用程序之間相對(duì)獨(dú)立。應(yīng)用程序可以通過(guò)PAM API方便的使用PAM提供的各種鑒別功能,而不必了解太多的底層細(xì)節(jié)。
此外,PAM的易用性也較強(qiáng),主要表現(xiàn)在它對(duì)上層屏蔽了鑒別的具體細(xì)節(jié),所以用戶不必被迫學(xué)習(xí)各種各樣的鑒別方式,也不必記住多個(gè)口令;又由于它實(shí)現(xiàn)了多鑒別機(jī)制的集成問(wèn)題,所以單個(gè)程序可以輕易集成多種鑒別機(jī)制如Kerberos鑒別機(jī)制和Diffie-Hellman鑒別機(jī)制等,但用戶仍可以用同一個(gè)口令登錄而感覺(jué)不到采取了各種不同鑒別方法。Linux學(xué)習(xí)
在廣大開(kāi)發(fā)人員的努力下,各版本的UNIX系統(tǒng)陸續(xù)提供對(duì)PAM的支持。其中,Linux-PAM(Pluggable Authentication Modules for Linux)是專門(mén)為L(zhǎng)inux操作系統(tǒng)實(shí)現(xiàn)的,包括Debian Linux 2.2、Turbo Linux 3.6、Red Hat Linux 5.0以及SuSE Linux6.2及它們的后續(xù)版本都提供對(duì)PAM的支持。FreeBSD從3.1版開(kāi)始支持PAM。需要注意的是:除了具體實(shí)現(xiàn)不同外,各種版本Unix 系統(tǒng)上的PAM的框架是相同的,所以本文介紹的Linux-PAM框架知識(shí)具有普遍性。
2 Linux-PAM的配置 Linux大全
Linux-PAM的目標(biāo)就是為系統(tǒng)管理者提供最大限度的靈活性。系統(tǒng)管理者可以通過(guò)兩種形式對(duì)Linux-PAM進(jìn)行配置:?jiǎn)我慌渲梦募?/etc/pam.conf;或者是/etc/pam.d/目錄。下面我們將討論其配置文件的語(yǔ)法,接著給出一些實(shí)際應(yīng)用的例子,以供讀者參考。
2.1 Linux-PAM單一配置文件的語(yǔ)法
通過(guò)圖1讀者可能會(huì)注意到,配置文件也放在了在應(yīng)用接口層中,它與 PAM API 配合使用,從而達(dá)到了在應(yīng)用中靈活插入所需鑒別模塊的目的。它的作用主要是為應(yīng)用選定具體的鑒別模塊,模塊間的組合以及規(guī)定模塊的行為。
在使用該配置文件前,讀者首先應(yīng)該明白Linux-PAM的記號(hào)是大小寫(xiě)敏感的。有兩個(gè)特殊的符號(hào):“#”和“.”。配置文件中的注釋以#開(kāi)頭,一般配置文件中每行是一個(gè)入口(除注釋外),但是如果某個(gè)入口的定義很長(zhǎng),可以通過(guò)使用轉(zhuǎn)義符回行,而下一行也被看作是這個(gè)入口的一部分。
一般/etc/pam.conf文件每行的格式如下:交流Linux技巧
service-name module-type control-flag module-path arguments
其中,每個(gè)字符段的具體含義如下:
service-name:為這個(gè)入口分配的服務(wù)名。通常這是給定應(yīng)用程序的會(huì)話名。例如:ftpd、rlogind、su等等。Linux-PAM還為默認(rèn)的驗(yàn)證機(jī)制保留一個(gè)特殊的服務(wù)名,就是ohter,大小寫(xiě)均可。另外,如果某個(gè)模塊指定了以命名的服務(wù),那other就應(yīng)該被忽略。
modle-type:Linux-PAM當(dāng)前有四種類型的模塊:Linux下載auth:這種類型的模塊為用戶驗(yàn)證提供兩方面的服務(wù):讓?xiě)?yīng)用程序提示用戶輸入密碼或者其它的標(biāo)記,確認(rèn)用戶的合法性;通過(guò)它的憑證許可權(quán)限,設(shè)定組成員關(guān)系或者其它優(yōu)先權(quán)。
account:這類模塊執(zhí)行基于非驗(yàn)證的賬戶管理。它主要用來(lái)限制/允許用戶對(duì)某個(gè)服務(wù)的訪問(wèn)時(shí)間,當(dāng)前有效的系統(tǒng)資源(最多可以有多少個(gè)用戶),限制用戶的位置(例如:root用戶只能從控制臺(tái)登錄)。
session:這類模塊的主要用途是處理為用戶提供服務(wù)之前/后需要做的一些事情,包括:記錄打開(kāi)/關(guān)閉數(shù)據(jù)的信息,監(jiān)視目錄等。
password:用來(lái)升級(jí)用戶驗(yàn)證標(biāo)記。
control-flag:控制標(biāo)志用來(lái)設(shè)置驗(yàn)證成功或者失敗后PAM需要作出的反應(yīng)。因?yàn)槟K可以層疊,控制標(biāo)志可以決定每個(gè)模塊的重要性。應(yīng)用程序不會(huì)意識(shí)到單個(gè)模塊成功或者失敗,它只會(huì)收到Linux-PAM庫(kù)成功或者失敗的綜合反應(yīng)信息。
層疊模塊的執(zhí)行順序取決于/etc/pam.conf文件的入口順序,入口列前的模塊先執(zhí)行。從Linux-PAM 6.0開(kāi)始可以使用兩種語(yǔ)法定義控制標(biāo)志。簡(jiǎn)單的一種是使用單一關(guān)鍵詞定義控制標(biāo)志。有四個(gè)這樣的關(guān)鍵詞:required、requisite、 sufficient和optional。Linux-PAM通過(guò)如下方式解釋這些關(guān)鍵詞:
required:表示即使某個(gè)模塊對(duì)用戶的驗(yàn)證失敗,也要等所有的模塊都執(zhí)行完畢之后,PAM才返回錯(cuò)誤信息。這樣做是為了不讓用戶知道被哪個(gè)模塊拒絕。如果對(duì)用戶驗(yàn)證成功,所有的模塊都會(huì)返回成功信息。
requisite:如果特定的模塊對(duì)用戶的驗(yàn)證失敗,PAM馬上返回一個(gè)錯(cuò)誤信息,把控制權(quán)交回應(yīng)用程序,不再執(zhí)行其它模塊進(jìn)行驗(yàn)證。
sufficient:表示如果一個(gè)用戶通過(guò)這個(gè)模塊的驗(yàn)證,PAM結(jié)構(gòu)就立刻返回驗(yàn)證成功信息,把控制權(quán)交會(huì)應(yīng)用程序。后面的層疊模塊即使使用requisite或者required控制標(biāo)志,也不再執(zhí)行。如果驗(yàn)證失敗sufficient的作用和optional相同。
optional:表示即使本行指定的模塊驗(yàn)證失敗,也允許用戶享受應(yīng)用程序提供的服務(wù)。使用這個(gè)標(biāo)志,PAM框架會(huì)忽略這這個(gè)模塊產(chǎn)生的驗(yàn)證錯(cuò)誤,繼續(xù)順序執(zhí)行下一個(gè)層疊模塊。
module-path:PAM驗(yàn)證模塊的路徑。如果以/開(kāi)頭,就表示是完整的路徑;如果不是以/打頭,就表示是相對(duì)于/usr/lib/security的相對(duì)路徑。
args:傳遞給模塊的參數(shù)。類似于通常的Linux Shell命令行參數(shù)。有效的參數(shù)包括一些通用參數(shù)和特定于給定模塊的參數(shù)。無(wú)效的參數(shù)將被忽略,并會(huì)把錯(cuò)誤信息記錄到syslog。
需要特別注意:配置文件中的任何一行錯(cuò)誤都會(huì)導(dǎo)致驗(yàn)證失敗,同時(shí)相關(guān)錯(cuò)誤信息被記錄到syslog。
舉一個(gè)簡(jiǎn)單的例子如下:
Login auth required pam_unix.so debug
Login auth required pam_kerb.so use_mapped_pass
Login auth optional pam_rsa.so use_first_pass
這樣,當(dāng)login程序執(zhí)行時(shí)先用pam_unix.so模塊即傳統(tǒng)的UNIX口令方式鑒別用戶,然后再調(diào)用pam_kerb.so模塊即 Kerberos對(duì)用戶進(jìn)行鑒別,最后用pam_rsa.so模塊即RSA方式鑒別用戶。在按上述順序鑒別用戶的過(guò)程中,如果pam_unix.so模塊鑒別失敗,它將繼續(xù)調(diào)用下面的模塊進(jìn)行鑒別而非立刻向login程序返回錯(cuò)誤消息;
pam_kerb.so模塊也按同樣方式處理,直到順序處理完最后一個(gè)pam_rsa.so模塊后,PAM才將前面出現(xiàn)的錯(cuò)誤信息返回給 login程序。對(duì)于該配置,即使pam_rsa.so模塊順利通過(guò),只要pam_unix.so模塊和pam_kerb.so模塊中有一個(gè)出現(xiàn)錯(cuò)誤,用戶就不能通過(guò)鑒別;相反,即使pam_rsa.so模塊失敗,只要pam_unix.so模塊和pam_kerb.so模塊都通過(guò)了,用戶也能通過(guò)鑒別。
聯(lián)系客服