用PAM認證加強Linux服務(wù)器安全
PAM(Pluggable Authentication Modules)即可插拔式認證模塊,它是一種高效而且靈活便利的用戶級別的認證方式,它也是當前Linux服務(wù)器普遍使用的認證方式。當然,在不同版本的Linux統(tǒng)中部署PAM認證是有所不同的,本文將以RHEL4版本為例進行解析。
1.部署PAM認證的必要性
我們知道一臺Linux服務(wù)器會開許多不同的服務(wù),這些服務(wù)中很多服務(wù)本身并沒有認證功能,只是把認證交給用戶名及密碼。如果這樣的話,那么所有服務(wù)都用Linux系統(tǒng)的用戶名及密碼來認證,對于服務(wù)器來說是很危險的。比如一臺服務(wù)器開著FTP、SMTP、SSH等服務(wù),那么新建一個用戶默認就享有對以上的服務(wù)的操作權(quán)限,那么如果一個用戶的帳號密碼泄露會涉及到多個服務(wù)。因此,不管是PC還是服務(wù)器在類Linux系統(tǒng)中部署PAM認證是非常必要的。通過新型的認證模塊——PAM就能解決認證方面的不足,加強Linux系統(tǒng)安全。
2.PAM認證的方式
PAM認證一般遵循這樣的順序:Service(服務(wù))→PAM(配置文件)→PAM_*.so。PAM認證首先要確定那一項服務(wù),然后加載相應(yīng)的PAM的配置文件(位于/etc/PAM.d下),最后調(diào)用認證文件(位于/lib/security下)進行安全認證。通常情況下,在Linux系統(tǒng)安裝完成后會在/etc/PAM.d路徑下為我們提供了一些默認的配置文件。另外,大家要知道/lib/security目錄是認證文件的默認存放位置。/etc/PAM.d路徑下的默認配置文件是我們進行PAM配置的模板,通常情況下我們根據(jù)安全需要對于進行修改或者添加相應(yīng)的項即可。(圖1)
3.PAM認證的構(gòu)成
客觀地說PAM認證還是比較復雜的,簡單地講它包括四種常見認證類型(module type):即auth認證管理、account用戶管理、password密碼認證管理、session會話管理。以/etc/PAM.d/login為例,我們可以看到它的配置文件,區(qū)域1中的auth、account、password、session等都是認證類型。區(qū)域2中的required、 requisite 、sufficient 、optional是認證的流程控制。最后面的區(qū)域3就是認證的PAM文件了。(圖2)
3.PAM認證的構(gòu)成
客觀地說PAM認證還是比較復雜的,簡單地講它包括四種常見認證類型(module type):即auth認證管理、account用戶管理、password密碼認證管理、session會話管理。以/etc/PAM.d/login為例,我們可以看到它的配置文件,區(qū)域1中的auth、account、password、session等都是認證類型。區(qū)域2中的required、 requisite 、sufficient 、optional是認證的流程控制。最后面的區(qū)域3就是認證的PAM文件了。(圖2)

4.PAM認證的流程
為了便于大家深入了解PAM認證的流程,我們以驗證用戶登錄的PAM-login為例進行說明。PAM認證流程是從行首驗證到行尾,逐條認證。比如用戶登錄服務(wù)器,共有十條auth類型認證,假設(shè)第一條認證失敗,一般情況后九條也必須要認證。為什么就一般情況呢?其實還有非一般情況。那么這個用戶動作成功與否是要看auth認證后面的區(qū)域2是怎么處理的。在圖2中看到處理字段有required和optional,其中required代表認證必須通過,也就是說,無論成功多少條語句,只要失敗一條,那么認證就失敗。在圖2中看到的區(qū)域3就是認證的模塊了,第二行中的“PAM_securetty.so”就是這個文件。在RHEL中,認證多是用相對路徑。
#p#5.PAM認證測試
PAM_securetty.so是一個認證模塊文件,該認證模塊只對root用戶有效,當root登錄系統(tǒng)時,會查看有沒有安全終端,安全終端就是/etc/securetty文件里的東西,比如你運行“W”命令看到TTY下面的東西就是安全終端。如果有安全終端就通過認證,否則失敗。有些管理員為了安全,不讓root用戶直接登錄,他會把/etc/securetty文件清代空,這就保證了在有root密碼時,也不能夠在本地登錄。
為了以下的實驗方便,能看出效果來,我們把“auth required PAM_securetty.so”這條認證加入SSH服務(wù)的PAM模塊誰文件里(/etc/PAM.d/sshd)的第一行,目的就是讓SSH服務(wù)應(yīng)用這條認證。大家可在控制臺窗口中執(zhí)行“vi etc/PAM.d/sshd”然后添加這條認證語句。同樣的道理,如果把這條語句加到login文件(默認這條認證是被注銷掉的,我們?nèi)∠懊娴?就可以了),控制的是從本地控制臺登錄,同樣的話如果把這條語句加入到sshd文件內(nèi),那么它將控制的是從遠程登錄服務(wù)器22端口的過程。(圖3)
下面我們試著SSH登錄系統(tǒng)看看效果,在控制臺中執(zhí)行命令“ssh -l root localhost”,可以看到無論我們的root用戶的密碼正確與否都無法通過SSH遠程登錄到系統(tǒng),可見上面的認證已經(jīng)生效。在一般情況下,為了服務(wù)器的安全,大家通過PAM認證拒絕root遠程登錄系統(tǒng)。 (圖4)

