The Linux-PAM 系統管理員指南(轉)

post0發表於2007-08-10
The Linux-PAM 系統管理員指南(轉)[@more@] The Linux-PAM 系統管理員指南 作者:Andrew G. Morgan, morgan@linux.kernel.org 翻譯:孫國清(Thomas Sun),thomassun@yeah.net DRAFT v0.71 1999/11/8 這個文件所涉的是系統管理員須知的關於Linux-PAM庫的知識. 它涉及了設定PAM的正確語法並討論維護一個可靠系統的正確的策略. 1. 介紹 Linux-PAM (Linux下的可插入式認證模組) 是一套共享函式庫,允許系統管理員來決定應用程式如何識別使用者. 換句話說,就是用不著(重寫和)重新編譯一個(支援PAM的)程式,就可以切換它所用的認證機制. 你可以整個的升級你的認證系統而不用去管應用程式本身. 傳統上,當一個應用程式有身份識別的需求,它就不得不把某一種驗證演算法寫進去. 例如,就傳統的UN*X系統而言,核對使用者身份的方法就是要求使用者輸入正確的密碼. 這密碼,除了開頭的兩個字元作為"salt",剩下的是加密過的(經由crypt(3)). 接著使用者被驗證這個加密過的密碼是否與他在密碼檔(就是/etc/passwd檔案)中他的那筆記錄的第二欄相符.在這樣的系統裡,絕大部份許可權的授予是基於這種單一的認證機制. 許可權決定於個人的識別碼(uid)和不同群組的成員.服務和程式是否可用由個人和群組的識別碼決定.傳統上,群組關係經由/etc/group檔案中的記錄來賦予. 不幸的是,隨著計算機速度的不斷提高,再加上滿世界的關於網路計算的介紹,使得象這樣曾是安全的驗證機制,變得易受攻擊了.面對這樣的現實,新的驗證方法正在持續的開發中. Linux-PAM專案的目標是把賦權部分的開發以可靠的合適的鑑定模式從軟體中分離出來。這目標已經透過提供一組庫函式實現了,應用程式可以用這些函式來請求驗證某個使用者。這個 PAM 由特定的系統檔案配置,/etc/pam.conf (或者是在/etc/pam.d/裡的一系列配置檔案) 以經由特定的可用的認證模組來鑑定某個使用者的請求。這些個模組通常位於/usr/lib/security目錄並且以可動態載入的目標檔案的形式出現(參見 dlopen(3)). 2. 文中的說明 在繼續閱讀之前, 請記住本文假定提到的檔案位於預設的目錄。這個預設的目錄我們遵循RFC(RFC-86.0,見 bibliography)中的約定。如果你正用一個支援PAM但是卻選擇以不同的方式釋出這些檔案的釋出版的Linux(或是其他的OS) (Red Hat就是這樣的釋出版), 那你從文章中直接複製例子的時候就要注意一下了. 舉個例子, where it is explicit, 本文假定PAM可載入目標檔案(就是 模組)位於這個目錄: /usr/lib/security/. 可是, Red Hat Linux, 為遵循Linux檔案系統標準(the FSSTND),把這些檔案放在/lib/security. 在使用本文的例子時請小心的做一些轉換的工作。 3. 概觀 For the uninitiated,我們開始於考慮一個例子。我們來說說一個應用程式提供一些服務給使用者; login 就是這樣的程式。 Login 做兩件事,它首先確認提出請求的使用者正是他們自己,第二步提供給他們所請求的服務:就login而言服務即是一個命令列外殼(command shell)(如bash,tcsh,zsh之類。)以這個使用者的身份去跑。 傳統上,前一個步驟透過login提示使用者輸入密碼然後確認系統是否同意登入;接著確認(就係統而言)使用者確實是提出要求的那人。這類工作就是Linux-PAM的典型應用。 從應用程式設計師的角度看(在這個例子裡就是寫login程式的人), Linux-PAM處理認證的工作——確認使用者的身份。 Linux-PAM的彈性在於,你,系統管理員有權來決定實施怎樣的驗證方案。你有權來設定你的系統裡的任何支援PAM的應用程式的驗證方案。就是說,你可以將驗證方案設計成單純的信任>任何人(pam_permit)到像偏執狂似的透過視網膜掃描,聲音識別和一個密碼! 舉例說明你所面對的彈性,考慮以下情形:系統管理員(家中的父母)希望提高他的使用者(孩子們)的算術能力。她可以設定他們喜歡玩的“Shoot 'em up”(遊戲,當然得支援PAM)透過提問小於12的一對隨機數的乘積的辦法來進行認證。很明顯不管遊戲本身如何,他們會很快學會乘法表。等他們再大些,認證可以升級到包括多位除法!(譯者:我已經準備用這種辦法來教我寶貝女兒學加減乘除了。) Linux-PAM處理四種獨立的(管理)工作。它們是: 認證管理; 帳號管理; 會話期間管理;和密碼管理。 The association of the preferred management scheme with the behavior of an application is made with entries in the relevant Linux-PAM configuration file. 管理的功能由配置檔案中指定的模組 來完成。這檔案的語法在 below部分討論。 下面的插圖描述了Linux-PAM的整個組織結構。 +----------------+ | application: X | +----------------+ / +----------+ +================+ | authentication-[----&gt----] Linux- |-- 如果 libpam 和 libpam_misc 不在程式所需的函式庫之列,那麼它將不會用PAM. 然而,這兩個函式庫還是可能已經包含程式序了,不過問題依然存在,因為把PAM 寫死在程式不會如你期望的工作.所以一個更可靠的方法是做一下的測試: 在/etc/pam.d目錄裡,需要為程式設有一個配置檔案.具體的檔名是寫死在程式裡的. 通常和程式名一樣,但卻不總是這樣.為舉例說明,假設程式名字叫"pamprog",配置檔案 是/etc/pam.d/pamprog. 在/etc/pam.d/pamprog裡寫這兩行: auth required pam_permit.so auth required pam_warn.so 現在試著執行pamprog. 配置檔案的第一行是說所有使用者都被允許. 第二行會在你的 syslog 檔案(或者其它你的syslog會寫的檔案) 裡寫一個warning. 如果這測試是成功的,那麼你就知道你有一個"懂"pam的程式,並且你可以開始更有趣的工作: 決定如何在你的/etc/pam.d/pamprog裡堆徹PAM模組. 4. Linux-PAM的設定檔 Linux-PAM 給系統管理員提供了相當大的彈性來設定系統里程式的許可權賦予. 由PAM控制的系統安全的本地配置可以包含在以下兩個地方: 或者是一個單一的系統檔案: /etc/pam.conf; 或者是/etc/pam.d/ 目錄下的檔案. 本章我們來討論這些檔案的語法和一般的選項. 4.1 設定檔的語法 請注意, 在這些檔案裡 Linux-PAM 特有的符號是不區分大小寫的. 而模組的路徑,是大小寫敏感的,因為它標識的是Linux下的檔案的名字. 而任何模組引數的大小寫分別由各個模組定義. 除以下的行之外,為系統管理員方便,還有兩個特殊的字元: 註解由'#'開頭,結束於行結束,另外,模組的描述行可以以 ''脫字元延續到下一行. 通常/etc/pam.conf裡的每一行有以下格式: service-name module-type control-flag module-path arguments 接下來,我們來解釋每個欄位的意思.另一種(也是常被採用的)設定Linux-PAM 的方法是透過/etc/pam.d/裡的檔案來實現.在我們解釋完上面的那行之後, 我們就來討論這種方法. service-name 這筆記錄相關的服務名稱.通常這服務名稱是特定應用程式的名字.比如, `ftpd', `rlogind' 和 `su' 這些. . 有一個保留的服務名稱,它是用來定義預設的認證機制的. 它就是`OTHER',大小寫無關.注意,當已經有為指定服務定義了模組,那麼 `OTHER' 記錄會被忽略. module-type 模組的四種(目前是)型別.這四種型別是: * auth; 這種模組型別確定有關使用者認證的兩方面. 第一,它確認使用者就是他們自己,這透過指示應用程式提示使用者輸入密碼或者其它證實身份的方法.第二,這類模組會賦予成員資格 Secondly, the module can grant group membership (independently of the /etc/groups file discussed above) or other privileges through its credential granting properties. * account; 這些模組處理非認證級的帳號管理. 典型的用法是基於一天的不同時間段來限制/允許訪問某服務,當前可用的系統資源 (最大使用者數)或者限制特定使用者---'root只能從控制檯登入. * session; 首先, 這類模組和一系列動作有關,指在使用者得到/失去服務時要做的事. 這包括記錄使用者的登入/登出,掛載必須的目錄等等. * password; 這最後一種型別在更新使用者的認證標誌時需要. 通常,各個基於"質問/回答"(譯註:指傳統的使用者名稱/密碼的認證方法)的認證方法(auth)有一個對應的此模組. control-flag 控制符用來指示當某一模組返回成功或失敗時PAM如何動作. 既然模組可以被堆疊 (同種型別的模組按先後順序執行,一個接一個), 控制符決定每個模組的重要程度.應用程式不會直接接收'/etc/pam.conf' 裡列出的每一個模組的成功或失敗的結果. 相應的是,它只從Linux-PAM接收一個 成功 或 失敗 的結論. 這些模組的執行順序就是它們在 /etc/pam.conf裡的記錄的順序;排在前面的記錄在排在後的記錄之前被執行. 在Linux-PAM 0.60版本里, 這個control-flag 可以有兩種語法來定義. 簡單一些(也是過去的)語法是用一個限定詞指示相關模組的重要程度. 有四個關鍵字: required, requisite, sufficient 和 optional. Linux-PAM 將這四個關鍵字解釋為: * required; 需要的,這表明此模組返回成功值對於整個module-type的成功是必要的. 此模組的返回失敗並不會傳回給使用者直到剩下的模組(同樣module-type)都執行過. * requisite; 必要的,類似 required, 只不過, 當這類模組返回失敗時,整個控制會立刻回到應用程式. 返回值同第一個 需要的 或 必要的模組返回的失敗. 注意,這標誌可以用來防止 required or requisite module to fail. Note, this flag can be used to protect against the possibility of a user getting the opportunity to enter a password over an unsafe medium. It is conceivable that such behavior might inform an attacker of valid accounts on a system. This possibility should be weighed against the not insignificant concerns of exposing a sensitive password in a hostile environment. * sufficient; 充分的,這模組返回的成功會被認為已經 充分滿足Linux-PAM 庫確認這類模組(module-type)是成功的條件. 如果沒有先前的requisite 模組返回了失敗,那麼不再會有其它'堆疊' 的模組被呼叫. (注意, 這種情況下,隨後的requisite 模組就不會 被呼叫.). 這模組返回的失敗不會看作是致命的錯誤而至影響應用程式從這module-type 得到成功的結果. * optional; 可選的,正如這名字一樣,此?control-flag 致使模組對最終的成功或失敗的結果不會產生決定性的影響. 一般,Linux-PAM 在確定整個模組堆成功活失敗時忽略這模組. 然而, 當從之前或後續的模組得不到明確的成功或失敗的結果時,這模組將決定返回給應用程式的狀態. 後種情況會出現在比如當其它模組返回PAM_IGNORE 時. 更復雜(新)的語法則更明確,使管理員有更多的控制使用者認證的空間. 這種控制符以方括號包含,由一系列的value=action 對組成: [value1=action1 value2=action2 ...] 這裡的 valueI 有以下值 return values: success; open_err; symbol_err; service_err; system_err; buf_err; perm_denied; auth_err; cred_insufficient; authinfo_unavail; user_unknown; maxtries; new_authtok_reqd; acct_expired; session_err; cred_unavail; cred_expired; cred_err; no_module_data; conv_err; authtok_err; authtok_recover_err; authtok_lock_busy; authtok_disable_aging; try_again; ignore; abort; authtok_expired; module_unknown; bad_item; conv_again; incomplete; 和 default. 最後的 (default) 被用來定義當沒有明確定義時的預設動作. actionI 可以是一個正數或者是以下標識: ignore; ok; done; bad; die; 和 reset. 當以一個正數J 作為action 時,它的作用是指示以下J個模組將被跳過. 透過這種手段, 管理員可以開發出適度複雜的模組堆疊,它以許多不同的路徑執行. 至於以何種路徑則決定於某個模組的反應. * ignore - 此類模組的返回狀態將不會影響應用程式所得到的返回值. * bad - 這表示相應的返回值將被認為是模組失敗. 如果此模組是堆疊中的第一個失敗的模組, 它的狀態值將作為整個堆疊的狀態. * die - 和 bad 相同,不過會終止整個模組堆疊,PAM立即返回到應用程式. * ok - 這告訴PAM 管理員要讓此返回值直接作用於整個模組堆疊的返回. 換句話說, 如果堆疊的原先狀態會導致返回 PAM_SUCCESS, 這模組的返回值將會覆蓋這結果. 請注意:如果堆疊的原先狀態儲存著一些意為模組失敗的值,這'ok'將不會用來覆蓋那樣的值. * done - 和 ok 一樣, 不過會終止整個模組堆疊, PAM立即返回到應用程式. * reset - 清除儲存模組堆疊狀態的記憶體並且重新開始下一組堆疊. 來體會一下這種新語法的強大之處, 從 Linux-PAM-0.63起, 客戶外掛代理的概念被引進. 這多少使PAM支援從C/S應用程式固有的傳輸協議進行機器-機器的認證成為可能.(?) 透過 ``[ ... value=action ... ]'' 的語法, 使應用程式對支援binary prompt?的客戶端採用binary prompt?, 而對舊有的客戶端則向後相容的採用另一種認證模式. 夠靈活吧? module-path 是可動態載入目標檔案的路徑; 也即可插入式模組 本身. 如果路徑的首字元是 `/', 那它被作為一個完整路徑. 如果不是這樣, 那模組的路徑則會加上預設的模組路徑: /usr/lib/security (見 above). args args 是一組傳給模組的引數. 類似一般Linux的指令的引數. 通常, 合法的引數是可選的並且是模組特有的. 無效的引數會被模組忽略, 可是, 當抓到一個無效引數, 模組被要求寫一個錯誤資訊到 syslog(3). 下一節有一個一般 選項的列表. 設定檔裡如果有任一行有格式錯誤, 那通常會導致認證流程失敗. 相應的錯誤資訊會透過呼叫syslog(3)寫入系統日誌. 4.2 基於目錄的設定 從0.56版開始有比單個配置檔案更靈活的做法, 可以透過/etc/pam.d/裡的檔案來配置libpam. 這種方法,/etc/pam.d/裡的檔名和服務名(service-name)相同(小寫): 這是各服務的個性化設定檔. Linux-PAM 可以編譯成兩種模式之一. 首選的模式是使用/etc/pam.d/ 或/etc/pam.conf設定,但不是同時兩者皆可.也就是說, 如果 那我先在還能做些什麼苦差呀? 好,不要驚慌. 你首先要認識到的是這種事情會發生在50%的從未碰過PAM的使用者身上. 這已經不止發生一兩次了,每次都不一樣,但是最終,每次解決方法總是一樣的. 首先,我希望你設定了LILO的延時.如果是的,重開機,按下shift或者tab或其它什麼鍵, 然後輸入: LILO boot: linux single (把 'linux' 替換成你的linux啟動字串). 這會把你帶進系統而不用登入. 想知道從控制檯破掉一臺Linux主機是多容的事? 現在知道了吧. 如果沒法那樣做,那你就要一個啟動軟盤和一個根檔案系統盤象slachware的rescue.gz. (Red Hat的安裝盤有這樣的模式.) 總之,重點是要進入到root提示符. 然後, 我假設你還沒有完全打爛你的PAM安裝包 - 僅僅是破壞了設定檔. 這裡是重新設定PAM的步驟: cd /etc mv pam.conf pam.conf.orig mv pam.d pam.d.orig mkdir pam.d cd pam.d 然後用vi在這目錄下建立一個叫"other"的檔案.包含下面四行: auth required pam_unix_auth.so account required pam_unix_acct.so password required pam_unix_passwd.so session required pam_unix_session.so 現在你有了PAM的最簡單的設定了, 這象你以前用的方式一樣工作. 所有的事情又魔法似的能運作了. 來試著按ALT-F2從另一控制檯登入. 如果無法登入, 你就有了大麻煩了,或者打錯了什麼. 奇怪的是如果你在設定檔裡輸錯了東西, 你不會從控制檯得到任何錯誤 - 錯誤只會記錄 在日誌檔裡. 所以看看那兒!(tail /var/log/messages.) 從現在起你可以回頭做實際設定, 但願這首次經歷沒把你搞懵了. :/ 一些要點 (to make everything "right" with Red Hat...): 從RedHat安裝目錄安裝最新的pam, pamconfig, and pwdb , 下一個指令 rpm -Uvh [或需要加上 --force too] pam-* pamconfig-* pwdb-* 然後確認你安裝(或重灌)了最新版的libc, util-linux, wuftp, 和 NetKit. 或許 還有相關的x應用程式, 像xlock,但我還從沒有用過.(注:這篇文章寫的比較早,那時候 X程式很少) 5.2 防止採用一個脆弱的"other"設定. 擁有一個脆弱的預設設定(OTHER)是件壞事. OTHER是所有面向PAM的程式的預設設定,如果它很脆弱, 你的系統就有可能變得易受攻擊. 這裡有個"other"設定的例子.pam_deny 模組會拒絕所有訪問同時pam_warn模組會在在系統日誌裡記下auth.notice: # # The PAM configuration file for the `other' service # auth required pam_deny.so auth required pam_warn.so account required pam_deny.so account required pam_warn.so password required pam_deny.so password required pam_warn.so session required pam_deny.so session required pam_warn.so 6. 可用模組的參考指南 以下是目前Linux-PAM可用的各種模組的具體說明. 通常這些模組可以自由使用. 除非特別指出. 在複製下面的例子時也請注意 on text conventions above裡的備註. 6.1 access 模組 概要 模組名: pam_access 作者: Alexei Nogin 維護者: 作者 提供的管理組: account Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 需要一個設定檔:/etc/security/access.conf 網路介面: 如果設定了就透過PAM_TTY , 否則嘗試呼叫ttyname()從標準輸入檔案描述符得到tty名字.標準的 gethostname(), yp_get_default_domain(), gethostbyname() 呼叫. NIS 用來提供網路使用者組的支援. 概述 提供logdaimon(?)型別的登入訪問控制. Account component 識別的引數: 描述: 這模組提供基於登入名稱和主機(或域名),internet地址(或網路數),或者非網路登入的終端名字的錄訪問控制.診斷資訊透過syslog(3)記錄. 來自Wietse Venema的logdaemon-5.6裡的login_access.c經過A. Nogin修改後採用. 例子/建議用法: 推薦使用. 例如,在管理像NIS伺服器和郵件伺服器時, 你需要有一些活動的帳號, 但卻不想所有這些帳號都有登入的許可權. 對於/etc/pam.d型別的設定方式,你的模組放在/lib/security裡, 把下面一行加在 /etc/pam.d/login, /etc/pam.d/rlogin, /etc/pam.d/rsh 和 /etc/pam.d/ftp前面: account required /lib/security/pam_access.so 注意, 除非你的系統忽略.rhosts, 否則這模組不會產生作用. 見pam_rhosts_auth的文件. 在釋出包裡包含有一個 access.conf 的樣本. 6.2 Chroot 概要 模組名: pam_chroot 作者: Bruce Campbell 維護者: Author; proposed on 20/11/96 - email for status 提供的管理組: account; session; authentication Cryptographically sensitive: 安全等級: 程式碼清潔度: Unwritten. 系統依賴: 網路介面: 要求是 localhost. 概述 這模組的目的是對一般使用者進行透明的包裹, 這可以把他們置於一個偽裝的檔案系統 (比如, 他們的'/' 實際上是 /some/where/else). 如果你有幾個不同類的使用者, 並且你對於安全性有一點點偏執, 那這模組將非常有用. 這可以用來限制哪些使用者能看到什麼, 並且限制他們只能執行哪些程式. Account component: Need more info here. Authentication component: Need more info here. Session component: Need more info here. 識別的引數: Arguments and logging levels for the PAM version are being worked on. 描述: 範例/建議用法: 提供一組合理的程式 - 僅放入 'cat', 'ls', 'rm', 'cp' 和 'ed' 有點... 不要太極端 (比如, 你可以為每個使用者設定各自分開的環境, 但這樣會太浪費磁碟空間.) 6.3 Cracklib 可插入的密碼強度檢查程式 概要 模組名: pam_cracklib 作者: Cristian Gafton 維護者: 作者. 提供的管理組: password Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 需要系統庫 libcrack 和系統字典: /var/cache/cracklib/cracklib_dict. 網路介面: 概述 這模組可以插入給定程式的password堆疊來提供密碼的強度檢驗. 這模組以以下流程執行: 它首先呼叫Cracklib例程來檢查密碼的強度; 如果Cracklib認可, 那麼模組會經行額外一些檢查. 這包括: * Palindrome - 新密碼是否為舊密碼的迴文? * Case Change Only - 新密碼是否只是拿舊密碼改了些大小寫? * Similar - 新密碼是否太像舊密碼? 這由一個引數控制, difok 這是新舊密碼的相差字元能被接受的最小個數, 模式是10個或者新密碼的1/2長, 二者取小的那個. * Simple - 新密碼是否太簡單? 這由五個引數控制: minlen, dcredit, ucredit, lcredit 和 ocredit. 這些引數如何生效以及預設值是什麼見引數一節. * Rotated - 新密碼是否為舊密碼的輪轉? * Already used - 密碼是否曾經用過? 先前用過的密碼儲存在/etc/security/opasswd裡. 不帶引數的配置這模組可以很好的工作在標準的unix密碼加密環境. 對於MD5加密, 密碼可以長於8個字元,那麼這模組的預設設定就使使用者選擇一個滿意的密碼變得困難了. 顯然, 對於新密碼不能包含多於一半的舊密碼的字元的要求就成了一個不一般的限制了. 比如, 舊密碼"the quick brow fox jumped over the lazy dogs" 將難於更改... 此外, 預設設定允許密碼短至5個字元. 對於採用md5加密演算法的系統, 加大允許的最短密碼長度會是個好主意. One can then allow more credit for different kinds of characters but accept that the new password may share most of these characters with the old password. Password component 識別的引數: debug; type=XXX; retry=N; difok=N; minlen=N; dcredit=N; ucredit=N; lcredit=N; ocredit=N; 描述: 這部件的動作是提示使用者輸入密碼然後透過比對系統字典和一連串規則來檢查它的強度以識別出差勁的選擇. 預設動作是提示使用者輸入一個密碼, 檢查強度, 然後, 如果透過檢查, 提示第二次輸入密碼 (用來檢驗第一次的輸入是正確的). 這之後, 密碼被當作新的認證標識傳送給隨後的安裝的模組. 預設的動作可以用一些引數改成許多不同的方式: * debug - 這選項令此模組寫入資訊到syslog(3)以顯示此模組的現為(此選項不會 把密碼資訊寫入日誌檔). * type=XXX - 提示使用者輸入密碼的預設提示符是: ``New UNIX password: '' 和 ``Retype UNIX password: ''. 用此引數可以把 "UNIX" 替換成 XXX. * retry=N - 本模組要求新密碼(用來檢查強度)的預設次數是1次. 用這引數可以增加到N次. * difok=N - 這引數會改變允許新舊密碼的字元差異為至少10個這樣的預設值. 此外, 如果有一半的字元不同, 新密碼就會被採用. * minlen=N - 可接受的最短的密碼長度+1. 此外對於新密碼的長度, 對於每個不同種的字元 (其它,大寫,小寫 和數字),會得到"加分" (長度+1). 此引數的預設值是9, 這對於舊的UNIX密碼體系已經夠了, 但是對於利用md5的額外安全性或許太小了. 注意, Cracklib本身有一對長度的限制: 4, 寫死在程式裡的"路太短"的限制;6,定意的限制.這兩個限制會不經過參考minlen 而被檢查出來. 如果你要允許密碼長度短至5, 你要麼不要使用此模組要麼重新編譯crack庫並重新編譯此模組. * dcredit=N - 這是對於新密碼因包含數字而得到"加分"的限制. 如果你有小於或等於N個數字, 每個數字將會對整個長度+1來迎合當前minlen 的值. dcredit的預設是1, 對於小於10的minlen 推薦此值. * ucredit=N - 這是對於新密碼因包含大寫字元而得到"加分"的限制. 如果你有小於或等於N個大寫字元, 每個大寫字元將會對整個長度+1來迎合當前minlen 的值. ucredit的預設是1, 對於小於10的minlen 推薦此值. * lcredit=N - 這是對於新密碼因包含小寫字元而得到"加分"的限制. 如果你有小於或等於N個小寫字元, 每個小寫字元將會對整個長度+1來迎合當前minlen 的值. lcredit的預設是1, 對於小於10的minlen 推薦此值. * ocredit=N - 這是對於新密碼因包含其它字元而得到"加分"的限制. 如果你有小於或等於N個其它字元, 每個其它字元將會對整個長度+1來迎合當前minlen 的值. ocredit的預設是1, 對於小於10的minlen 推薦此值. 範例/建議用法: 為舉例說明如何使用此模組, 我們列出如何將此模組和pam_unix 部件堆疊: # # 下面兩行堆疊了兩個password型別的模組. 在這例子裡, 使用者有3次機會輸入健壯的密碼. # "use_authok"引數確保pam_unix模組不再另外提示輸入密碼, # 而是採用由pam_cracklib提供的密碼. # passwd password required pam_cracklib.so retry=3 passwd password required pam_unix.so use_authtok 另外一個例子(以/etc/pam.d/passwd的格式)是用md5密碼加密的情形: #%PAM-1.0 # # 下面兩行採用MD5系統, 密碼長度最少14+出現數字的最多2個"加分"+ # 出現其它字元的最多2個"加分", 並且至少有3個字元沒有出現在舊密碼中. # password required pam_cracklib.so difok=3 minlen=15 dcredit= 2 ocredit=2 password required pam_unix.so use_authtok nullok md5 6.4 死鎖模組 概要 模組名: pam_deny 作者: Andrew G. Morgan 維護者: current Linux-PAM maintainer 提供的管理組: account; authentication; password; session Cryptographically sensitive: 安全等級: 程式碼清潔度: 清潔的. 系統依賴: 網路介面: 概述 這模組用來拒絕訪問. 它永遠透過PAM架構告知程式失敗. 正如概述 above裡提到的, 這模組適合用在預設(OTHER)條目. Account component 識別的引數: 描述: 這部件除了返回失敗外不做任何動作, 返回型別是 PAM_ACCT_EXPIRED. 範例/建議用法: 把這模組堆疊在account 裡將會阻止使用者透過應用程式(引用Linux-PAM的帳戶管理函式pam_acct_mgmt())獲取訪問. 下面的例子使登入變得不可能: # # add this line to your other login entries to disable all accounts # login account required pam_deny.so Authentication component 識別的引數: 描述: 這部件除了返回失敗什麼也不做, 當pam_authenticate()被呼叫(當應用程式試圖認證使用者時)時返回值是PAM_AUTH_ERR; 當pam_setcred()被呼叫(當建立連線並設定使用者證照時 -- 在具體實現中這函式不太可能被呼叫)時返回 PAM_CRED_UNAVAIL . 範本/建議用法: 為拒絕預設程式的訪問, 在你的Linux-PAM裡包含下面一行: # # add this line to your existing OTHER entries to prevent # authentication succeeding with default applications. # OTHER auth required pam_deny.so Password component 識別的引數: 描述: 模組的這部件會阻止使用者有機會修改密碼. 它總是返回PAM_AUTHOK_ERR. 範本/建議用法: 這模組可以用來阻止應用程式更新申請者的密碼. 比如, 為阻止login 在使用者的舊密碼過期後自動提示輸入新密碼, 應該把下面一行放在你的設定檔裡: # # add this line to your other login entries to prevent the login # application from being able to change the user's password. # login password required pam_deny.so Session component 識別的引數: 描述: 模組的這一方面會阻止應用程式在主機上開啟會話. 範本/建議用法: 和其它的session模組一起工作, 那模組也許顯示一下"當日訊息". 這模組可以用來阻止使用者開啟shell. 如有pam_motd在先, 我們或可用下面的設定來阻止使用者登入並提示使用者現在是系統維護時間: # # An example to see how to configure login to refuse the user a # session (politely) # login session required pam_motd.so file=/etc/system_time login session required pam_deny.so 6.5 Set/unset 環境變數 概要 模組名: pam_env 作者: Dave Kinchlea 維護者: Author 提供的管理組: Authentication (setcred) Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: /etc/security/pam_env.conf 網路介面: 概述 這模組允許(取消)設定環境變數. Supported is the use of previously set environment variables as well as PAM_ITEMs such as PAM_RHOST. Authentication component 識別的引數: debug; conffile=configuration-file-name; envfile=/env-file-name; readenv=/0|1 描述: 這模組允許你(取消)設定任意的環境變數為固定字串, 先前的環境引數和/或PAM_ITEM. 透過設定檔(預設是,/etc/security/pam_env.conf, 但是可由connfile 引數改變) 進行所有的控制. 每行由變數名開始, 每個變數有兩個可選項: DEFAULT和OVERRIDE. DEFAULT 用來設定變數的預設值, 如果沒有指定預設值則設為空字串. OVERRIDE 告訴pam_env如果變數以設定就覆蓋(覆蓋" "預設值). 如果未設定OVERRIDE, 則假定為""並且不會覆蓋其它值. VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]] (也許不存在的)環境變數可以指定值為${string} 並且(也許不存在的)PAM_ITEM 可以用來指定值:&{string} . $和& 可以由反斜線脫意為一般字元 (成為$本生). 雙引號可以用來封裝有空格的值 (但是不可以用作變數名)必須整個被引號包含並且裡面不應該有引號或者脫意的引號. 這模組還可以解析包含單純的每行是鍵=值格式的檔案(預設是/etc/environment). 可以用 envfile 旗標設定預設檔案並且可以設定readenv 旗標為1或0來決定是否啟用這選項. 這模組的行為可以由以下旗標來更改: flags: * debug - 往syslog(3)寫更多的資訊. * conffile=filename - 預設的設定檔是/etc/security/pam_env.conf. 這選項可以覆蓋此預設. 必須提供完整的檔名,目錄+檔名. * envfile=filename - 預設從/etc/environment 裡讀鍵=值對來設定變數. 這選項覆蓋預設檔案. 必須提供完整的檔名,目錄+檔名. * readenv=0|1 - 開啟或關閉讀取envfile指定的檔案(0=關閉,1=開啟). 預設是開啟. 範本/建議用法: 更多的用法見pam_env.conf . 6.6 filter 模組 概要 模組名: pam_filter 作者: Andrew G. Morgan 維護者: 作者. 提供的管理組: account; authentication; password; session Cryptographically sensitive: Not yet. 安全等級: 程式碼清潔度: 在Linux系統下可以乾淨的被編譯. 系統依賴: 需要安裝filters . 網路介面: 概述 這模組用來提供給類似ttysnoop(需要一些參考)的程式一個可選的外掛. 因為還沒有為這功能所寫的外掛出現, 這模組目前只是個玩具. 提供給這模組的唯一一個外掛僅是對輸入輸出流做大小寫轉換. (這會變得非常討厭並對基於termcap的編輯器不太友好) Account+Authentication+Password+Session components 識別的引數: debug; new_term; non_term; runX 描述: 每個組建都有呼叫過濾器的能力. 過濾器總是以所屬應用程式的許可權被execv(2) 而 不是 以使用者的許可權. 因此這些過濾器並不總能被使用者不經關掉相關會話而殺掉. 這模組的行為會被傳給它的引數相當程度的左右: * debug - 這選項增加模組被執行時寫進syslog(3)的資訊量. * new_term - 過濾器的預設動作是會設定PAM_TTY 為使用者連上應用程式時所用的終端代號. 此引數指示過濾器可以設定PAM_TTY 為一個過濾了的偽終端. * non_term - 不要試圖設定PAM_TTY . * runX - 模組必須得知道何時呼叫過濾器. 這引數告知過濾器何時被呼叫, 引數後面是各自的過濾器的完整路徑和過濾器執行時的引數. X 所允許的值是 1 和 2. 這指示過濾器執行的確切時間. 閱讀 Linux-PAM的模組開發指南會對解釋此觀念有所幫助. 基本上, 針對每個管理組都有多至兩個呼叫此模組的函式. 在 authentication 和 session 部件裡, 實際上有兩個不同的函式. 對於authentication, 這兩個函式是_authenticate 和_setcred -- 此時 run1 意味著在呼叫_authenticate時執行過濾器而run2 意味著呼叫_setcred時執行過濾器. 對於session來說, run1 意指在_open_session 階段執行過濾器, run2 在 _close_session 作用. 對於account部件. run1 和 run2 的任何一個被執行. 對於password部件, run1 用來指示當_chauthtok第一次被執行(PAM_PRELIM_CHECK階段)時呼叫過濾器,run2 指示第二次時(tt/PAM_UPDATE_AUTHTOK/階段)時呼叫. 範本/建議用法: 在寫作本時, 這模組鮮有實際應用. 如興趣所致, 你可以試著把下面幾行加入你的login的設定. # # An example to see how to configure login to transpose upper and # lower case letters once the user has logged in(!) # login session required pam_filter.so run1 /usr/sbin/pam_filter/upperLOWER 6.7 匿名訪問模組 概要 模組名: pam_ftp.so 作者: Andrew G. Morgan 維護者: 作者. 提供的管理組: authentication Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 網路介面: 提示使用者輸入email地址; 易受欺騙的.(XXX - 需要加工) 概述 此模組的意圖是提供一個可插入式的匿名ftp訪問模式. mode of access. Authentication component 識別的引數: debug; users=XXX,YYY,...; ignore 描述: 此模組會攔截使用者名稱和密碼. 如果使用者名稱是 ``ftp'' 或 ``anonymous'', 使用者的密碼以'@'為分隔符被分解成PAM_RUSER 和 PAM_RHOST 兩部分; these pam-items being set accordingly. The username is set to ``ftp''. In this case the module succeeds. Alternatively, the module sets the PAM_AUTHTOK item with the entered password and fails. 此模組的行為可以有以下旗標修改: * debug - 往syslog(3) 寫更多的資訊. * users=XXX,YYY,... - 替代 ``ftp'' 或 ``anonymous'', 提供給以逗號分開的使用者以匿名訪問; ``XXX,YYY,...''. 申請人可以輸入這些使用者名稱之一, 返回的使用者名稱設定為列表中的第一個使用者;``XXX''. * ignore - 不關心使用者的email地址(如果提供). 範本/建議用法: 見 above. 6.8 群組訪問模組 概要 模組名: pam_group 作者: Andrew G. Morgan 維護者: 作者. 提供的管理組: authentication Cryptographically sensitive: 安全等級: 對於針對setgid狀態的檔案可訪問性敏感. 程式碼清潔度: 系統依賴: 需要/etc/security/group.conf 檔案. 可被編譯成帶有或不帶libpwdb. 網路介面: 僅透過正確的PAM_TTY 項. 概述 此模組提供基於使用者名稱以及他們從哪個終端請求服務的群組設定. It takes note of the time of day. Authentication component 識別的引數: 描述: 此模組不用於認證使用者, 而是用來賦予使用者組的身份(在認證模組的憑證設定階段). 這些組身份基於他們請求的服務. 組身份列在/etc/security/group.conf . 範本/建議用法: 為使這模組正常運作,必需先要有格式正確的/etc/security/groups.conf . 此檔案的格式如下.組身份基於服務應用程式滿足此設定檔的任意行來賦予. 沒一行有如下格式(註解以`#'開頭): services ; ttys ; users ; times ; groups 前四個欄位和pam_time的etc/security/pam_time.conf語法相同, 最後的欄位, groups, 是以逗號(或者空格)分開的一個組的列表. 如果使用者的應用程式滿足前四個欄位, 使用者就被賦予列表中的組身份. 通常, 這模組對於分配使用者特有的檔案訪問許可權有幫助. 問題是一旦使用者得到了組身份, 他就可以建立一個setgid 的屬於某群組的程式. 這之後, 當使用者不再是這個組的成員時, 他們可以透過這程式獲取組身份. 之所以使用者訪問的檔案系統如此重要, 是一旦檔案系統被載入為nosuid時, 這樣的程式就無法執行. 為使這模組提供任何級別的安全性, 使用者能有寫許可權的所有檔案系統都應該被載入成nosuid模式. pam_group 模組的功能和/etc/group平行. 如果使用者已被此模組賦予了任何組身份, 他還另外被賦予/etc/group裡的相關組身份. 6.9 Add issue file to user prompt 概要 模組名: pam_issue 作者: Ben Collins 維護者: Author 提供的管理組: Authentication (pam_sm_authenticate) Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 網路介面: 概述 此模組在當提示輸入使用者名稱時顯示釋出檔案(/etc/issue). Authentication component 識別的引數: issue=issue-file-name; noesc; 描述: 此模組允許你在提示使用者輸入使用者名稱之前顯示出釋出資訊. 預設狀態下也會解析釋出檔案中的脫意程式碼,類似有些通用的getty(x 格式). 識別的脫意程式碼: * d - 當前日期 * s - OS名稱 * l - 當前tty的名字 * m - 本系統的架構(i686, sparc, powerpc, ...) * n - 主機名 * o - 域名 * r - OS的版本發行號(例如 2.2.12) * t - 當前時間 * u - 當前登入的使用者數 * U - 類似u, 它能區分用"user" 還是 "users" (比如. "1 user" or "10 users") * v - OS版本/構建日期(比如. "#3 Mon Aug 23 14:38:16 EDT 1999" on Linux). 以下旗標可以用來改變此模組的行為: * issue - 替換預設釋出檔案 * noesc - 不解析脫意程式碼 範本/建議用法: login auth pam_issue.so issue=/etc/issue 6.10 The Kerberos 4 module. 概要 模組名: pam_krb4 作者: Derrick J. Brashear 維護者: 作者. 提供的管理組: authentication; password; session Cryptographically sensitive: 採用相關 API 安全等級: 程式碼清潔度: 系統依賴: 相關庫- libkrb, libdes, libcom_err, libkadm; 和一組Kerberos的標頭檔案. 網路介面: 從網路上的Kerberos的票據中心得到Kerberos的票據授權票. 概述 此模組提供了進行Kerberos密碼認證的介面, 它能從Kerberos的票據授權伺服器取得票據授權票, 離線時毀掉票據, 和修改Kerberos密碼. Session component 識別的引數: 描述: 此部件目前會設定環境變數 KRBTKFILE (雖然目前還沒法export這變數), 以及當登出時刪除使用者的票據(要等到login 支援 PAM_CRED_DELETE ). 範本/建議用法: 直到我們能透過Linux-PAM 改變環境. Password component 識別的引數: use_first_pass; try_first_pass 描述: 這部件改變使用者的Kerberos密碼, 它首先憑舊密碼從密碼修改服務得到活動鑰匙, 然後傳送新密碼給那服務. 範本/建議用法: 僅能用於真實的real Kerberos v4 kadmind. It cannot be used with an AFS kaserver unless special provisions are made. Contact the module author for more information. Authentication component 識別的引數: use_first_pass; try_first_pass 描述: 此模組透過從Kerberos伺服器申請票據授權票來驗證使用者的Kerberos密碼, 並且可選的如果本機鍵檔案存在就從嘗試此票據中獲取本機的主機鍵並和本機的鍵檔案比對. 它還會把票據記錄在檔案以便後序使用, 並且在當離線是刪除票據檔案(目前還不行,除非login會呼叫PAM_CRED_DELETE). 範本/建議用法: 此模組可以同採用MIT v4 的Kerberos伺服器協同工作. 可以加以修改已使其支援AFS型別的Kerberos. 為防止密碼演算法的不一致,目前還沒有支援. 6.11 The last login module 概要 模組名: pam_lastlog 作者: Andrew G. Morgan 維護者: 作者. 提供的管理組: auth Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 用到/var/log/lastlog裡儲存的資訊. 網路介面: 概述 此模組用於維護/var/log/lastlog 檔案. 當程式呼叫pam_open_session()函式時寫入一個條目並且在呼叫pam_close_session()時完成此條目. 這函式還可以顯示一條關於最後一次登入的資訊. 如果應用程式已經有此功能, 則沒有必要使用此模組. Authentication component 識別的引數: debug; nodate; noterm; nohost; silent; never 描述: 此模組用於無論使用者從何種支援PAM的應用程式登入系統都提供"Last login on ..." 這樣的資訊. 此外, 此模組還維護/var/log/lastlog 檔. 可有一下旗標改變此模組的行為: * debug - 往syslog(3)裡寫入更多的資訊. * nodate - 當顯示最後登入的資訊時隱藏具體日期. * noterm - 當顯示最後登入的資訊時隱藏終端名稱. * nohost - 當顯示最後登入的資訊時隱藏客戶機名稱. * silent - 不顯示任何最後登入資訊: 僅僅更新/var/log/lastlog . * never - 如果/var/log/lastlog 沒有包含此使用者的任何曾經登入的資訊, 則顯示使用者從未登入的資訊: ``welcome..." . 範本/建議用法: 此模組可以用來在使用者login後顯示是否有新郵件. 下面是一個以/etc/pam.conf配置的樣本: # # do we have any mail? # login session optional pam_lastlog.so 注意, 有些應用程式也許自己會實現這些功能. 這種情況下就不必使用此模組了. 6.12 資源限制模組 概要 模組名: pam_limits Authors: Cristian Gafton Thanks are also due to Elliot Lee for his comments on improving this module. 維護者: Cristian Gafton - 1996/11/20 提供的管理組: session Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 需要有/etc/security/limits.conf 設定檔並且核心要支援資源限制. 也使用libpwdb 庫. 網路介面: 概述 此模組透過Linux-PAM 的 開啟-會話的鉤子來設定使用者會話能夠獲取的資源的限制. 由下面會討論的設定檔來更精確的支配動作. Session component 識別的引數: debug; conf=/path/to/file.conf 描述: 透過設定設定檔/etc/security/limits.conf 的內容來設定使用者會話的資源限制. uid=0 的使用者不受此約束. 以下旗標可以用來改變此模組的行為: * debug - 往syslog(3)寫入冗長的記錄. * conf=/path/to/file.conf - 指定一個替換的limits設定檔. 範本/建議用法: 為使用此模組, 系統管理員必須首先建立一個 root只讀 的檔案(預設是 /etc/security/limits.conf). 這檔案描述了superuser想強迫使用者和使用者組的資源限制. uid=0的帳號不會受限制. 設定檔的每一行描述了一個使用者的限制,以下面的格式: 上面列出的欄位可以填下面的值:... 可以是: * 一個使用者名稱 * 一個組名,語法是@group * 萬用字元*, 定義預設條目 可以有一下兩個值: * hard 為施行硬 資源限制. 這些限制由superuser設定,由Linux核心施行. 使用者不能提升他對資源的需求到大於此值. * soft 為施行軟 資源限制. 使用者的限制能在軟硬限制之間上下浮動. 這種限制在普通用法下可以看成是預設值. 可以是以下之一: * core - 限制core檔案的大小(KB) * data - 最大的資料大小 (KB) * fsize - 最大的檔案尺寸 (KB) * memlock - 最大能鎖定的記憶體空間(KB) * nofile - 最多能開啟的檔案 * rss - 最大的駐留程式大小(KB) * stack - 最大的堆疊尺寸(KB) * cpu - 最大的CPU 時間(分鐘) * nproc - 最多的程式數 * as - 地址空間的限制 * maxlogins - 使用者的最多登入數 * priority - 使用者程式執行時的優先順序 要完全不限制使用者(或組), 可以用一個(-)(例如: ``bin -'', ``@admin -''). 注意,個體的限制比組限制的優先順序高, 所以如果你設定admin組不受限制, 但是組中的某個成員被設定檔中某行限制, 那麼此使用者就會依據這樣被限制. 還應該注意, 所有的限制設定只是每個登入的設定. 他們際不是全域性的,也不是永久的 ; 之存在於會話期間. 在limits 的設定檔中, ``#'' 開頭的行為註解. pam_limits 模組會透過syslog(3)報告它從設定檔中找到的問題. 下面是個設定檔的樣本: # EXAMPLE /etc/security/limits.conf file: # ======================================= # * soft core 0 * hard rss 10000 @student hard nproc 20 @faculty soft nproc 20 @faculty hard nproc 50 ftp hard nproc 0 @student - maxlogins 4 注意, 對同一個資源(見@faculty)的軟限制和硬限制 - 這建立了使用者可以從指定服務會話中得到的預設和最大允許的資源數. 對於需要進行資源限制的服務例程(如login), 把下面一行放在/etc/pam.conf 裡此服務的設定的最後一行(通常在pam_unix session後面): # # Resource limits imposed on login sessions via pam_limits # login session required pam_limits.so 6.13 The list-file module 概要 模組名: pam_listfile 作者: Elliot Lee 維護者: Red Hat Software: Michael K. Johnson 1996/11/18 (if unavailable, contact Elliot Lee ). 提供的管理組: authentication Cryptographically sensitive: 安全等級: 程式碼清潔度: clean 系統依賴: 網路介面: 概述 list-file模組提供基於任意檔案的對服務例程的拒絕或允許的設定 Authentication component 識別的引數: onerr=succeed|fail; sense=allow|deny; file=filename; item=user|tty|rhost|ruser|group|shell apply=user|@group 描述: 這模組先獲取指定型別的專案 -- user 指定使用者名稱, PAM_USER; tty 指定請求建立時的獲取的終端名, PAM_TTY; rhost 指定請求建立的主機 (如果有), PAM_RHOST; ruser指定對方主機中發起連線請求的使用者名稱(如果可以), PAM_RUSER -- 然後尋找這些專案是否出現在filename中. filename每行包含一個專案. 如果找到對應專案, 那麼如果 sense=allow, 則返回PAM_SUCCESS, 認證請求成功; 否則如果 sense=deny, 就返回PAM_AUTH_ERR, 認證請求失敗. 如果有錯誤發生(比方, 如果 filename 不存在, 或者引數不完整), 那麼如果onerr=succeed, 就返回PAM_SUCCESS , 否則如果onerr=fail, 就返回PAM_AUTH_ERR 或者 PAM_SERVICE_ERR. 附加的引數, apply=, 能夠限制應用程式只對指定的使用者 (apply=username)或指定的組(apply=@groupname)適用本規則. 這個附加的限制只對tty,rhost 和shell有意義. 除了這最後一個引數外, all arguments should be specified; do not count on any default behavior, as it is subject to change. 此模組不授予任何證照. 範本/建議用法: 傳統的``ftpusers'' 認證可以由/etc/pam.conf下面的條目實現: # # deny ftp-access to users listed in the /etc/ftpusers file # ftp auth required pam_listfile.so onerr=succeed item=user sense=deny file=/etc/ftpusers 注意,列在/etc/ftpusers 裡的使用者將不允許訪問ftp服務. 要只允許指定的使用者可以登入, 你可以在pam.conf裡設定以下的條目: # # permit login to users listed in /etc/loginusers # login auth required pam_listfile.so onerr=fail item=user sense=allow file=/etc/loginusers 要什這正常工作, 所有允許登入的使用者都應該列在/etc/loginusers. 除非你明確的要試著把root所在門外, 否則在你這樣設定好, 登出之前最好確認: 要麼root列在/etc/loginusers, 要麼列表裡有使用者可以su 成root. 6.14 The mail module 概要 模組名: pam_mail 作者: Andrew G. Morgan 維護者: Author 提供的管理組: Authentication (credential) Session (open) Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 預設的郵件目錄:/var/spool/mail/ 網路介面: 概述 此模組檢視使用者的郵件目錄並指示裡面是否有郵件. whether the user has any mail in it. Session component 識別的引數: debug; dir=direcory-name; nopen; close; noenv; empty; hash=hashcount; standard; quiet; 描述: 此模組給使用者提供"you have new mail" 的服務. 它可以嵌入到任何有憑證鉤子的應用程式裡. 它給一個資訊指示使用者的郵件目錄中是否有最新的郵件. 此模組還設定Linux-PAM的環境變數 MAIL 為使用者的郵件目錄. 以下旗標可以用來改變此模組的行為: * debug - 往syslog(3)裡寫入更多資訊. * dir=pathname - 從給定的pathname查詢使用者的郵件. 預設的郵件位置是/var/spool/mail. 注意,如果提供的pathname 以`~'開頭, 意指目錄是在使用者的家目錄裡. * nopen - 指示當使用者獲取證照時不要列印任何資訊, 這旗標用來設定MAIL環境變數而不用顯示任何資訊. * close - 指示模組當使用者被撤回證照時檢查是否有郵件. * noenv - 不要設定MAIL 環境變數. * empty - 當使用者的郵箱是空的時候顯示這狀態. * hash=hashcount - 郵件目錄的hash深度. 比如, hashcount = 2 意味著郵箱是/var/spool/mail/u/s/user. * standard - 舊的 "You have..." 格式, 不顯示具體的郵箱位置. 同樣實現"empty". * quiet - 只在有新郵件時才報告. 範本/建議用法: 此模組用來當使用者登入到系統是提示他有新郵件. 下面是/etc/pam.conf 的樣本: # # do we have any mail? # login session optional pam_mail.so 注意,有些應用程式會自己實現這功能, 這種情形下,就不必使用此模組了. Authentication compent authentication 部件和session部件一樣運作, 除了他在pam_setcred()階段被啟用. 6.15 在首次登入是建立使用者家目錄 概要 模組名: pam_mkhomedir 作者: Jason Gunthorpe 維護者: Ben Collins 提供的管理組: Session Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 網路介面: 概述 為透過認證的使用者按需建立家目錄. Session component 識別的引數: debug; skel=skeleton-dir; umask=octal-umask; 描述: 此模組對於帳號集中管理(NIS,NIS+,或LDAP)並且多系統訪問的分散式系統有用處. 它不需要管理員在每個系統都去建使用者的家目錄,而是當使用者第一次成功登入時自動建立. skeleton目錄(通常是/etc/skel/)用來複製預設檔案, 這模組也為建立的檔案設定umask. 以下旗標可以用來改變此模組的行為: * skel - 從skeleton目錄處複製預設檔案到新建立的家目錄. * umask - 和你在shell下設umask同樣格式的八進位制數. 範本/建議用法: session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 6.16 輸出motd檔案 概要 模組名: pam_motd 作者: Ben Collins 維護者: Author 提供的管理組: Session (open) Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 網路介面: 概述 此模組在成功登入時輸出motd檔案 (預設是/etc/motd) . Session component 識別的引數: debug; motd=motd-file-name; 描述: 此模組允許你當成功登入後有任意的motd(當日訊息)輸出. 預設的檔案是 /etc/motd, 但是可以設定為任意檔案. 以下旗標可以用來改變此模組的行為: * motd - 如果不打算用預設檔案, 這裡指定檔案. 範本/建議用法: login session pam_motd.so motd=/etc/motd 6.17 The no-login module 概要 模組名: pam_nologin 作者: Written by Michael K. Johnson (based on code taken from a module written by Andrew G. Morgan ). 維護者: Michael K. Johnson 提供的管理組: authentication Cryptographically sensitive: 安全等級: 程式碼清潔度: 1個關於dropping const的警告 系統依賴: 網路介面: 概述 提供標準的Unix nologin的認證. Authentication component 識別的引數: 描述: 提供標準的Unix nologin的認證. 如果存在/etc/nologin 檔案, 則只有root允許登入; 其他使用者會得到一個錯誤資訊並且不能登入. 所有使用者(root 或 其它使用者) 會顯示/etc/nologin裡的內容. 如果不存在/etc/nologin , 此模組返回成功. 範本/建議用法: 為使此模組生效, 所有登入方法都要由此模組來把關. 為和傳統UNIX的nologin相同作用, 它應該被作為required方法, 並且放在任何sufficient之前. 6.18 The promiscuous module 概要 模組名: pam_permit 作者: Andrew G. Morgan, 維護者: Linux-PAM 維護者. 提供的管理組: account; authentication; password; session Cryptographically sensitive: 安全等級: 非常低. 極度小心的使用. 程式碼清潔度: Clean. 系統依賴: 網路介面: 概述 此模組非常不安全. 必須謹慎使用. 它的動作是永遠允許訪問. 不做任何其它事情. Account+Authentication+Password+Session components 識別的引數: 描述: 不管用在哪種管理組, 這模組的動作只是簡單的返回 PAM_SUCCESS -- 操作成功. 在認證部件裡, 使用者名稱會被獲取. 很多應用程式在不知道使用者名稱時會覺得不合理. 範本/建議用法: 很難找到應用此模組的正當理由. 可是, 它還是有些合理的應用. 比如, 系統管理員想要關閉工作站的帳號管理, 同時又要允許登入, 那麼她可以用下面的配置條目設定ligin: # # add this line to your other login entries to disable account # management, but continue to permit users to log in... # login account required pam_permit.so 6.19 The Password-Database module 概要 模組名: pam_pwdb 作者: Cristian Gafton and Andrew G. Morgan 維護者: 作者. 提供的管理組: account; authentication; password; session Cryptographically sensitive: 安全等級: 程式碼清潔度: 系統依賴: 需要正確的配置libpwdb 網路介面: 概述 此模組是pam_unix_..的可插入式的替代品. 它使用Password Database的通用介面. Account component 識別的引數: debug 描述: 引數 debug 令此模組的帳號管理功能在動作時syslog(3)更多的資訊. (由別的功能支援的引數被忽略掉, 但是會在syslog(3) 記錄下錯誤資訊. 基於以下的 pwdb_元件: expire; last_change; max_change; defer_change; warn_change, 此模組執行確認帳號和密碼狀態的任務. 至於後來, 它可以給使用者提出修改密碼的建議或者, 透過PAM_AUTHTOKEN_REQD的返回, 延遲為使用者提供服務直到他建立了一個新密碼. 以上列出的條目在Password Database Library Guide裡有解釋. documented in the Password Database Library Guide (見上面的連結). 如果使用者記錄不包含一個或者更多這些條目, 對應的shadow 檢查不被執行. 範本/建議用法: 在帳號管理模式, 這模組可以象下面的用法: # # 確保使用者帳號和密碼依然有效 # login account required pam_pwdb.so Authentication component 識別的引數: debug; use_first_pass; try_first_pass; nullok; nodelay; likeauth 描述: 引數 debug 令模組的認證功能寫入syslog(3)更多的資訊. 如果使用者的official密碼為空, 此模組的預設動作是不允許使用者訪問服務. 引數nullok 用來使此預設失效. 當給出引數try_first_pass, 在提示使用者輸入密碼之前, 模組會拿透過之前堆疊的 auth模組認證的密碼來試. 引數use_first_pass 迫使模組使用上述的密碼並且永遠不會提示使用者 - 如果沒有可用的密碼或密碼不能透過認證, 使用者將被禁止訪問. 引數 nodelay 用來阻止認證部件在認證失敗時的延時請求. 預設動作是請求一個一秒鐘以上的失敗-延遲. 由別的功能支援的引數被忽略掉, 但是會在syslog(3) 記錄下錯誤資訊. 有個幫手程式, pwdb_chkpwd, 用來檢查使用者的密碼(當密碼報存在一個只讀資料庫時). 此程式非常簡單,只檢查當前使用者的密碼. 它被此模組的認證部件以當前使用者的身份顯式的呼叫. 這樣象xlock這樣的程式就不需被設成setuid-root而可以工作. The likeauth argument makes the module return the same value when called as a credential setting module and an authentication module. This will help libpam take a sane path through the auth component of your configuration file. 範本/建議用法: 此模組的完整功能由一個恰當的/etc/pwdb.conf來控制, 指定的使用者資料庫控制使用者認證的來源. Password component 識別的引數: debug; nullok; not_set_pass; use_authtok; try_first_pass; use_first_pass; md5; bigcrypt; shadow; radius; unix 描述: pam_pwdb模組的這一部分執行更新使用者密碼的任務. 受惠於libpwdb的靈活性, 此模組可以把使用者密碼從一個資料庫搬到另一個去, 也許以動態的方式使使用者密碼記錄安全 (此時還處於初期ALPHA階段!) - 這正是shadow, radius 和 unix 引數的意圖. 在傳統的UNIX密碼資料庫(這裡儲存著使用者的加密密碼)的情況下, 引數md5用來採用MD5的加密演算法以取代傳統的 crypt(3)呼叫. 還有種選擇, 引數 bigcrypt 採用DEC(數字裝置公司)的對標準UNIX的crypt()的演算法進行`C2'擴充套件的演算法以加密超過8位長的密碼. 引數nullok 用來允許改變一個原先為空的密碼. 如果沒有此引數, 空的密碼會當成是被鎖住的帳號. 引數use_first_pass 用來阻止選擇舊的和新的密碼,而是採用password裡此模組之前的模組所保留的密碼. 引數try_first_pass用來防止當pam_pwdb 跟隨另一個password模組時使用者重複輸入也許是共享的舊密碼 - 如果舊密碼不正確, 再提示使用者輸入. 引數use_authok 用來迫使 此模組設定新密碼時採用 password堆疊裡先前的模組提供的值. (這用法在先前介紹的Cracklib一節裡有個範本). 引數 not_set_pass 用來告訴模組不去關心給/從其它(堆疊的)密碼模組提供/獲取可用的舊密碼或新密碼. 引數debug 使此模組的password功能syslog(3)更多的動作的資訊. 其它引數會往syslog(3) 寫進錯誤資訊. 範本/建議用法: 有關如何將此模組與可插入式密碼檢查模組,pam_cracklib一起堆疊的例子, 請見上面的pam_cracklib一節. Session component 識別的引數: 描述: 模組的此部件沒有引數. 它的作用就是在使用者會話開始和結束時往syslog(3) 裡記錄使用者名稱和服務類別. 範本/建議用法: session部件的用法是單純的: # # pwdb - unix like session opening and closing # login session required pam_pwdb.so 6.20 The RADIUS session module 概要 模組名: pam_radius 作者: Cristian Gafton 維護者: 作者. 提供的管理組: session Cryptographically sensitive: 此模組不用來處理密碼 安全等級: 程式碼清潔度: 在編譯 /usr/include/rpc/clnt.h時gcc報告一個警告. Hey, is not my fault ! 系統依賴: 網路介面: 是的; 這是個網路模組(獨立於應用程式). 概述 此模組用來提供使用者從RADIUS伺服器認證的會話服務. 目前階段, 唯一提供的功能是以RADIUS伺服器當一個帳號伺服器來使用. Session component 識別的引數: debug - 冗餘的資訊寫進syslog(3). 描述: 此模組用來提供使用者從RADIUS伺服器認證的會話服務. 目前階段, 唯一提供的功能是以RADIUS伺服器當一個帳號伺服器來使用. (There are few things which needs to be cleared out first in the PAM project until one

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940256/,如需轉載,請註明出處,否則將追究法律責任。

相關文章