iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
DevOps

為你自己架 Server系列 第 3

D3 PAM

  • 分享至 

  • xImage
  •  

PAM (Pluggable Authentication Modules) 是一套方便管理驗證方式的系統。
他把各種驗證方式做模組化,讓各個軟體 (例如 sshd、系統的登入等等) 可以用統一的介面去管理驗證方式。

(Linux PAM — How to create an authentication module | by Avi Rzayev | Medium)

概述

PAM 的設定檔會放在 /etc/pam.d 裡面。

一條 PAM 規則由以下四個區塊組成:

  • type
    • account
      • 確認使用者是否有權限看某樣東西
    • auth
      • 使用者驗證
    • session
      • 跟 session 有關的事情
    • password
      • 設定密碼時使用
  • control
    • required
      • 必須 (不能沒過)
      • 如果沒過還是可以去看其他的規則
    • requisite
      • 必須
      • 如果沒過就直接停止
    • sufficient
      • 只要有一個 sufficient 過了就可以了
      • 成功的話會直接 return
    • optional
      • 過不過沒差
      • 可以拿來做一些做一些設定
    • [action=value ...]
      • 比較細部控制一些 module 的行為
      • 對於 module 的各種回傳值,直接指定要怎麼處理
      • 例如 required 其實就是 [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
        • success=ok
          • success 代表 module 說 pass
          • ok 代表回傳說 pass
          • 所以意思是如果 module 說 pass 的話,就回傳 pass
        • new_authtok_reqd=ok
          • module 認為使用者該改密碼了 (所以代表他已經驗證過了)
        • ignore=ignore
          • module 說 ignore 就讓他 ignore
        • default=bad
          • 預設就是沒過,但也不會 die (直接退出)
  • module
    • 真的 module,資訊會傳進去讓他跑
    • 常見的都是 .so
  • arguments
    • 帶進去 module 的參數

範例

以下是 Debian 系統裡面的 /etc/pam.d/common-auth,也就是負責系統本身使用者驗證的 PAM 設定:

# here are the per-package modules (the "Primary" block)
auth    [success=2 default=ignore]      pam_unix.so nullok
auth    [success=1 default=ignore]      pam_sss.so use_first_pass
# here's the fallback if no module succeeds
auth    requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth    optional                        pam_cap.so
# end of pam-auth-update config
  • auth [success=2 default=ignore] pam_unix.so nullok
    • 用了基本的系統驗證
    • success=2 代表如果 pass 的話,要跳過後面兩行 (剛好跳過 pam_deny.so 那行)
    • nullok 代表允許空密碼
  • auth [success=1 default=ignore] pam_sss.so use_first_pass
    • SSSD 的驗證 (LDAP 相關的東西,一樣可以做使用者驗證)
    • 如果 pass 的話,要跳過後面一行 (即 pam_deny.so 那行)
  • auth requisite pam_deny.so
    • 如果前兩個沒過的話就會到這邊
    • 他會 always deny,而且會直接退出 (requisite)
  • auth required pam_permit.so
    • 如果前兩個規則中有一個通過,就會跳到這邊來
    • 他會 always permit,並且繼續執行後面的 module (required)
  • auth optional pam_cap.so
    • 設定 inheritable capabilities 用
    • 當到達此處時,驗證已經結束,該模組僅用於設定而已

Ref.


上一篇
D2 Service
下一篇
D4 Firewall - UFW
系列文
為你自己架 Server8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言