6.PAM認證的處理方式
了解了認證類型的工作方式,我們還應(yīng)該深入的理解認證的處理方式,在圖2中看到,它的認證處理方式是required,表示這一模塊的認證是必須成功的,但如果失敗,認證過程不會即刻終止,PAM將繼續(xù)下一個同類型認證。上面“PAM_securetty.so”認證失敗了,但認證并沒有結(jié)束,認證的“指針”還在向下走。如圖4中所示,在root用戶SSH登錄認證失敗的前提下還提示用戶輸入密碼,雖然認證不可能成功。
處理過程中除了required,還有requisite、sufficient和optional,我們再來看看requisite的效果。還用SSH服務(wù)為例,把/etc/PAM.d/sshd文件第一行中的“auth required PAM_securetty.so”改成“auth requisite PAM_securetty.so”。再次嘗試登錄,發(fā)現(xiàn)和圖4沒有什么差別,也是輸入3次密碼后被拒絕了。但是細心的讀者如果一邊看文章一邊嘗試著實驗的話,你會發(fā)現(xiàn)當你在輸入密碼時,用required反應(yīng)的速度要慢一些,并且在系統(tǒng)日志中是沒有記錄的,認證同樣是失敗的。這說明required和requisite類似的地方是認證必須通過,而不同的是如果失敗,認證過程將立即終止,不會去認證下面的條目。(圖5)

7.限制root登錄控制臺
我們修改用/etc/PAM.d/login來限制root登錄控制臺,打開login文件刪除第二行中的#,取消對“auth required PAM_securetty.so”的注銷。然后我們本地登錄服務(wù)器,通過測試我們發(fā)現(xiàn)當用required時,你在輸入root及密碼后,你得到了一個拒絕信息,用requisite時,當你輸入root回車時同樣會得到拒絕信息登錄失敗,這是由剛才的認證方式觸發(fā)的。
8.PAM認證可選模塊
在PAM認證中,sufficient表示如果認證成功,那么對這一類型的模塊認證是充足的了,其他的同類模塊將不會再檢驗,當認證失敗,它會進行下一條認證,如果下面同類型的認證成功,結(jié)果依然成功。optional表示這一模塊認證是可選的,也不會對認證成功或失敗產(chǎn)生影響,這個就比較危險了。比如我們在/etc/PAM.d/sshd文件內(nèi)加入“auth required/lib/security/PAM_listfile.so item=user sense=allow file=/etc/sshusers onerr=succeed”其含義是只允許出現(xiàn)在/etc/sshuser文件內(nèi)的用戶遠程登錄。然后我們執(zhí)行命令“ssh -l root localhost”,當sshusers文件沒有root用戶時候,登錄失敗,很明顯他被PAM模塊拒絕了。那么我們改一下認證文件,將required改成sufficient,嘗試再次登錄,結(jié)果成功登錄。
總結(jié):PAM認證是Linux服務(wù)器系統(tǒng)最主要的安全認證模式,掌握PAM認證對于加強系統(tǒng)安全非常重要。本文結(jié)合理論與實踐對PAM認證做了一定的分析,實際上關(guān)于PAM認證是一個大課題,希望以后有機會和大家進一步分享基于PAM認證的Linux系統(tǒng)安全技巧和經(jīng)驗。
【編輯推薦】



















