Linux-PAM(Linux下的密碼認證和安全機制)系統管理員指南(中文版)

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

Linux-PAM(Linux下的密碼認證和安全機制)系統管理員指南(中文版)

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-[---->;--\--] Linux-   |--<--| PAM config file|
         |       +        [----<--/--]        PAM    |     |================|
         |[--+    \  |          |     | X auth .. a.so |
         +----------------+  |    /  +-n--n-----+     | X auth .. b.so |
         |                |  |       __|  |           |           _____/
         |  service user  |  A      |     |           |____,-----'
         |                |  |      V     A                        
         +----------------+  +------|-----|---------+ -----+------+
                                +---u-----u----+    |      |      |
                                |   auth....   |--[ a ]--[ b ]--[ c ]
                                +--------------+
                                |   acct....   |--[ b ]--[ d ]
                                +--------------+
                                |   password   |--[ b ]--[ c ]
                                +--------------+
                                |   session    |--[ e ]--[ c ]
                                +--------------+

By way of explanation, 圖的左邊表示一個應用程序:X. 這應用程序有和Linux-PAM 庫的介面並且在認證方面沒有什麼特別之處. Linux-PAM 函數庫 (圖的中部) 查詢PAM配置文件的內容並且裝入適用於程序 X 的模塊. 這些模塊進入四個管理組( 圖的中下部)中的一個,並且以它們出現在配置文件中的順序堆疊起來 . 這些模組由Linux-PAM呼叫后,為應用程序執行不同的認證工作 . 需要用戶提供或提供給用戶的文本信息,可以通過使用應用程序提供的conversation函數來交換.

3.1 Getting started

以下段落由Seth Chaiklin供稿:

到現在為止,我們描述了PAM如何工作在一個理想世界里,
在這兒所有應用程序都被正確編寫.
然而,到此時(1998年10月), 這距離現實還太遠.
因此,在你試圖把PAM用於你的系統時,還得考慮一些實際因素.

Why bother, is it really worth all the trouble?  

如果你運行Linux作為單用戶系統, 或者在一個所由用戶都可信任的環境, 那麼用PAM就沒什麼實際優勢.

Ed: 事實上還是有一個好處, 你可以令認證變啞, 就象沒有任何認證....像Win95.

在網路環境里, 很顯然,關於用戶你必需多想點, it is clear that you need to think a little more about how users etc., are authenticated:]

如果運行Linux作為伺服器, 提供一些不同的服務 (e.g., 經由密碼控制的WWW區域限制, PPP),
那PAM就有一些實際的和有趣的價值. 尤其是, 通過使用使用模塊, PAM 能夠使
一個程序經過幾個不同的密碼庫來查找, 哪怕那個程序沒有專為那密碼庫寫的代碼.
下面有一些例子Here are some examples of the possibilities
that this enables.

   o  Apache 有一個模塊提供PAM服務.  認證特定的目錄許可權可以讓PAM來控制,
      這意味著,所有PAM能調用的模塊都可以被Apache使用,包括RADIUS,NIS,NCP
      (NCP用來經由Novell的密碼庫認證).

   o  pppd 有一個PAM化了的版本(來自 RedHat)  現在有可能用一系列的資料庫來驗證
      ppp用戶. 作為對基於Linux的密碼庫(/etc/passwd,/etc/shadow)的擴充, 你可以
      用PAM模塊來進行基於Novell密碼庫或NT(NTLM)密碼庫的認證.

   o  以上兩則例子可以有組合應用.想象一下你辦公室/部門的用戶已經經過用戶名/密碼
      認證登入Novell或NT.如果你想要他在Linux下的應用也用相同的用戶名/密碼
      (為PPP登入,web服務,或者只是普通的shell登入),你可以通過PAM進行基於這些已
      存在的資料庫(譯者注:Novell的或者NT的)的用戶認證,而無須在Linux和LAN伺服器里
      各自維護獨立的資料庫.

我可以讓所有需要有用戶認證的程序都來用PAM嗎?

