Pages

2009年1月7日 星期三

Linux PAM

PAM 全名為「Pluggable Authentication Module」,是用來做認証的模組。許多程式,如: login、rlogin、sshd、ftpd、su、passwd...等都有支援 PAM,當然你也可以利用 ldd 指令來查詢某程式是否支援 PAM。
##ReadMore##
linly@linly-laptop:~$ ldd /usr/bin/passwd
...
libpam.so.0 => /lib/libpam.so.0 (0xb800f000)
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb800b000)
...
PAM 有許多有趣的應用,例如:利用指紋辨識或臉部辨識登入電腦、限制某項服務的使用時間,資源,次數、設定密碼時檢查密碼強度等等。在陳柏菁的 PAM 認証模組 網頁中有詳細介紹 PAM 是什麼?該如何設定?在此就不加贅述,不過要提醒讀者幾件事情:
  1. 認証模組有堆疊特性:設定時可以使用多種認証方式。
  2. control flag 的先後次序:例如 sufficient 放在 required 之後來使用,那 sufficient 模組的成功與否就會被忽略。
  3. 要了解每種 control flags 的意義:例如 required 與 requisite 的差異。
接下來要做的事情就不是上面提到的「如何設定」,而是自己寫一個簡單的 PAM 應用程式和 PAM 模組。http://www.kernel.org/pub/linux/libs/pam/ 有提供管理、開發 PAM 的手冊。至於我要做的事情是:寫一個程式讓使用者輸入帳號密碼,然後進行驗證,成功與否都會出現提示訊息。有興趣的人可以從 PAM ApplicationPAM Module 的範例做修改,至於編譯的方式如下:
gcc -fPIC -c pam_module.c
gcc -shared -o pam_module.so pam_module.o -lpam
sudo cp pam_module.so /usr/lib/
gcc -o pam_app pam_app.c -lpam -lpam_misc -lpam_module
  • Hint:撰寫 pam application 時,需要做 pam_set_item,而 item type 不能使用 PAM_AUTHTOK 及 PAM_OLDAUTHTOK,所以就隨便設定一個。
  • Hint:撰寫 pam module 時,需要引用 當中的 getspnam 函式來取得加密過的密碼,至於為什麼要自己寫一個 module,因為 PAM 模組的帳密認証方式只能先輸入帳號,等他確認有這個使用者,才會在要求輸入密碼,既然說要改變他的行為,模組只好自己寫。
  最後,我把我寫好的程式碼放在 google docs,有興趣的讀者可以去看看,MY_PAM_APPMY_PAM_MODULE

1 則留言:

Eric 提到...

魏子豪大大的 thinkpad x61 上面設定指紋辨識的方式是,在 /etc/auth-common中加入以下四行:

auth sufficient pam_thinkfinger.so
auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass
auth requisite pam_deny.so
auth required pam_permit.so

當然需要安裝 thinkfinger.so,apt get 就有了。

 
Blogger Templates