動機

之前修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,錯了就當成只有那一條失敗
  • 自訂版
    • [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]

Ref

pam.d(5) - Linux man page