


用PAM認證加強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)
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)
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)
6.PAM認證的處理方式
了解了認證類型的工作方式,我們還應該深入的理解認證的處理方式,在圖2中看到,它的認證處理方式是required,表示這一模塊的認證是必 須成功的,但如果失敗,認證過程不會即刻終止,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)
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系統安全技巧和經驗。
關鍵字:PAM、Linux、服務器
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解