天天看點

Linux-PAM認證方式

在linux中執行有些程式時,這些程式在執行前首先要對啟動它的使用者進行認證,符合一定的要求之後才允許執行,例如login, su等

在linux中進行身份或是狀态的驗證程式是由PAM來進行的,PAM(Pluggable Authentication Modules)可動态加載驗證子產品,因為可以按需要動态的對驗證的内容進行變更,是以可以大大提高驗證的靈活性。

linux各個發行版中,PAM使用的驗證子產品一般存放在/lib/security/目錄下,可以使用ls指令進行檢視本計算機支援哪些驗證控制方式,一般的PAM子產品名字例如pam_unix.so,子產品可以随時在這個目錄下添加和删除,這不會直接影響程式運作,具體的影響在PAM的配置目錄下。

PAM的配置檔案一般存放在/etc/pam.conf檔案,或者/etc/pam.d/目錄下。不過現在一般都會存放在/etc/pam.d/目錄下,之下是相對于每個需要被PAM控制的程式的獨立配置檔案。當一個程式的驗證方式配置在pam.conf和pam.d/下某檔案中出現時,以pam.d/目錄下檔案為準。

檢視某個程式是否支援PAM,使用指令:

如果包含libpam庫,那麼該程式就支援PAM驗證。

舉個不是特别恰當的例子:PAM機制就相當于給一個房屋安裝防盜門,也就是對要進入這間屋子的人進行控制,不讓這間屋子處于一種任何人都可以随便進入的狀态。

支援PAM驗證呢,就是表示這屋子給安裝防盜門預留了空位,

不支援PAM呢,就是說房子整個就是封閉的,人根本進不了,或者是房子基本沒有牆,不需要對出入進行限制。

在PAM機制中,PAM子產品就相當于是防盜門上可以安裝的各種鎖具,這些鎖具各有不同的特點和功能,你可以按需要安裝。

相同的,在PAM中,程式的配置檔案就相當于這個防盜門的制作和安裝方案,安在什麼地方,在支援的各種鎖具中選擇合适的鎖,然後是開這些鎖的先後順序等這些具體使用規範。

PAM的各種子產品是開發人員預先開發好的,而我們要做的是合理的使用這些子產品,讓它們保護需要保護的程式。是以要關注的是PAM的配置檔案目錄/etc/pam.d/

拿例子說事,以login這個登入程式為例子,檔案名是/etc/pam.d/login,内容是(其中一部分):

從上面可以看出來,配置檔案是按行指定的,每一行是一個完整的定義。

一般第一列指定的内容是:module-type,一共就隻有4種,分别是:

auth:對使用者身份進行識别,如提示輸入密碼,判斷是root否;

account:對賬号各項屬性進行檢查,如是否允許登入,是否達到最大使用者數;

session:定義登入前,及退出後所要進行的操作,如登入連接配接資訊,使用者資料的打開和關閉,挂載fs;

password:使用使用者資訊來更新資料,如修改使用者密碼。

第二列内容是:control-flag,有很多,不過一般常用的是4種,分别是:

optional:不進行成功與否的傳回,一般傳回一個pam_ignore;

required:表示需要傳回一個成功值,如果傳回失敗,不會立刻将失敗結果傳回,而是繼續進行同類型的下一驗證,所有此類型的子產品都執行完成後,再傳回失敗;

requisite:與required類似,但如果此子產品傳回失敗,則立刻傳回失敗并表示此類型失敗;

sufficient:如果此子產品傳回成功,則直接向程式傳回成功,表示此類成功,如果失敗,也不影響這類型的傳回值。

第三列内容是PAM子產品的存放路徑,預設是在/lib/security/目錄下,如果在此預設路徑下,要填寫絕對路徑。

第四列内容是PAM子產品參數,這個需要根據所使用的子產品來添加。

實際操作:現在對linux系統的登入程式login進行針對使用者和時間的登入限制。

使用子產品pam_time.so

1、檢查login程式是否支援PAM

2、在/etc/pam.d/下修改login配置檔案

在login配置檔案中,在auth的定義之後,加入account的一條驗證

account     requisite     pam_time.so

3、pam_time.so這個子產品需要定義另外一個配置檔案time.conf

在/etc/security/time.conf中定義限制的具體使用者和時間

4、對PAM的應用是立刻生效,可以切換到其他tty上進行測試。

繼續閱讀