動機
之前修arch上su不能用在homed上,有修pam的檔,所以紀錄一下pam
統一的驗證
就是程式需要認證時就丟給pam,pam會去找對應的conf,之後就是照著跑
驗證有4個階段
- auth: 就是驗證帳密,看有沒有這帳號,以及這帳號的password或是token對不對
- account: 確認account的訊息,像是能不能用這個service,或是簡單講就是確認權限
- password: 檢查password本身的資訊,像太舊的密碼就會提示該換了
- session: 前面該看的都過了,在實際讓user用service之前做的setup
conf怎麼下
階段 處理方式 pam_module args...
- 階段: 前面提到的4個階段
- pam_module: 就是這行要做什麼,
- pam_deny: iptables的reject
- pam_permit: iptables的accept
- pam_rootok: 只要是root就給過
- args就是pam_module的參數
處理方式
- 簡單版
- 一定要過(module會傳成功)
- required: 不過,還是繼續往下做
- requisite: 不過,直接整個失敗
- 過了當然是ok的,但沒過沒差
- sufficient: 不過,還是繼續往下做
- 過不過都沒差
- optional
- 用寫好的
- include: 像macro,錯了就當成整個失敗
- substack: 像function,錯了就當成只有那一條失敗
- 一定要過(module會傳成功)
- 自訂版
[value1=action1 value2=action2 ...]
- value就是module的err code
- action就是該做什麼
- ignore: 當沒事
- reset: 把現在的階段忘了,直接從下一個階段的頭開始跑
- 關於紀錄err code
- bad: 當成失敗,如果是第一個,跑到最後時以此err code回傳
- die: 當成失敗,直接回傳err code
- ok: 當成成功,只記錄最後一個ok的err code
- done: 當成成功,直接回傳err code
- 放數字,表示往後跳N個
- 把簡單版展開
- required
[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
- requisite
[success=ok new_authtok_reqd=ok ignore=ignore default=die]
- sufficient
[success=done new_authtok_reqd=done default=ignore]
- optional
[success=ok new_authtok_reqd=ok default=ignore]
- required