星期五, 5月 25, 2018

[PAM] PAM module (一) Introduction


PAM是做帳號密碼認証的module,
透過PAM module可以自由的移植或者更改認証的流程。

1. 一般來說pam的設定檔會放在/etc/pam.d 裡面
ex:
像是sshd 就是給ssh連線用,
su 就是給su command使用。

2. 真正要驗証的pam module會永在/lib/security 裡面
然後在pam設定檔內填入指定的library名字。
ex:
auth sufficient pamExample.so
account sufficient pamExample.so

# # # # # # # # # # # # # # # # # #

以下例子為登入時,如果驗帳帳號是"backdoor"的話直接讓他pass。

1. pam module (mypam.c)

pam_sm_authenticate():
用來驗証authenication的,就是帳號密碼的驗証,
這部份只要看到"backdoor"就讓他pass,不會去驗証密碼。

pam_sm_acct_mgmt():
這部份是去驗証帳號,看輸入的帳號有沒有存在。

把mypam.c  build成library並放在/lib/security資料夾裡。

2. pam config setting
選擇改/etc/pam.d/common-auth ,所有的驗証都會從這裡當一個進入點,
看要去用哪一個pam module來驗証帳密。
這時在這檔案的最上面加上:
auth sufficient mypam.so
account sufficient mypam.so

就是帳號和密碼的驗証透過我們的pam module來驗証。

3. 模擬登入 (test.c)
用pam_start()來開始session,最後用pam_end()來結束session,
一開始用pam_authenticate()來驗証帳號密碼,
這部份對應是pam_sm_authenticate()的pam module,
所以只會去看是不是"backdoor"這名字。

然後用pam_acct_mgmt()來驗証帳號,
這部份對應的是pam_sm_acct_mgmt()的pam module,
永遠都回傳success。

這個例子只是要驗使用者名稱是不是"backdoor"而已。







Note:
即使是用ssh也是一樣,
因為/etc/pam.d/sshd 也是import common-auth這檔案,
所以也會吃到mypam.so 這pam module。
可是輸入的user必須是存在的。

沒有留言: