Linux中pam認證詳解(上)
一、pam的簡介
PAM(Pluggable Authentication Modules)即可插拔式認證模塊,它是一種高效而且靈活便利的用戶級別的認證方式,它也是當前Linux服務器普遍使用的認證方式。當然,在不同版本的Linux統中部署PAM認證是有所不同的。
它提供了對所有服務進行認證的中央機制,適用於login,遠程登錄(telnet,rlogin,fsh,ftp,點對點協議(PPP)),su等應用程序中。系統管理員通過PAM配置文件來制定不同應用程序的不同認證策略;應用程序開發者通過在服務程序中使用PAM API(pam_xxxx( ))來實現對認證方法的調用;而PAM服務模塊的開發者則利用PAM SPI來編寫模塊(主要是引出一些函數pam_sm_xxxx( )供PAM接口庫調用),將不同的認證機制加入到系統中;PAM接口庫(libpam)則讀取配置文件,將應用程序和相應的PAM服務模塊聯繫起來。PAM框架結構如圖所示。
二、pam認證原理
PAM認證一般遵循這樣的順序:Service(服務)→PAM(配置文件)→pam_*.so。PAM認證首先要確定那一項服務,然後加載相應的PAM的配置文件(位於/etc/pam.d下),最後調用認證文件(位於/lib/security下)進行安全認證。認證原理圖如下圖所示:
用戶訪問服務器的時候,服務器的某一個服務程序把用戶的誰請求發送到PAM模塊進行認證。對於不同的服務器應用程序所對應的PAM模塊也是不同的。如果想查看某個程序是否支持PAM認證,可以用ldd命令進行查看,例如查看查看sshd是不是支持PAM模塊認證,如下圖所示:
三、PAM認證的構成
客觀地說PAM認證還是比較複雜的,這裏只簡單地介紹它包括四種常見認證類型(module type):
1、認證管理(authentication management)
接受用戶名和密碼,進而對該用戶的密碼進行認證,並負責設置用戶的一些祕密信息。
2、帳戶管理(account management)
檢查帳戶是否被允許登錄系統,帳號是否已經過期,帳號的登錄是否有時間段的限制等等。
3、密碼管理(password management)
主要是用來修改用戶的密碼。
4、會話管理(session management)
主要是提供對會話的管理和記賬(accounting)。
四、pam驗證控制類型(Control Values)
驗證控制類型也可以稱做Control Flags,用於PAM驗證類型的返回結果,具體有以下四種:
1、required驗證失敗時仍然繼續,但返回Fail(用戶不會知道哪裏失敗)。
2、requisite驗證失敗則立即結束整個驗證過程,返回Fail。
3、sufficient驗證成功則立即返回,不再繼續,否則忽略結果並繼續。
4、optional無論驗證結果如何,均不會影響(通常用於session類型)。
PAM驗證類型返回結果如下所示:
爲了方便大家理解舉兩個例子,如下圖所示:
從上面兩個圖可以看出當required失敗後續還要繼續,但最後仍是失敗。requisite驗證失敗則立即結束。而sufficient則是驗證成功則立即結束。