Thu Dec 19 01:52:56 CST 2002
這是份對 Linux-PAM 大略的介紹,大致上是參考 Linux-PAM System Administrator's Guide。
+----------------+ | application: X | +----------------+ / +----------+ +================+ | authentication-[---->--\--] Linux- |--<--| PAM config file| | + [----<--/--] PAM | |================| |[conversation()][--+ \ | | | 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 ] +--------------+
+ /etc/pam.d/ Linux 放這邊 + /etc/pam.conf FreeBSD 放這邊,不過 5-current's OpenPAM 已經優先用 /etc/pam.d/ 除非沒有 /etc/pam.d/other 否則是不會動用到 /etc/pam.conf + 參數有五個 service-name, module-type, control-flag, module-path, args
+ 基本上是程式的名字,eg. ftpd, rlogin, su,當然也可以在 app 裡面指定, 像 pop3, imap, smtp 之類。 + first-match 而 other 會 match 沒 match 到的 services
+ auth 這是透過提示 user 輸入 password 或者其他足以辨識的資訊,來確認 user 是誰。 + account 提供一些非 auth 的授權,比方說限制能使用的系統資源、time policy + session 處理一些在 user login/logout 要處理的東西,比方說 show some msg + password 更新認證用的 token (通常會有一個相對應的 challenge/response based auth module)
+ overview 有四種,用來讓 libpam 決定要怎麼處理該 module 成功或失敗。 + required 通過的話,libpam 對於這個 module-type 的 service 就算通過, 失敗的話,其他的的(同 module-type) module 會繼續跑完 + requisite 類似 required,不過當失敗的時候,剩下的不會跑,會將執行權還給 application 而且 return value 是 *第一個* 失敗的 required/requisite 的 return value + sufficient 通過而且之前沒有 required 的 module 失敗的話,剩下的不會跑 失敗的話,沒差,繼續往下跑。 + optional 如同這個名字代表的,就是 optional,一般會 ignore, 除非其他 module return PAM_IGNORE + newer syntax 提供了更 flexible 的方式設定 module success/failure 的時候, 該採取的 action 我不打算詳細講,我舉個例子 required 跟 [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
+ 就是 module 放在哪,如果放預設的目錄,只要寫 module filename 即可 FreeBSD 放在 /usr/lib Linux 放在 /lib/security
+ 要傳給該 module 的 argument,格式是 arg=value,用 spcae 分隔, 如果你的 value 中有 space,要用 [ ] 包起來,有用到 ] 的話,要 \]。 + 一些 generic optional arguments - debug: 丟給 syslog(3) debug msgs - no_warn: 不丟給 application warnings - use_first_pass: 不提示 user 輸入 password,而是直接用之前打過的 password 如果失敗了,那 user 就不會被 authenticated - try_first_pass: 類似 use_first_pass,不過失敗的話,會提示 user 輸入 password
+ 跟 file based 的 syntax 沒有差別,唯一的差別是每個 service 都是獨立成 一個檔案,例如 sshd, login 等,另外會有 other 負責 match 沒有 match 到的東西。而因為 service-name 就是 filename,所以 syntax 中的 service-name 就不需要寫了。
+ PAM 設錯導致不能 login 的話,麻煩請愛用 signle user mode + other 會 match 所有沒 match 到的 service,建議這邊用 deny all 的方式
+ 底下是 FreeBSD 4.7 pam.conf 裡面的設定,sshd login 會先試試看 skey, opie 這兩種 one-time password 可不可以,不行的話,就採用一般的 unix passwd
sshd auth sufficient pam_skey.so sshd auth sufficient pam_opie.so no_fake_prompts sshd auth required pam_unix.so try_first_pass sshd account required pam_unix.so sshd password required pam_permit.so sshd session required pam_permit.so
+ 底下是 FreeBSD 5.0 pam.d/sshd 的設定
# auth auth required pam_nologin.so no_warn auth sufficient pam_opie.so no_warn no_fake_prompts auth required pam_opieaccess.so no_warn auth required pam_unix.so no_warn try_first_pass
# account account required pam_login_access.so account required pam_unix.so
# session session required pam_permit.so
# password password required pam_permit.so
+ 每個 module 的功能跟可以調整的東西直接看 manual page 即可
+ tpop3d against pgsql 透過 pam 來控制,讓 tpop3d 去跟 database 認證 user, 其實這會有一個問題,tpop3d 如果跟 MySQL 溝通的話,就不會去要 pw entry, 可是因為透過 pam 他會去 getpwname() 所以需要偷改一下 src
tpop3d auth required pam_pgsql.so tpop3d account required pam_pgsql.so
pam_pgsql.so 指定在 /etc/pam_pgsql.conf 存放他所需要的 arguments
database = YOUR_DB table = YOUR_TBL host = YOUR_HOST user = MYSQL_USER password = MYSQL_PASSWORD user_column = userid pwd_column = passwd expiared_column = expired newtok_column = newtok pw_type = crypt
+ Smart Card 底下那個網頁講的蠻清楚的,基本上就是我們可以把 pam_unix,.so 換成 pam_smartcard.so 然後指定 reader 是哪一個,大致上就是這樣子。
http://www.strongsec.com/smartcards/