有的可以,有的不行.可以的是那些你能得到源代碼,並且可以加入適當的PAM函數的程序.
不行的是那些你無法得到源代碼,並且可執行程序沒有加入PAM的功能.

也就是說, 如果一個程序打算要用PAM,那麼它必須在程序里直接的包含PAM函數.
不這樣做就不可能用PAM.

我怎麼知道程序是否已經含有PAM的代碼了呢?

一個快速的(但不總是可靠)的方法是執行ldd <程序>;
如果 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; 可選的,正如這名字一樣,此
《解決方案》

Linux-PAM(Linux下的密碼認證和安全機制)系統管理員指南(中文版)

完全版?謝謝樓主先
《解決方案》

Linux-PAM(Linux下的密碼認證和安全機制)系統管理員指南(中文版)

謝謝!
《解決方案》

Linux-PAM(Linux下的密碼認證和安全機制)系統管理員指南(中文版)

Part 2:
議用法:

    對於su的傳統的用法是允許superuser不經輸入密碼的變更為其它次要的用戶的身份. 為在Linux-PAM里實現這種行為, 下面兩行需要加入設定檔:

#
# su authentication. Root is granted access by default.
#
su      auth     sufficient     pam_rootok.so
su      auth     required       pam_unix_auth.so

    注意. 對於以superuser執行(或者在系統開機時被開啟)的程序, 應該不要用此模塊去認證用戶.

6.23 The securetty module
概要

模塊名:

    pam_securetty
作者:

    Elliot Lee <sopwith@cuc.edu>;
維護者:

    Red Hat Software:
    currently Michael K. Johnson <johnsonm@redhat.com>;
    (if unavailable, contact Elliot Lee <sopwith@cuc.edu>;).
提供的管理組:

    authentication
Cryptographically sensitive:
安全等級:
代碼清潔度:
系統依賴:

    /etc/securetty file
網路介面:

    為使此有意義的, 需要應用程序設定正確的PAM_TTY.

概述

提供標準的UNIX的安全的tty的認證.
Authentication component

識別的參數:
描述:

    提供標準的Unix安全tty的檢查, 除非PAM_TTY的值列在 /etc/securetty里, 對root的認證將會失敗. 對所有其他用戶, 則為成功.
範本/建議用法:

    規範的用法, 這模塊應該作為required的認證方法出現在任何 sufficient 的認證之前.

6.24 Time control
概要

模塊名:

    pam_time
作者:

    Andrew G. Morgan <morgan@parc.power.net>;
維護者:

    Author
提供的管理組:

    account
Cryptographically sensitive:
安全等級:
代碼清潔度:
系統依賴:

    需要一個設定檔:/etc/security/time.conf
網路介面:

    僅通過PAM_TTY

概述

運行一個規範得很好的系統偶爾也會包含對特定服務的有選擇的限制訪問. 此模塊提供了對系統服務的時間上的訪問控制. 它的行為由一個設定檔決定. 此模塊可以設定成基於用戶名, 時間, 星期, 具體服務和請求服務時的終端名的對(單個)用戶的拒絕訪問.
Account component

識別的參數:
描述:

    此模塊基於設定檔中的制定的規則進行動作:/etc/security/time.conf. m每個規則有如下格式,

        services;ttys;users;times

    每個規則佔一行, 結束於換行符或者註解的開始:`#'. 由分號`;' 分隔成四個欄位. 這些欄位是:

        * services - 由此規則影響的服務名的邏輯列.
        * ttys - 指示受此規則保護的終端名字的邏輯列表邏輯列表.
        * user - 此規則作用到的用戶的邏輯列表.

          邏輯列表意味一串符號(和適當的PAM_相關), 包含不超過一個的通配符:`*', 和可選的非操作符的前置:`!'. 這一串表達式由兩個邏輯操作符連接:& (邏輯與)和| 邏輯或). 兩個例子:!morgan&!root, 表示此規則不會應用到用戶morgan和root;tty*&!ttyp*, 表示此規則僅對控制台終端而不是偽終端適用.
        * times - 此規則的適用時間的邏輯列表. 每個元件的格式是周/時間-範圍. 周由兩個字元指定.比如, MoTuSa, 表示周一 周二和周六. 注意重複的周被 複位; MoTuMo 表示周二, MoWk 意為除了周一的所有工作日. 兩個字元的組合可以是,

