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,使用命令:
  1. #ldd `which cmd` | grep libpam  //cmd就代表查看的程序名
如果包含libpam庫,那麼該程序就支持PAM驗證。

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

  1. 支持PAM驗證呢,就是表示這屋子給安裝防盜門預留了空位,
  2. 不支持PAM呢,就是說房子整個就是封閉的,人根本進不了,或者是房子基本沒有牆,不需要對出入進行限制。
  3. 在PAM機制中,PAM模塊就相當於是防盜門上可以安裝的各種鎖具,這些鎖具各有不同的特點和功能,你可以按需要安裝。
  4. 相同的,在PAM中,程序的配置文件就相當於這個防盜門的製作和安裝方案,安在什麼地方,在支持的各種鎖具中選擇合適的鎖,然後是開這些鎖的先後順序等這些具體使用規範。

PAM的各種模塊是開發人員預先開發好的,而我們要做的是合理的使用這些模塊,讓它們保護需要保護的程序。所以要關注的是PAM的配置文件目錄/etc/pam.d/

拿例子說事,以login這個登錄程序爲例子,文件名是/etc/pam.d/login,內容是(其中一部分):
 
  1. auth     optional     pam_faildelay.so    delay=3000000  
  2. auth     required     pam_securetty.so  
  3. auth     requisite    pam_nologin.so  
  4. session    [success=ok ignore=ignore module_unknow=ignore default=bad]    pam_selinux.so close 
  5. @include  common-auth 
從上面可以看出來,配置文件是按行指定的,每一行是一個完整的定義。
 
一般第一列指定的內容是:module-type,一共就只有4種,分別是:
  1. auth:對用戶身份進行識別,如提示輸入密碼,判斷是root否;
  2. account:對賬號各項屬性進行檢查,如是否允許登錄,是否達到最大用戶數;
  3. session:定義登錄前,及退出後所要進行的操作,如登錄連接信息,用戶數據的打開和關閉,掛載fs;
  4. password:使用用戶信息來更新數據,如修改用戶密碼。
第二列內容是:control-flag,有很多,不過一般常用的是4種,分別是:
  1. optional:不進行成功與否的返回,一般返回一個pam_ignore;
  2. required:表示需要返回一個成功值,如果返回失敗,不會立刻將失敗結果返回,而是繼續進行同類型的下一驗證,所有此類型的模塊都執行完成後,再返回失敗;
  3. requisite:與required類似,但如果此模塊返回失敗,則立刻返回失敗並表示此類型失敗;
  4. sufficient:如果此模塊返回成功,則直接向程序返回成功,表示此類成功,如果失敗,也不影響這類型的返回值。
第三列內容是PAM模塊的存放路徑,默認是在/lib/security/目錄下,如果在此默認路徑下,要填寫絕對路徑。
第四列內容是PAM模塊參數,這個需要根據所使用的模塊來添加。
 

 
實際操作:現在對linux系統的登錄程序login進行鍼對用戶和時間的登錄限制。
使用模塊pam_time.so
 
1、檢查login程序是否支持PAM
  1. root@hdp0:~# ldd `which login` | grep libpam  
  2.     libpam.so.0 => /lib/libpam.so.0 (0xb76e2000)  
  3.     libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb76de000) 
2、在/etc/pam.d/下修改login配置文件
在login配置文件中,在auth的定義之後,加入account的一條驗證
account     requisite     pam_time.so
 
3、pam_time.so這個模塊需要定義另外一個配置文件time.conf
在/etc/security/time.conf中定義限制的具體用戶和時間
  1. vim /etc/security/time.conf  
  2. login;tty3;fenix;Th2100-2300     //作用程序是login,作用在tty3上,fenix允許在週四2100-2300間登錄  
  3. login;!tty3;!fenix;!Th2100-2300  //作用程序是login,作用在tty3以外,對用戶fenix之外產生影響,允許登錄時間是週四2100-2300之外 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章