Linux-PAM認證方式

在linux中執行有些程序時,這些程序在執行前首先要對啓動它的用戶進行認證,符合必定的要求以後才容許執行,例如login, su等linux

在linux中進行身份或是狀態的驗證程序是由PAM來進行的,PAM(Pluggable Authentication Modules)可動態加載驗證模塊,由於能夠按須要動態的對驗證的內容進行變動,因此能夠大大提升驗證的靈活性。sql

linux各個發行版中,PAM使用的驗證模塊通常存放在/lib/security/目錄下,可使用ls命令進行查看本計算機支持哪些驗證控制方式,通常的PAM模塊名字例如pam_unix.so,模塊能夠隨時在這個目錄下添加和刪除,這不會直接影響程序運行,具體的影響在PAM的配置目錄下。vim

PAM的配置文件通常存放在/etc/pam.conf文件,或者/etc/pam.d/目錄下。不過如今通常都會存放在/etc/pam.d/目錄下,之下是相對於每一個須要被PAM控制的程序的獨立配置文件。當一個程序的驗證方式配置在pam.conf和pam.d/下某文件中出現時,以pam.d/目錄下文件爲準session

查看某個程序是否支持PAM,使用命令:
  
  
           
  
  
  1. #ldd `which cmd` | grep libpam  //cmd就表明查看的程序名
若是包含libpam庫,那麼該程序就支持PAM驗證。

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

  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
 
一、檢查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) 
二、在/etc/pam.d/下修改login配置文件
在login配置文件中,在auth的定義以後,加入account的一條驗證
account     requisite     pam_time.so
 
三、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以外 

四、對PAM的應用是馬上生效,能夠切換到其餘tty上進行測試。ui

相關文章
相關標籤/搜索