Mo Tu We Th Fr Sa Su Wk Wd Al

          最後兩個詞是周末和 每周的整個7天.

          時間範圍部分是一對24時制的時間, HHMM, 以一個連字元隔開 -- 表示開始和結束的時間. 如果結束時間早於開始時間, 就假定是到第二天的這個結束時間. 例如, Mo1800-0300 表示允許的時間是從周一的晚上6點到第二天早上3點.

    注意, 時間的限制只有在當前3個欄位都滿足用戶請求服務的應用時才適用.

    為了便利和可讀性, 一條規則可以由`\換行符'結尾以超過一行.
範本/建議用法:

    要使用此模塊可以在Linux-PAM的設定檔里加入下面的行:

#
# apply pam_time accounting to login requests
#
login   account  required       pam_time.so

    這裡, 我們把這模塊應用在login的服務.

    可以放在/etc/security/time.conf里的規則舉例如下:

    login ; tty* & ; !ttyp* ; !root ; !Al0000-2400

        除了root,禁止所有用戶在任何時間從控制台登錄.
    games ; * ; !waster ; Wd0000-2400 | Wk1800-0800

        games (使用Linux-PAM的某遊戲) 只在非工作時間可以訪問. 此規則不限制用戶waster.

    注意, 目前還沒有一個後台進程去強制終止一個超過時間範圍的會話. 這要有個對策.

    錯誤格式的規則會作為錯誤記錄在 syslog(3).

6.25 The Unix Password module
概要

模塊名:

    pam_unix
作者:
維護者:

    作者.
提供的管理組:

    account; authentication; password; session
Cryptographically sensitive:
安全等級:
代碼清潔度:
系統依賴:
網路介面:

概述

這是標準Unix的認證模塊. 它從系統庫呼叫標準的調用來獲取和設定帳號信息以及認證信息. 通常這些從/etc/passwd和/etc/shadow文件(如果開啟了shadow功能)獲得.
Account component

識別的參數:

    debug; audit
描述:

    參數debug 使此模塊的帳戶相關的函數syslog(3)更多的它的動作的信息 (屬於此模塊的其它功能的參數會被直接忽略掉, 但是別的參數會當成錯誤而被 syslog(3)). 參數audit會丟出更多的信息.

    基於以下的shadow 元素: expire; last_change; max_change; min_change; warn_change, 此模塊執行確認帳號和密碼狀態的工作. 至於後面, 它可以建議用戶改變密碼或, 通過返回PAM_AUTHTOKEN_REQD, 延遲給用戶提供服務直到其生成一個新密碼. 列在上面的那些元素在GNU Libc的info文檔里有解釋. 如果用戶的記錄里沒有包含一個或者更多的這些元素, 相對的shadow檢查將不被執行.
範本/建議用法:

    在帳號管理模式下, 可以這樣來安裝此模塊:

#
# Ensure users account and password are still active
#
login   account  required       pam_unix.so

Authentication component

識別的參數:

    debug; audit; use_first_pass; try_first_pass; nullok; nodelay
描述:

    參數debug 使此模塊的帳戶相關的函數syslog(3)更多的它的動作的信息. 參數audit會丟出更多的信息.

    此模塊的默認設定是如果正式的密碼為空則不允許用戶訪問服務. 參數nullok 用來使此默認設定無效.

    當給出參數try_first_pass, 在提示用戶輸入密碼之前, 模塊會拿通過之前堆疊的 auth模塊認證的密碼來試. 參數use_first_pass 迫使模塊使用上述的密碼並且永遠不會提示用戶 - 如果沒有可用的密碼或密碼不能通過認證, 用戶將被禁止訪問.

    參數 nodelay 用來阻止認證部件在認證失敗時的延時請求. 默認動作是請求一個一秒鐘以上的失敗-延遲.

    屬於此模塊的其它功能的參數會被直接忽略掉, 但是別的參數會當成錯誤而被 syslog(3).

    一個幫手程序, unix_chkpwd, 在當用戶的密碼報存在一個讀保護的資料庫里時提供對用戶密碼的檢查. 這個程序非常簡單, 它僅僅檢查呼叫它的用戶的密碼. 它被此模塊的認證部件以用戶的名義來透明的呼叫. 如此象xlock這樣的程序就不需被設成setuid-root而可以工作.
範本/建議用法:

    此模塊的正確功能可以由一個適當的/etc/nsswitch.conf 來支配, 那裡指定的用戶資料庫確定用來認證的用戶記錄的來源.

    在帳號管理模式下, 可以這樣來安裝此模塊:

#
# Authenticate the user
#
login   auth  required       pam_unix.so

Password component

識別的參數:

    debug; audit; nullok; not_set_pass; use_authtok; try_first_pass; use_first_pass; md5; bigcrypt; shadow; nis; min; max; obscure; remember
描述:

    pam_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 使此模塊的密碼相關的函數syslog(3)更多的它的動作的信息. 其它參數會被當成錯誤信息記錄在syslog(3). 參數audit會丟出更多的信息.

    通過設定nis 參數, pam_unix 會試圖採用NIS RPC來設定新密碼.

    參數remember 帶有一個值. 這值是為每個用戶保存的最近使用的密碼的個數. 它們被保存在/etc/security/opasswd 以防止用戶頻繁的交替使用同樣的一組密碼.

    參數min 和 max 允許控制密碼的常度. 有個固定的默認值是1到8. 這些值本身算在內.

    參數obscure 允許一些額外的密碼檢查. 這效仿原始的shadow包里的含糊檢查, 這過程和pam_cracklib模塊非常相像(不做字典檢查), 它執行以下一些檢查:

        * Palindrome - 新密碼是否為舊密碼的迴文? 迴文是指順著讀和反著讀都一樣的詞(比如madam和radar).
        * Case Change Only - 新密碼是否只是拿舊密碼改了些大小寫?
        * Similar - 新密碼是否太像舊密碼?
        * Simple - 新密碼是否太簡單? 這決定於密碼的長度和採用不同種字元的個數(比如,字母, 數字...).
        * Rotated - 新密碼是否為舊密碼的輪轉?(比如,"billy"和"illyb")

範本/建議用法:

    標準用法:

#
# Change the users password
#
passwd   password   required   pam_unix.so

    和可插入式密碼檢查模塊,pam_cracklib 關聯堆疊的例子:

#
# Change the users password
#
passwd   password   required   pam_cracklib.so retry=3 minlen=6 difok=3
passwd   password   required   pam_unix.so use_authtok nullok md5

Session component

識別的參數:
描述:

    模塊的此部件沒有參數. 它的作用就是在用戶會話開始和結束時往syslog(3) 里記錄用戶名和服務類別.
範本/建議用法:

    session部件的用法是單純的:

#
# session opening and closing
#
login   session  required       pam_unix.so

6.26 The userdb module
概要

模塊名:

    pam_userdb
作者:

    Cristian Gafton <gafton@redhat.com>;
維護者:

    作者.
提供的管理組:

    authentication
Cryptographically sensitive:
安全等級:
代碼清潔度:
系統依賴:

    需要有 Berkeley DB.
網路介面:

概述

在一個.db資料庫里查找用戶並且與報存在這資料庫中的密碼進行比對.
Authentication component

識別的參數:

    debug; icase; dump; db=XXXX;
描述:

    此模塊用來與儲存在BerkeleyDB資料庫里的資料對用戶/密碼進行驗證. 資料庫以用戶名為索引, 和用戶名對應的欄位是以明碼形式保存的密碼, so caution must be exercised over the access rights to the DB database itself.. 模塊以交互機制從用戶端獲取輸入的密碼. 如果此密碼用在其他認證模塊(象pam_unix )的前面, 那麼你得要告訴那些模塊從PAM_AUTHTOK(由此模塊設定)處讀取輸入的密碼.

    模塊的默認動作可以由以下的參數改變:

        * debug - 給syslog(3)提供更多的調信息.
        * icase - 忽略大小寫的密碼比對.
        * dump - 往log里下載資料庫里所有的的記錄.(呀, 默認情況下不要這樣做!)
        * db=XXXX - 使用XXXX這個資料庫文件. 注意, Berkeley DB通常會在文件名後面加上擴展名, 所以你得像 /etc/foodata 這樣指定文件而不是/etc/foodata.db.

範本/建議用法:

    這是一個ftp服務的設定檔(通常是 /etc/pam.d/ftp ), 會接受用戶名/密碼對存放在/tmp/dbtest.db中的用戶登入.

#%PAM-1.0
auth       required     pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth       sufficient   pam_userdb.so icase db=/tmp/dbtest
auth       required     pam_unix.so shadow nullok try_first_pass
auth       required     pam_shells.so
account    required     pam_unix.so
session    required     pam_unix.so

6.27 Warning logger module
概要

模塊名:

    pam_warn
作者:

    Andrew G. Morgan <morgan@parc.power.net>;
維護者:

    作者.
提供的管理組:

    authentication; password
Cryptographically sensitive:
安全等級:
代碼清潔度:
系統依賴:
網路介面:

    記錄遠程用戶和遠程主機的信息(如果可以知道相關的pam-items)

概述

此模塊主要用來記錄試圖進行認證或者更新密碼的動作.
Authentication+Password component

識別的參數:
描述:

    往syslog(3)里記錄服務名,終端名,用戶名,遠端用戶名和遠程主機. 不是所有的項目都能偵測到, but instead obtained from the standard pam-items.
範本/建議用法:

    在設定檔一節 above有一個範本 .

6.28 The wheel module
概要

模塊名:

    pam_wheel
作者:

    Cristian Gafton <gafton@redhat.com>;
維護者:

    作者.
提供的管理組:

    authentication
Cryptographically sensitive:
安全等級:
代碼清潔度:
系統依賴:
網路介面:

概述

只給屬於whell(gid=0)群組的用戶授予root的訪問許可權.
Authentication component

識別的參數:

    debug; trust; deny; group=XXXX
描述:

    此模塊用來實現所謂的重要人物 群組. 默認設定時, 如果請求的用戶是wheel 的組成員就賦予其root的的訪問許可權. (首先, 模塊檢查組wheel是否存在. 如果不存在,那麼id=0的組被當作wheel.

    模塊的默認動作可以通過在/etc/pam.conf里設定以下參數來改變:

        * debug - 提供更多的調試信息給syslog(3).
        * trust - 此選項指示模塊當一個請求root許可權的用戶是wheel組的成員時返回PAM_SUCCESS. 這種情況的默認動作是返回 PAM_IGNORE . 使用trust 選項可以使 wheel的組成員未經輸入密碼就能成為root. 小心使用.
        * deny - 這選項用來推翻模塊的行為邏輯. 如果一個屬於wheel組的用戶試圖得到uid=0 的許可權時, 就禁止訪問(wheel這個詞也許就變得毫無意義!): 其目的是為了接下來的group= 參數而為.
        * group=XXXX - 代替對gid=0的組的眷顧, 而使用用戶自己定意XXXX組. 這裡的XXXX是組的名字而不是組的ID.

範本/建議用法:

    為把能取得superuser許可權的用戶限制在wheel里, 使用下面的設定:

#
# 默認給root賦許可權(rootok), 只有wheel的組成員有可能成為root( wheel), 但仍然必須
# 通過unix_auth的認證.
#
#
su      auth     sufficient     pam_rootok.so
su      auth     required       pam_wheel.so
su      auth     required       pam_unix_auth.so

7. 文件

/usr/lib/libpam.so.*

    提供給應用程序訪問Linux-PAM API的共享庫.
/etc/pam.conf

    Linux-PAM的設定檔.
/usr/lib/security/pam_*.so

    Linux-PAM 的動態可裝載目標文件(模塊)的主要所在位置.

8. See also

    * Linux-PAM 應用程序開發者指南
    * Linux-PAM 模塊開發者指南
    * The V. Samar and R. Schemers (SunSoft), ``UNIFIED LOGIN WITH PLUGGABLE AUTHENTICATION MODULES'', Open Software Foundation Request For Comments 86.0, October 1995. See this url: http://www.pilgrim.umass.edu/pub/osf_dce/RFC/rfc86.0.txt

9. Notes

I intend to put development comments here... like ``at the moment this isn't actually supported''. At release time what ever is in this section will be placed in the Bugs section below! :)

我們是否打算支持模塊的use_mapped_pass 呢? 有人認識傭金低廉(免費)的好律師嗎?! argument? Anyone know a cheap (free) good lawyer?!

    * This issue may go away, as Sun have investigated adding a new management group for mappings. In this way, libpam would have mapping modules that could securely store passwords using strong cryptography and in such a way that they need not be distributed with Linux-PAM.

10. Author/acknowledgments

This document was written by Andrew G. Morgan (morgan@linux.kernel.org) with many contributions from Chris Adams, Peter Allgeyer, Tim Baverstock, Tim Berger, Craig S. Bell, Derrick J. Brashear, Ben Buxton, Seth Chaiklin, Oliver Crow, Chris Dent, Marc Ewing, Cristian Gafton, Emmanuel Galanos, Brad M. Garcia, Eric Hester, Roger Hu, Eric Jacksch, Michael K. Johnson, David Kinchlea, Olaf Kirch, Marcin Korzonek, Stephen Langasek, Nicolai Langfeldt, Elliot Lee, Luke Kenneth Casson Leighton, Al Longyear, Ingo Luetkebohle, Marek Michalkiewicz, Robert Milkowski, Aleph One, Martin Pool, Sean Reifschneider, Jan Rekorajski, Erik Troan, Theodore Ts'o, Jeff Uphoff, Myles Uyema, Savochkin Andrey Vladimirovich, Ronald Wahl, David Wood, John Wilmes, Joseph S. D. Yao and Alex O. Yuriev.

Thanks are also due to Sun Microsystems, especially to Vipin Samar and Charlie Lai for their advice. At an early stage in the development of Linux-PAM, Sun graciously made the documentation for their implementation of PAM available. This act greatly accelerated the development of Linux-PAM.
11. 翻譯/聯繫方法這份檔案由孫國清(thomassun@yeah.net)翻譯,歷時N個月,這是我首次翻譯英文資料, 歡迎指正.本譯文以GNU GPL版權發布. 請在引用時附屬譯者以及版權說明.
12. Bugs/omissions

More PAM modules are being developed all the time. It is unlikely that this document will ever be truely up to date!

This manual is unfinished. Only a partial list of people is credited for all the good work they have done.
13. Copyright information for this document

Copyright (c) Andrew G. Morgan 1996-9. All rights reserved.
Email: <morgan@linux.kernel.org>;

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * 1. Redistributions of source code must retain the above copyright notice, and the entire permission notice in its entirety, including the disclaimer of warranties.
    * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

Alternatively, this product may be distributed under the terms of the GNU General Public License (GPL), in which case the provisions of the GNU GPL are required instead of the above restrictions. (This clause is necessary due to a potential bad interaction between the GNU GPL and the restrictions contained in a BSD-style copyright.)

THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

$Id: pam_source.sgml,v 1.9 1999/11/08 05:09:17 morgan Exp $
《解決方案》

Linux-PAM(Linux下的密碼認證和安全機制)系統管理員指南(中文版)

《解決方案》

Linux-PAM(Linux下的密碼認證和安全機制)系統管理員指南(中文版)

very good!
《解決方案》

好東西,學習了,謝謝!
《解決方案》

謝謝分享....好文...
《解決方案》

不錯啊,我做linux加到windows域里時就在這裡折騰了好多時間
《解決方案》

沒有pdf 或者doc下載么??
是連載還是完整版??
關注!




[火星人 ] Linux-PAM(Linux下的密碼認證和安全機制)系統管理員指南(中文版)已經有1064次圍觀

http://coctec.com/docs/service/show-post-5227.html