從 Solaris 2.6 發行版開始,Solaris 系統支援可外掛辨證模組 (PAM)。每當一位使用者要求與變更或設定使用者的識別身份有關的操作時(例如登入系統,引動一個如 rcp 或 rsh 的 'r' 指令,使用 ftp 或使用 su等),就會使用一組可設置模組來提供辨證、帳號管理、信用管理以及階段作業管理等功能。Solaris Resource Manager 提供一個模組以進行登入會計的功能,並且修正 su 的行為。
用來要求操作的程式被稱為服務。
基本上整個 PAM 系統的說明文件都記載於線上支援頁 pam(3), pam.conf(4), pam_unix(5), 及 pam_srm(5SRM)。
Solaris Resource Manager PAM 模組提供帳號管理及階段作業管理功能。您可以編輯 /etc/pam.conf 檔以控制 PAM 的行為。就一般性的 Solaris Resource Manager 行為,Solaris Resource Manager PAM 模組應被設置為階段作業管理所有登入式服務的 requisite,並且作為所有 PAM 服務帳號管理的 requisite。通常 Solaris Resource Manager 模組應置於其他 required 和 requisite 模組之後,以及任何其他的 sufficient 或 optional 的模組之前。
安裝時,Solaris Resource Manager 會編輯 /etc/pam.conf 以提供一個適當的行為。它會為每個已設置階段作業或帳號管理的服務插入如下數行文字(包括 other):
login account requisite pam_srm.so.1 nolnode=/etc/srm/nolnode other session requisite pam_srm.so.1 other account requisite pam_srm.so.1 nolnode=/etc/srm/nolnode |
第一行指定用於服務 登入, 模組 pam_share.so.1 用於提供帳戶管理功能,如果要成功 登入 則必須允許登入,而且必須已指定引數 nolnode=/etc/srm/nolnode。請參見 pam.conf(4) 以取得有關各種控制旗標的詳細說明(required、requisite、optional 及 sufficient 等)。
第二行意指登入服務會使用 pam_share.so.1 模組來進行階段作業管理。
帳號及階段作業管理模組所有支援的引數清單可於 pam_srm(5SRM)。
當 Solaris Resource Manager 帳號管理 PAM 模組取得控制權時,可以:
決定 Solaris Resource Manager 是否已經安裝與啟動,否則會要求 PAM 系統忽略此模組,
決定使用者是否擁有一個 lnode,否則會呼叫一個可由管理員設置的 'no lnode' 指令集,
決定是否使用者有權使用所要求的服務及裝置,
決定是否使用者已經超出警告的限制,否則拒絕其登入要求,
呼叫一個可由管理員設置的 'every login' 指令集。
如果上述任何一個步驟行不通,其餘的步驟也不會執行,Solaris Resource Manager 帳號管理 PAM 模組會回絕使用服務的要求。解釋訊息可能會透過服務來傳給使用者。
預設的 'missing lnode' 指令集會為使用者建立一個 lnode,並且遞送郵件以通知系統管理員。預設的指令集為 /etc/srm/nolnode,但您也可以編輯 /etc/pam.conf 檔並且變更 Solaris Resource Manager 帳號管理模組文字行中的 nolnode 選項值以改變預設。'every login' 指令集通常沒有設置。可以在 [[/etc/pam.conf]] 的任何 Solaris Resource Manager 帳號管理模組中新增一個 everylogin=pathname 選項以設置 'every login' 指令集。指令集會以 root 使用者的身份來調用。標準輸入、輸出及錯誤會被關閉。如果一個指令集不為零,存取會被拒絕。以環境變數來傳遞所有資訊,直接從下列服務傳給 PAM 的資訊衍生而出:
提供給程式的登入名稱。藉由在密碼對映中查詢此名稱以辨證;如果找不到,帳號管理模組便會回報一個錯誤內碼給 PAM。
被辨證的使用者 UID。就變更 UID 的服務(如su)而言,即為引動此服務的使用者 UID;就設定 UID 的服務(如login)而言,即為目標 UID(如 USER 的)。
就整個網路的存取嘗試而言,即為包含發出嘗試的主機名稱。否則其值會因程式的執行方式各異而有所不同。
存取服務的名稱,例如 rsh, login, ftp 等等。
在其上調用服務的 TTY 名稱。某些沒有控制終端機的服務(如 ftp),則會以稍有意義的內容來填寫此變數(例如ftp12345,其中 12345 是 ftpd 的處理識別器 (PID));否則讓它保持空白或是以服務名稱取而代之。
如果 pam.conf 檔中指定了debug,DEBUG 即設定為真;否則設定為假。不設定其他環境變數,所以任何指令集都必須在必要時設定其本身的 PATH 變數。
預設的 'no lnode' 指令集在預設的排程群組中建立 lnode(如果密碼對映中有此類使用者,則為 other,否則為 root。)並且遞送給系統管理員一個提醒郵件以將新的 lnode 移至排程階層中的適當位置。若需一個指令集範例,請參見 預設 'no lnode' 程序檔。
Solaris Resource Manager PAM 模組會查詢裝置階層的終端機及服務名稱,然後若超出限制或是裝置旗標求值到 'set' 的話,便回傳一個 'permission denied' 給其調用程式。
所檢視的裝置類目為終端機名稱 terminal,以及所要求的服務類型 services。例如,rlogin 可能會嘗試使用網路裝置群組中的檔案,因此為使用者測試的旗標(假設所有旗標已設定為群組)將如下圖所示。依照順序檢查這些旗標:
terminal.flag.network
terminal.flag.all
services.flag.rlogin
services.flag.netservices
只有在所有存取都求值到 set(開啟)的時候才會被准許。此外,會依照對應的類目來檢查限制(terminal及services)。
就登入式服務(在 utmp 檔中建立一個登錄)而言,PAM 的階段作業管理功能以及帳號管理功能都會被調用,如果兩者都在 /etc/pam.conf 中設置的話。
Solaris Resource Manager 產品的階段作業管理負責處理裝置的收費。它會查看使用者是否已經超出連結時間限制,或是有 onelogin 旗標求值到 set 而且已經登入;如果是的話,便防止登入。
否則,它會生成一個訊息至 limdaemon 處理以通知它有關登入以及所登入終端機的設置成本。然後會通知 kernel 目前的處理是一個 'login header process ',而必須通知 limdaemon 處理它何時逾時。
然後limdaemon 處理會追蹤連結時間限制,並且在它們快要逾期時發出警告。