Linux認(rèn)證的概念 linux認(rèn)證證書有哪些
Linux認(rèn)證的概念
RHCA(Red Hat Certified Architect),是RedHat公司在2004年推出的頂級(jí)認(rèn)證,也是Linux界公認(rèn)的操作系統(tǒng)最高級(jí)認(rèn)證。下面是小編整理的關(guān)于Linux認(rèn)證的概念,歡迎大家參考!
Linux用戶認(rèn)證方法簡(jiǎn)介
當(dāng)今IT環(huán)境中,任何計(jì)算機(jī)系統(tǒng)都要充分考慮設(shè)計(jì)、使用和運(yùn)行過程中的安全性。所以在目前主流操作系統(tǒng)的各個(gè)環(huán)節(jié)當(dāng)中都增加了很多安全方面的功能和特性,而在眾多的安全特性和功能中有相當(dāng)多的技術(shù)是確保用戶鑒別和身份認(rèn)證方面的安全性的。
所謂用戶鑒別,就是用戶向系統(tǒng)以一種安全的方式提交自己的身份證明,然后由系統(tǒng)確認(rèn)用戶的身份是否屬實(shí)的過程。換句話說(shuō),用戶鑒別是系統(tǒng)的門戶,每個(gè)用戶進(jìn)入到系統(tǒng)之前都必須經(jīng)過鑒別這一道關(guān)。 而所謂認(rèn)證安全,簡(jiǎn)而言之就是計(jì)算機(jī)系統(tǒng)確認(rèn)了用戶是經(jīng)過授權(quán)的合法用戶之后才能允許訪問。安全認(rèn)證最常用的方式是比對(duì)用戶輸入和預(yù)存于數(shù)據(jù)庫(kù)中的密碼。
不過在用戶進(jìn)行身份鑒別和安全認(rèn)證的過程中,肯定會(huì)涉及幾個(gè)核心問題。例如:
如何真正實(shí)現(xiàn)正確鑒別用戶的真實(shí)身份?
在鑒別用戶合法身份之后,如何確定用戶可以對(duì)哪些資源進(jìn)行訪問?
如何控制用戶以何種方式來(lái)訪問計(jì)算機(jī)資源?
如何對(duì)用戶的安全訪問隨時(shí)隨地按需調(diào)整?
上述這些問題都是在設(shè)計(jì)鑒別和認(rèn)證程序過程中需要充分考慮和精心設(shè)計(jì)的。而在Linux類的操作系統(tǒng)中,這些問題的處理實(shí)際上有一套完整的流程和機(jī)制。
在Linux類的操作系統(tǒng)中,最初用戶鑒別過程就像各種Unix操作系統(tǒng)一樣:系統(tǒng)管理員為用戶建立一個(gè)帳號(hào)并為其指定一個(gè)口令,用戶用此指定的口令登錄之后重新設(shè)置自己的口令,這樣用戶就具有了一個(gè)只有它自己知道的口令或者密碼。一般情況下,用戶的身份信息在Linux系統(tǒng)中存放在/etc/passwd文件當(dāng)中,這實(shí)際上是一個(gè)擁有簡(jiǎn)單格式的數(shù)據(jù)庫(kù)表,通過":"作為分隔符分隔出多個(gè)字段,其中包括用戶的名稱、用戶ID、組ID、用戶說(shuō)明、主目錄和登錄使用的shell等相關(guān)信息。而用戶口令經(jīng)過加密處理后存放于/etc/shadow 文件中。也是一個(gè)格式類似的數(shù)據(jù)庫(kù)表,除了用戶名和經(jīng)過加密之后的密碼之外,還包括多個(gè)對(duì)密碼有效期進(jìn)行定義的字段,包括密碼有效時(shí)間、密碼報(bào)警時(shí)間等。
用戶登錄的時(shí)候,登錄服務(wù)程序提示用戶輸入其用戶名和口令,然后將口令加密并與/etc/shadow 文件中對(duì)應(yīng)帳號(hào)的加密口令進(jìn)行比較,如果口令相匹配,說(shuō)明用戶的身份屬實(shí)并允許此用戶訪問系統(tǒng)。這種思想基于只有用戶自己知道它的口令,所以輸入的口令是正確的話,那么系統(tǒng)就認(rèn)定它是所聲稱的那個(gè)人。
在Linux類操作系統(tǒng)中,定義用戶信息和密碼信息的字段和格式都需要符合標(biāo)準(zhǔn)的Linux Naming Service Switch定義,即NSS定義。因此用戶信息只要保證滿足NSS規(guī)范,就可以來(lái)源于本地passwd和shadow之外的其它信息數(shù)據(jù)庫(kù)和認(rèn)證源。所以在此基礎(chǔ)上還派生出一些其它認(rèn)證解決方案。例如NIS、LDAP等,都可作為存放用戶信息的數(shù)據(jù)庫(kù),而存放用戶口令或者鑒別用戶身份的數(shù)據(jù)庫(kù),可以采用專用于網(wǎng)絡(luò)環(huán)境的Kerberos以及智能卡鑒別系統(tǒng)等方式。
這一整套的鑒別和認(rèn)證方案貌似無(wú)懈可擊,但是將這種解決方案真正應(yīng)用到操作系統(tǒng)中的話就會(huì)發(fā)現(xiàn)一些問題:
第一,在操作系統(tǒng)上所包含的認(rèn)證不僅僅只涉及到系統(tǒng)登錄和訪問,在系統(tǒng)外圍往往提供了眾多的應(yīng)用程序,相當(dāng)多的應(yīng)用程序在訪問過程中是有認(rèn)證需求的。那么是否需要針對(duì)每一個(gè)應(yīng)用程序都得加入認(rèn)證和鑒別的功能?如果要,那么無(wú)論從程序的開發(fā)和使用管理角度來(lái)講,工作量都將成倍增加;如果不要,則系統(tǒng)級(jí)的用戶鑒別和安全認(rèn)證與應(yīng)用程序沒有任何關(guān)系,意味著不管用戶是否需要登錄系統(tǒng),但是對(duì)應(yīng)用程序的訪問都將缺乏最基本的安全性。
第二,如果針對(duì)每一個(gè)應(yīng)用程序都開發(fā)用戶鑒別和認(rèn)證的功能,那么一旦發(fā)現(xiàn)所用的.算法存在某些缺陷或想采用另一種鑒別和認(rèn)證方法時(shí),開發(fā)者或者用戶都將不得不重寫(修改或替換)應(yīng)用程序,然后重新編譯原程序。
所以,尤其是當(dāng)實(shí)現(xiàn)鑒別功能的代碼以通常方法作為應(yīng)用程序一部分一起編譯的時(shí)候,上述問題將十分突出。很明顯,傳統(tǒng)的身份鑒別和用戶認(rèn)證方式一旦整合到實(shí)際的操作系統(tǒng)中,在實(shí)用當(dāng)中缺乏靈活性。
鑒于以上原因,Linux操作系統(tǒng)的開發(fā)者和設(shè)計(jì)人員開始尋找一種更佳的替代方案:一方面,將鑒別功能從應(yīng)用中獨(dú)立出來(lái),單獨(dú)進(jìn)行模塊化的設(shè)計(jì),實(shí)現(xiàn)和維護(hù);另一方面,為這些鑒別模塊建立標(biāo)準(zhǔn)的應(yīng)用程序接口即API,以便眾多的應(yīng)用程序能方便地使用它們提供的各種功能;同時(shí),鑒別機(jī)制對(duì)上層用戶(包括應(yīng)用程序和最終用戶)要求一定要是透明的,這樣可以對(duì)使用者隱藏其中比較復(fù)雜的實(shí)現(xiàn)細(xì)節(jié)。
可插拔認(rèn)證模塊PAM的基本概念
事實(shí)上直到1995年的時(shí)候,SUN的研究人員才提出了一種滿足以上需求的方案,這就是可插拔認(rèn)證模塊(Pluggable Authentication Module--PAM)機(jī)制,并首次在其操作系統(tǒng) Solaris 2.3上部分實(shí)現(xiàn)。
可插拔認(rèn)證模塊(PAM)機(jī)制采用模塊化設(shè)計(jì)和插件功能,使用戶可以輕易地在應(yīng)用程序中插入新的認(rèn)證模塊或替換原先的組件,同時(shí)不必對(duì)應(yīng)用程序做任何修改,從而使軟件的定制、維持和升級(jí)更加輕松。因?yàn)檎J(rèn)證和鑒別機(jī)制與應(yīng)用程序之間相對(duì)獨(dú)立。所以應(yīng)用程序可以通PAM API來(lái)方便地使用PAM提供的各種鑒別功能而不必了解太多的底層細(xì)節(jié)。此外PAM的易用性也較強(qiáng),主要表現(xiàn)在它對(duì)上層屏蔽了鑒別和認(rèn)證的具體細(xì)節(jié),所以用戶不必被迫學(xué)習(xí)各種各樣的鑒別方式,也不必記住多個(gè)口令;又由于它實(shí)現(xiàn)了多鑒別認(rèn)證機(jī)制的集成問題,所以單個(gè)程序可以輕易集成多種鑒別機(jī)制,如Kerberos和Diffie - Hellman等認(rèn)證機(jī)制,但用戶仍可以用同一個(gè)口令登錄而且感覺不到采取了各種不同的鑒別方法。
在廣大開發(fā)人員的努力下,各版本的UNIX系統(tǒng)陸續(xù)增加和提供了對(duì)PAM應(yīng)用的支持。其中Linux-PAM是專門為L(zhǎng)inux操作系統(tǒng)實(shí)現(xiàn)的,眾多的Linux操作系統(tǒng)包括Caldera、Debian、Turbo、Red Hat、SuSE 及它們的后續(xù)版本都提供對(duì)PAM的支持。而FreeBSD從3.1版本也開始支持PAM。而且除了具體實(shí)現(xiàn)方法上多少有些不同外,各種版本Unix系統(tǒng)上PAM的框架是相同的。所以我們?cè)谶@里介紹的Linux的PAM框架知識(shí)具有相當(dāng)?shù)钠毡樾裕以谙挛慕榻B其框架過程中可以看到,我們并沒有刻意區(qū)分Unix PAM與Linux PAM這兩個(gè)技術(shù)術(shù)語(yǔ)。
PAM的分層體系結(jié)構(gòu)
PAM 為了實(shí)現(xiàn)其插件功能和易用性,采取了分層設(shè)計(jì)思想。就是讓各鑒別模塊從應(yīng)用程序中獨(dú)立出來(lái),然后通過PAM API作為兩者聯(lián)系的紐帶,這樣應(yīng)用程序就可以根據(jù)需要靈活地在其中"插入"所需要的鑒別功能模塊,從而真正實(shí)現(xiàn)了在認(rèn)證和鑒別基礎(chǔ)上的隨需應(yīng)變。實(shí)際上,這一思路也非常符合軟件設(shè)計(jì)中的"高內(nèi)聚,低耦合"這一重要思想。
PAM 的體系如下簡(jiǎn)圖所示:
從上面的結(jié)構(gòu)圖可以看出,PAM 的API起著承上啟下的作用,它是應(yīng)用程序和認(rèn)證鑒別模塊之間聯(lián)系的紐帶和橋梁:當(dāng)應(yīng)用程序調(diào)用PAM API 時(shí),應(yīng)用接口層按照PAM配置文件的定義來(lái)加載相應(yīng)的認(rèn)證鑒別模塊。然后把請(qǐng)求(即從應(yīng)用程序那里得到的參數(shù))傳遞給底層的認(rèn)證鑒別模塊,這時(shí)認(rèn)證鑒別模塊就可以根據(jù)要求執(zhí)行具體的認(rèn)證鑒別操作了。當(dāng)認(rèn)證鑒別模塊執(zhí)行完相應(yīng)的操作后,再將結(jié)果返回給應(yīng)用接口層,然后由接口層根據(jù)配置的具體情況將來(lái)自認(rèn)證鑒別模塊的應(yīng)答返回給應(yīng)用程序。
上面描述了PAM的各個(gè)組成部分以及整體的運(yùn)作機(jī)理。下面將對(duì)PAM中的每一層分別加以介紹。
第一層:模塊層。模塊層處于整個(gè)PAM體系結(jié)構(gòu)中的最底層,它向上為接口層提供用戶認(rèn)證鑒別等服務(wù)。也就是說(shuō)所有具體的認(rèn)證鑒別工作都是由該層的模塊來(lái)完成的。對(duì)于應(yīng)用程序,有些不但需要驗(yàn)證用戶的口令,還可能要求驗(yàn)證用戶的帳戶是否已經(jīng)過期。此外有些應(yīng)用程序也許還會(huì)要求記錄和更改當(dāng)前所產(chǎn)生的會(huì)話類的相關(guān)信息或改變用戶口令等。所以PAM在模塊層除了提供鑒別模塊外,同時(shí)也提供了支持帳戶管理、會(huì)話管理以及口令管理功能的模塊。當(dāng)然,這四種模塊并不是所有應(yīng)用程序都必需的,而是根據(jù)需要靈活取舍。比如雖然login可能要求訪問上述所有的四種模塊,但是su可能僅僅需要使用到鑒別模塊的功能即可。至于如何取舍則涉及到接口層的PAM API和配置文件,這部分內(nèi)容將在后文中加以介紹。
第二層:應(yīng)用接口層。應(yīng)用接口層位于PAM結(jié)構(gòu)的中間部分,它向上為應(yīng)用程序屏蔽了用戶鑒別等過程的具體細(xì)節(jié),向下則調(diào)用模塊層中的具體模塊所提供的特定服務(wù)。由上圖可以看出,它主要由PAM API和配置文件兩部分組成,下面將逐一介紹。
PAM API可以分為兩類:一類是用于調(diào)用下層特定模塊的接口,這類接口與底層的模塊相對(duì)應(yīng),包括:
鑒別類接口:pam_authenticate()用于鑒別用戶身份,pam_setcred()用于修改用戶的私密信息。
帳號(hào)類接口:pam_acct_mgmt()用于檢查受鑒別的用戶所持帳戶是否有登錄系統(tǒng)許可,以及該帳戶是否已過期等。
會(huì)話類接口:包括用于會(huì)話管理和記帳的 pam_open_session()和 pam_close_session()函數(shù)。
口令類接口:包括用于修改用戶口令的 pam_chauthtok()。
第二類接口通常并不與底層模塊一一對(duì)應(yīng),它們的作用是對(duì)底層模塊提供支持以及實(shí)現(xiàn)應(yīng)用程序與模塊之間的通信等。具體如下:
管理性接口: 每組 PAM 事務(wù)從 pam_start()開始,結(jié)束于 pam_end()函數(shù)。接口 pam_get_item()和 pam_set_item()用來(lái)讀寫與 PAM 事務(wù)有關(guān)的狀態(tài)信息。同時(shí),能夠用 pam_str()輸出 PAM 接口的出錯(cuò)信息。
應(yīng)用程序與模塊間的通訊接口:在應(yīng)用程序初始化期間,某些諸如用戶名之類的數(shù)據(jù)可以通過 pam_start()將其存放在PAM接口層中,以備將來(lái)底層模塊使用。另外底層模塊還可以使用 pam_putenv()向應(yīng)用程序傳遞特定的環(huán)境變量,然后應(yīng)用程序利用pam_getenv()和pam_getenvlist()讀取這些變量。
用戶與模塊間的通訊接口:pam_start()函數(shù)可以通過會(huì)話式的回調(diào)函數(shù),讓底層模塊通過它們讀寫模塊相關(guān)的鑒別信息,比如以應(yīng)用程序所規(guī)定的方式提示用戶輸入口令。
模塊間通訊接口:盡管各模塊是獨(dú)立的,但是它們?nèi)匀荒軌蛲ㄟ^pam_get_item()和pam_set_item()接口共享某些與鑒別會(huì)話有關(guān)的公用信息,諸如用戶名、服務(wù)名、口令等。此外,這些API還可以用于在調(diào)用pam_start()之后,讓應(yīng)用程序修改狀態(tài)信息。
讀寫模塊狀態(tài)信息的接口:接口pam_get_data()和pam_set_data()用以按照PAM句柄要求訪問和更新特定模塊的信息。此外,還可以在這些模塊后附加一個(gè)清除數(shù)據(jù)函數(shù),以便當(dāng)調(diào)用 pam_end()時(shí)清除現(xiàn)場(chǎng)。
由于 PAM 模塊隨需加載,所以各模塊始化任務(wù)在第一次調(diào)用時(shí)完成。如果某些模塊的清除任務(wù)必須在鑒別會(huì)話結(jié)束時(shí)完成,則它們應(yīng)該使用 pam_set_data()規(guī)定清除函數(shù),這些執(zhí)行清除任務(wù)的函數(shù)將在應(yīng)用程序調(diào)用 pam_end()接口時(shí)被調(diào)用。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 yyfangchan@163.com (舉報(bào)時(shí)請(qǐng)帶上具體的網(wǎng)址) 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除