歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux服務 >> 用PAM認證加強Linux服務器安全

用PAM認證加強Linux服務器安全

日期:2017/3/2 16:40:23   编辑:Linux服務
PAM(Pluggable Authentication Modules)即可插拔式認證模塊,它是一種高效而且靈活便利的用戶級別的認證方式,它也是當前Linux服務器普遍使用的認證方式。當然,在不同版本的Linux統中部署PAM認證是有所不同的,本文將以RHEL4版本為例進行解析。

1.部署PAM認證的必要性

我們知道一台Linux服務器會開許多不同的服務,這些服務中很多服務本身並沒有認證功能,只是把認證交給用戶名及密碼。如果這樣的話,那麼所有服務都用Linux系統的用戶名及密碼來認證,對於服務器來說是很危險的。比如一台服務器開著FTP、SMTP、SSH等服務,那麼新建一個用戶默認就享有對以上的服務的操作權限,那麼如果一個用戶的帳號密碼洩露會涉及到多個服務。因此,不管是PC還是服務器在類Linux系統中部署PAM認證是非常必要的。通過新型的認證模塊——PAM就能解決認證方面的不足,加強Linux系統安全。

2.PAM認證的方式

PAM認證一般遵循這樣的順序:Service(服務)→PAM(配置文件)→pam_*.so。PAM認證首先要確定那一項服務,然後加載相應的PAM的配置文件(位於/etc/pam.d下),最後調用認證文件(位於/lib/security下)進行安全認證。通常情況下,在Linux系統安裝完成後會在/etc/pam.d路徑下為我們提供了一些默認的配置文件。另外,大家要知道/lib/security目錄是認證文件的默認存放位置。/etc/pam.d路徑下的默認配置文件是我們進行PAM配置的模板,通常情況下我們根據安全需要對於進行修改或者添加相應的項即可。(圖1)

用PAM認證加強Linux服務器安全(圖一)

3.PAM認證的構成

客觀地說PAM認證還是比較復雜的,簡單地講它包括四種常見認證類型(module type):即auth認證管理、account用戶管理、password密碼認證管理、session會話管理。以/etc/pam.d/login為例,我們可以看到它的配置文件,區域1中的auth、account、password、session等都是認證類型。區域2中的required、 requisite 、sufficient 、optional是認證的流程控制。最後面的區域3就是認證的PAM文件了。(圖2)

用PAM認證加強Linux服務器安全(圖二)

4.PAM認證的流程

為了便於大家深入了解PAM認證的流程,我們以驗證用戶登錄的PAM-login為例進行說明。PAM認證流程是從行首驗證到行尾,逐條認證。比如用戶登錄服務器,共有十條auth類型認證,假設第一條認證失敗,一般情況後九條也必須要認證。為什麼就一般情況呢?其實還有非一般情況。那麼這個用戶動作成功與否是要看auth認證後面的區域2是怎麼處理的。在圖2中看到處理字段有required和optional,其中required代表認證必須通過,也就是說,無論成功多少條語句,只要失敗一條,那麼認證就失敗。在圖2中看到的區域3就是認證的模塊了,第二行中的“pam_securetty.so”就是這個文件。在RHEL中,認證多是用相對路徑。

5.PAM認證測試

pam_securetty.so是一個認證模塊文件,該認證模塊只對root用戶有效,當root登錄系統時,會查看有沒有安全終端,安全終端就是/etc/securetty文件裡的東西,比如你運行“W”命令看到TTY下面的東西就是安全終端。如果有安全終端就通過認證,否則失敗。有些管理員為了安全,不讓root用戶直接登錄,他會把/etc/securetty文件清代空,這就保證了在有root密碼時,也不能夠在本地登錄。

為了以下的實驗方便,能看出效果來,我們把“auth required pam_securetty.so”這條認證加入SSH服務的PAM模塊誰文件裡(/etc/pam.d/sshd)的第一行,目的就是讓SSH服務應用這條認證。大家可在控制台窗口中執行“vi etc/pam.d/sshd”然後添加這條認證語句。同樣的道理,如果把這條語句加到login文件(默認這條認證是被注銷掉的,我們取消前面的#就可以了),控制的是從本地控制台登錄,同樣的話如果把這條語句加入到sshd文件內,那麼它將控制的是從遠程登錄服務器22端口的過程。

下面我們試著SSH登錄系統看看效果,在控制台中執行命令“ssh -l root localhost”,可以看到無論我們的root用戶的密碼正確與否都無法通過SSH遠程登錄到系統,可見上面的認證已經生效。在一般情況下,為了服務器的安全,大家通過PAM認證拒絕root遠程登錄系統。 (圖3)

用PAM認證加強Linux服務器安全(圖三)

6.PAM認證的處理方式

了解了認證類型的工作方式,我們還應該深入的理解認證的處理方式,在圖2中看到,它的認證處理方式是requi

red,表示這一模塊的認證是必須成功的,但如果失敗,認證過程不會即刻終止,PAM將繼續下一個同類型認證。上面“pam_securetty.so”認證失敗了,但認證並沒有結束,認證的“指針”還在向下走。如圖4中所示,在root用戶SSH登錄認證失敗的前提下還提示用戶輸入密碼,雖然認證不可能成功。

處理過程中除了required,還有requisite、sufficient和optional,我們再來看看requisite的效果。還用SSH服務為例,把/etc/pam.d/sshd文件第一行中的“auth required pam_securetty.so”改成“auth requisite pam_securetty.so”。再次嘗試登錄,發現和圖4沒有什麼差別,也是輸入3次密碼後被拒絕了。但是細心的讀者如果一邊看文章一邊嘗試著實驗的話,你會發現當你在輸入密碼時,用required反應的速度要慢一些,並且在系統日志中是沒有記錄的,認證同樣是失敗的。這說明required和requisite類似的地方是認證必須通過,而不同的是如果失敗,認證過程將立即終止,不會去認證下面的條目。(圖4)

用PAM認證加強Linux服務器安全(2)(圖四)

7.限制root登錄控制台

我們修改用/etc/pam.d/login來限制root登錄控制台,打開login文件刪除第二行中的#,取消對“auth required pam_securetty.so”的注銷。然後我們本地登錄服務器,通過測試我們發現當用required時,你在輸入root及密碼後,你得到了一個拒絕信息,用requisite時,當你輸入root回車時同樣會得到拒絕信息登錄失敗,這是由剛才的認證方式觸發的。

8.PAM認證可選模塊

在PAM認證中,sufficient表示如果認證成功,那麼對這一類型的模塊認證是充足的了,其他的同類模塊將不會再檢驗,當認證失敗,它會進行下一條認證,如果下面同類型的認證成功,結果依然成功。optional表示這一模塊認證是可選的,也不會對認證成功或失敗產生影響,這個就比較危險了。比如我們在/etc/pam.d/sshd文件內加入“auth required/lib/security/pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=succeed”其含義是只允許出現在/etc/sshuser文件內的用戶遠程登錄。然後我們執行命令“ssh -l root localhost”,當sshusers文件沒有root用戶時候,登錄失敗,很明顯他被PAM模塊拒絕了。那麼我們改一下認證文件,將required改成sufficient,嘗試再次登錄,結果成功登錄。

總結:PAM認證是Linux服務器系統最主要的安全認證模式,掌握PAM認證對於加強系統安全非常重要。本文結合理論與實踐對PAM認證做了一定的分析,實際上關於PAM認證是一個大課題,希望以後有機會和大家進一步分享基於PAM認證的Linux系統安全技巧和經驗

Copyright © Linux教程網 All Rights Reserved