在網路中存取資料最常用到的,就是透過Samba伺服器來存取異質網路間的檔案文件,但如何管理眾多使用者所擁有的帳號及密碼一直是個頭痛的難題。其實只要善用MySQL資料庫,就可以減輕Samba帳號密碼管理上的負擔了。
那麼能否有一個比較彈性的機制,可以只要透過設定組態檔的方式來指定應用程式可使用那一種驗證方式(甚至可指定多重驗證,即一個應用程式可指定多種的認證方式)但不必重新編譯相關的程序。
PAM(Pluggable Authentication Modules,可插可拔的認證模組)機制即是此類具有彈性的機制,它允許系統管理員可以利用設定組態檔的方式來動態指定應用程式可使用那些認證方式,而不必再重新編譯要進行認證的程序。
使用PAM時,使用者只須編輯一個配置文件,就可以決定認證模組該如何嵌入應用程式中。在Linux系統中,PAM的設定資訊通常位於「/etc/pam.d」目錄下,該目錄下的各個檔案名稱即為服務名稱,例如login即為login服務設定的相關資訊,PAM設定格式如下所示:
各個參數的代表意義說明如下:
◎服務名稱
在此設定要使用認證的服務(Service)名稱,如su、login等名稱。
◎模組類型
PAM設定了以下auth、account、password、session四種的模組類型來提供相關的認證作業。
·auth:對使用者所提供的認證資訊實際進行驗證,例如檢查帳號密碼是否為有效的使用者。
·account:檢查非認證方面的帳號管理,主要用來確認該帳號是否可進行認證(就像資格審查),例如檢查使用者帳號是否已過期、哪些帳號可從哪些來源端來存取服務或限定存取服務的時間。
·password:實際配置更新認證。例如當使用者更改密碼後即可同步更新密碼資訊。
·session:這個模組被用來當作使用者在使用帳戶前的初始化工作,例如安裝使用者的家目錄,使用者的電子郵箱。
◎控制符號
當PAM執行模組驗證成功或失敗之後的所須執行的動作,PAM指定required、requisite、sufficient等控制符號來進行模組驗證成功或失敗之後的動作。
·required:當認證模組驗證成功時即執行模組所定義的情況,而當模組驗證失敗時,如果使用者有設定其他的認證模組,即繼續執行其另外定義的認證模組。
·requisite:如果認證模組驗證失敗,則直接回覆失敗的訊息而不再繼續執行其他的認證模組。
·sufficient:如果這個模組成功,則不執行後面的認證模組,但如果之前有設定required的認證模組,則此模組的結果將會被忽略。
◎模組的路徑
此選項用於設定實際執行認證的程式,其通常位於「/lib/security/」目錄下且以pam開頭的檔名。
◎額外參數
在此可設定一些額外的參數給認證模組,最常用的參數為debug,可幫助使用者除錯用。
接下來,動手安裝pam_mysql。
安裝pam_mysql
在此假設讀者已安裝好MySQL伺服器且安裝路徑為「/usr/local/mysql5」,請至pam_mysql官方網站取得最新版本,筆者所取得的版本是pam-mysql 0.7RC1,解壓縮後,執行下列指令:
在安裝成功之後,在「/usr/lib/security/」目錄下將會產生pam_mysql.so程式。然後,繼續建立帳號所需的資料庫以及資料庫表格。假設建立的資料庫檔名為samba_pamauth,並建立如下的資料庫表格:
在建立資料庫後,可先新增一個使用者(必須是系統上已存在的使用者),相關指令如下所示(該指令全部為同一行,不可斷行):
再來,說明pam_mysql所提供的參數。其參數的使用方式,如表4所示。
表4 pam_mysql可用參數