標籤:
一.插入式驗證模組(PAM)
在過去,每個程式都會使用自己的方法來對使用者身份進行驗證.在紅帽企業Linux中,多數程式被配置使用一個集中化的使用者驗證方法叫作插入式驗證模組(Pluggable Authentication Modules)(PAM).
PAM使用一個可插入式的,模組化的結構.它為系統管理員設定使用者身分識別驗證政策提供了很大的靈活性.
在多數情況下,一個支援PAM的應用程式的預設PAM設定檔就可以滿足一般的要求.但是在一些情況下,還是需要對PAM設定檔進行特殊的配置.因為如果對PAM進行了錯誤的配置可能會導致系統的安全性被破壞,所以在對這些檔案進行配置前必須對這些檔案的結構有一定的瞭解.
二.PAM的優越性
PAM 提供了以下優越性:
1.可以被多種應用程式使用的常用使用者身分識別驗證計劃.
2.為系統管理員和應用程式開發人員在進行使用者身分識別驗證處理時提供了極大的靈活性.
3.包括了一個有詳細記錄的,單一的程式庫,這個程式庫使開發人員們不需要再開發自己的使用者身分識別驗證系統.
三.PAM設定檔
以前的PAM版本使用/etc/pam.conf檔案,但現在這個檔案已經過時,只在/etc/pam.d/目錄不存在時才被使用.每個支援PAM的應用程式或服務都在/etc/pam.d/目錄中有一個相應的檔案.而這個目錄中的每個檔案的名稱與它們所控制訪問的服務名稱相同.支援 PAM 的應用程式需要定義它們的服務名並在/etc/pam.d/目錄中安裝它們自己的PAM設定檔.例如,login程式定義了它的服務名為login,並安裝/etc/pam.d/login設定檔.
每個PAM設定檔都包括一組如下格式的命令:
具體解釋如下:
A.模組介面(Module Interface)
當前有四類可用的PAM模組介面,每類介面分別代表了使用者身分識別驗證的不同方面:
auth,這個模組介面被用來驗證.例如,它需要一個密碼並驗證密碼是否正確.帶有這個介面的模組也可以設定許可證,如組群成員或Kerberos令牌.
account,這個模組介面被用來驗證所允許的訪問.例如,檢查一個使用者帳號是否已經到期;或一個使用者是否被允許在一天的某個特定的時間進行登入.
password,這個模組介面被用來改變使用者的密碼.
session,這個模組介面被用來配置並系統管理使用者會話.帶有這個介面的模組也可以進行允許訪問所需的額外任務,如掛載使用者的主目錄,使使用者的郵箱有效.
B.控制標識旗(Control Flag)
所有的PAM模組在被調用後都會產生一個成功或失敗的結果.控制標識旗會指示PAM根據結果下一步怎麼辦.模組可以以特定的順序進行堆積排列,控制標識旗決定一個特定模組對使用者驗證成功或失敗整個過程的重要性.
有四個預先定義好的控制標識旗:
required,要使驗證過程繼續,這個模組的結果必須是成功.如果這一步的測試失敗,使用者不會馬上被通知,他們會在所有模組的測試都完成後才會被通知.
requisite,要使驗證可以繼續進行,這個模組的結果必須是成功.然而,如果這一步測試失敗,使用者會被馬上通知,而通知的資訊中包括了第一個失敗了的required或requisite模組測試.
sufficient,如果模組驗證失敗,其結果就不會被理會.但是,如果一個被標識為sufficient的模組成功並且前面沒有任何標識為required的模組驗證失敗,那麼使用者就通過驗證可以使用這個服務,無需其它任何驗證結果.
optional,模組結果不被理會.被標識為optional的模組只有在這個介面中沒有引用其它模組時才成為驗證成功所必須的.
C.模組名(Module Name)
模組名為PAM提供了包括特定模組介面的可插入模組的名稱.在較老版本的紅帽企業Linux中,PAM設定檔包括模組的完全路徑.但自從使用了multilib系統(它把64位的PAM模組儲存在/lib64/security/中),目錄名就可以被省略,應用程式會被串連到適當的libpam版本,它可以定位這個模組的正確版本.
D.模組參數(Module Arguments)
在為一些模組進行驗證時,PAM使用參數來把資訊傳遞給一個可插入模組.
例如,pam_userdb.so模組使用儲存在一個Berkeley DB檔案中的資訊來驗證使用者.Berkeley DB是一個開源的資料庫系統,被內建於許多應用程式中.這個模組使用一個db參數,從而使Berkeley DB知道所請求的服務使用哪個資料庫.以下是在一個 PAM 配置中一個典型的pam_userdb.so行.是到 Berkeley DB 資料庫檔案的完全路徑:
auth required pam_userdb.so db=
無效的參數通常會被忽略,它不會影響到PAM模組驗證的結果.但在一些模組中,無效的參數可能會導致模組驗證失敗.多數模組都會把錯誤寫入/var/log/secure檔案.
以下是一個PAM應用設定檔執行個體:
#%PAM-1.0
auth required pam_securetty.so
auth required pam_unix.so nullok
auth required pam_nologin.so
account required pam_unix.so
password required pam_cracklib.so retry=3
password required pam_unix.so shadow nullok use_authtok
session required pam_unix.so
第一行是注釋行,由該行行首的井字型大小(#)標示.
auth required pam_securetty.so,這個模組保證:如果使用者試圖以根使用者登入,這個使用者所登入的tty需要在/etc/securetty檔案中列出,如果這個檔案存在的話.如果tty沒有在這個檔案中列出,任何以根使用者身份登入的企圖都會失敗,並顯示一個Login incorrect資訊.
auth required pam_unix.so nullok,這個模組要求使用者輸入密碼,然後使用儲存在/etc/passwd和/etc/shadow檔案(如果這個檔案存在的話)中的資訊來檢查使用者輸入的密碼.nullok 參數告訴pam_unix.so模組允許一個空密碼.
auth required pam_nologin.so,這是驗證的最後一步.這一步檢查/etc/nologin檔案是否存在.如果這個檔案存在,而使用者並不是一個根使用者,那麼使用者身分識別驗證會失敗.
(注:在這個例子中,所有三個auth都被檢查,即使第一個auth模組失敗.這可以防止使用者知道是哪一步導致了驗證失敗.如果一個惡意的網路使用者知道了這個資訊,則可以利用這個資訊來進行網路攻擊.)
account required pam_unix.so,這個模組執行所有需要的帳號驗證.例如,如果啟用shadow密碼,pam_unix.so的帳號介面就會檢查這個帳號是否已經到期,或使用者在允許的過渡期期間是否已經修改密碼.
password required pam_cracklib.so retry=3,如果一個密碼已經到期,pam_cracklib.so模組的密碼部分會要求輸入一個新密碼.然後,它會檢查新建立的密碼是否能夠被密碼字典破解系統輕易地破解.retry=3參數指定如果第一次測試失敗,使用者會有另外兩次機會來建立一個更安全的密碼.
password required pam_unix.so shadow nullok use_authtok,這一行指定如果程式要修改使用者的密碼,應該使用pam_unix.so模組的password介面來進行.shadow參數告訴模組在更新一個使用者的密碼時建立shadow密碼.nullok參數告訴模組允許使用者把他們的密碼從空密碼改為其它的密碼,否則的話,無密碼狀態會被認為是一個帳號鎖.use_authtok提供了一個很好的執行個體來說明堆積PAM模組時順序的重要性.這個參數告訴模組不向使用者要求輸入一個新密碼,它會使用前一個密碼模組獲得的密碼.在這種情況下,所有新密碼在被接受前都必須通過pam_cracklib.so的檢查.
session required pam_unix.so,最後一行告訴pam_unix.so模組的會話介面來管理會話.這個模組會在每個會話的開始和結束階段把使用者名稱和服務類型記錄到/var/log/secure檔案中.這個模組可以和其它會話模組堆積在一起來實現其它的功能.
四.建立PAM模組
可以隨時為支援PAM的應用程式建立或添加新的PAM模組.
例如,一個程式開發人員可以建立一個單次密碼的產生方法,並編寫一個PAM模組來支援它.支援PAM的應用程式可以馬上使用這個新模組而不用重新進行編譯.這可以讓程式開發人員和系統管理員在不需要重新編譯的情況下為不同的應用程式測試各種使用者驗證方法.
編寫模組的文檔包括在/usr/share/doc/pam-/目錄中,其中,是系統上的PAM的版本號碼.
五.PAM和系統管理使用者身份緩衝(Administrative Credential Caching)
紅帽企業Linux中包括的一組圖形化的管理工具通過pam_timestamp.so模組為使用者提供了一段時間(最長為5分鐘)的系統管理權限.瞭解它們的工作原理是非常重要的,如果一個使用者暫時離開他們的終端時,pam_timestamp.so沒有被關閉,那麼任何可以使用這個終端的人都可以利用它來操縱系統.
在PAM時間戳記(timestamp)規劃中,圖形化的管理程式會在啟動時要求使用者輸入根使用者密碼.當使用者被驗證後,pam_timestamp.so模組會建立一個時間戳記檔案.預設情況下,它會在 /var/run/sudo/目錄中被建立.如果時間戳記檔案已經存在,圖形化的管理程式不會再要求輸入密碼.pam_timestamp.so模組會更新時間戳記檔案,這個使用者可以重新獲得額外5分鐘的管理存取權限.
可以通過查/var/run/sudo/檔案來確認時間戳記檔案的實際狀態.對於台式機來說,相關的檔案是unknown:root.如果這個檔案存在而且它的時間戳記不長於5分鐘的話,使用者身份是有效.
當時間戳記檔案存在時,一個驗證表徵圖會出現在系統面板的通知區域中.
關閉一個時間戳記處於活動狀態的PAM的控制台前,最好銷毀時間戳記檔案.要在圖形化環境中執行這個任務,點擊面板中的驗證表徵圖.一個對話方塊會出現,點擊"Forget Authorization"來銷毀活動的時間戳記檔案.
在處理 PAM 時間戳記檔案時應注意以下問題:
1,如果是通過使用ssh遠程登入到系統,請使用/sbin/pam_timestamp_check -k root命令來銷毀時間戳記檔案.
2,應該在發出使用這一具有特殊權限的應用程式程式的同一個終端視窗下運行/sbin/pam_timestamp_check -k root命令.
3,要使用/sbin/pam_timestamp_check -k命令,必須以最初啟動pam_timestamp.so模組的使用者身份登入.不要以根使用者身份登入來使用這個命令.
4,如果要銷毀案頭上的使用者身份資訊(而不想運行表徵圖中的Forget Authorization),可使用以下命令:
/sbin/pam_timestamp_check -k root /dev/null 2>/dev/null
如果使用這個命令失敗,只會從所運行這個命令的pty中刪除使用者身份資訊.
常用pam_timestamp命令
timestamp_timeout,指定時間戳記檔案的有效期間(以秒為單位).預設值是 300 秒(5分鐘).
timestampdir,指定時間戳記檔案儲存在哪個目錄中.預設值是/var/run/sudo/.
六.PAM和裝置擁有者
在紅帽企業Linux中,第一個通過物理控制台登入的使用者可以控制特定的裝置並可以執行一些通常只有根使用者才可以執行的任務.這是由名為pam_console.so的PAM模組所控制的.
當一個使用者登入到紅帽企業Linux系統時,pam_console.so模組會被login或圖形化的登入程式(gdm,kdm和xdm)調用.如果這個使用者是第一個通過物理控制台登入的使用者——稱為控制台使用者——模組會把一些通常的擁有者是根使用者的裝置的所有權分配給這個使用者.這個控制台使用者會擁有這些裝置,直到這個使用者的最後一個本地會話結束.在這個使用者退出系統後,這些裝置的擁有者身份則被交回給根使用者.
這些裝置包括,但不限於,音效卡,軟碟機和 CD-ROM 光碟機.
這個設施允許一個本機使用者在不需要獲得根許可權的情況下來使用這些裝置,因此可以簡化控制台使用者完成一些常用任務的程式.
可以通過編輯以下檔案來修改由pam_console.so控制的裝置列表:
1./etc/security/console.perms
2./etc/security/console.perms.d/50-default.perms
可以修改在以上檔案中列出的不同裝置的存取權限,或覆蓋已經指定的預設設定.可以建立一個新檔案(如xx-name.perms)並輸入需要修改的值,而最好不要直接修改50-default.perms檔案.新的預設檔案的檔案名稱必須以一個大於50的數值開始,如51-default.perms.這樣會覆蓋50-default.perms檔案的預設值.
如果gdm,kdm或xdm的設定檔已經被修改來允許遠端使用者登入,而且主機被配置為使用運行層級5,建議把/etc/security/console.perms檔案的和命令項的值改為:
=tty[0-9][0-9]* vc/[0-9][0-9]* :0\.[0-9] :0
=:0\.[0-9] :0
這將防止遠端使用者獲得裝置的訪問權,並限制他們在該機器上對應用程式的使用.
如果gdm,kdm或xdm的設定檔被修改為允許遠端使用者登入,並且主機被配置為使用運行層級5以外的運行層級,建議刪除整個命令,並把命令改為:
=tty[0-9][0-9]* vc/[0-9][0-9]*
七.PAM和應用程式訪問
該控制台使用者也可以使用一些/etc/security/console.apps/目錄下為使用者配置的程式.
這個目錄中包括允許控制台使用者使用/sbin和/usr/sbin中的某些應用程式的設定檔.
這些設定檔和它們所設定的應用程式享有相同名稱.
控制台使用者可以使用的一組重要應用程式程式包括三個可以用來關閉或重新啟動系統的程式:
/sbin/halt
/sbin/reboot
/sbin/poweroff
因為這些都是支援PAM的應用程式,因此需要時都可以調用pam_console.so 模組.
八.附加資源資訊
與PAM相關的man page.
pam,介紹PAM的重要訊息,包括PAM設定檔的結構和目的.
注意:這一頁討論了/etc/pam.conf和/etc/pam.d/目錄中的各種單個設定檔.在預設情況下,紅帽企業Linux使用/etc/pam.d/目錄下的各種單個設定檔,而不使用/etc/pam.conf,即使這個檔案存在也使用.
pam_console,介紹pam_console.so模組的目的,也描述PAM設定檔中應該使用的適當文法.
console.apps,描述/etc/security/console.apps設定檔的格式和可用的選項,這個設定檔規定哪些應用程式可以被PAM分配的控制台使用者訪問.
console.perms,描述/etc/security/console.perms設定檔的格式和可用的選項,而且指定由PAM分配的控制台使用者權限.
pam_timestamp,描述pam_timestamp.so模組.
可插拔認證模組(PAM)概述(轉載)