pam模塊的配置使用


pam模塊的配置使用

先看一個配置文件

cat /etc/pam.d/sshd
#%PAM-1.0
auth	   required	pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
#session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

第一列: 是認證類型
第二列:控制標記
第三列:認證模塊
下邊仔細說明一下這三列

先說第二列控制標記

解釋:控制標記簡單的解釋是就是各個模塊的重要程度。

  • required
    該標記的模塊認證成功是用戶通過的必要條件。就是說required標記的模塊如果認證失敗,就一定不會通過認證。認證失敗以后也不會立刻返回給用戶錯誤消息,而是在所有的模塊調用完畢以后統一返回,就是說該模塊認證失敗以后其他的模塊認證沒有意義了。這樣做的目的是為了迷惑“敵人”,讓他們不知道是哪個模塊認證失敗導致的問題。
  • requisite
    該標記的模塊 required的相似,它標記的模塊認證失敗以后會直接返回給應用,不會執行接下來的模塊,而該標記一般用在認證一開始,用來判斷用戶的登錄環境是否合法,如果不合法的話直接返回認證失敗,就算是合法的用戶,如果登錄環境不對也不會通過認證。
  • sufficient
    該標記的模塊標識的是用戶通過認證的充分條件,意思就是只要該模塊通過了認證就會立刻返回給用戶認證成功。當然sufficient的優先級低於required,如果required認證失敗了最終結果也是失敗。當sufficient認證失敗的時候就相當於optional
  • optional
    該標記的模塊認證失敗,用戶也能通過認證。就是該標記的模塊一般只做信息的展示,不去做認證相關的東西,用戶的認證能否通過全部取決於上邊三個標記。
  • include
    該標記實際上就是引用這個pam文件相同的目錄下的另一個文件。但是不會將另一個pam配置文件中的所有內容引入,只會對“模板類型”字段所標記的一類模塊起到作用。即便system-auth可能包含了全部的四種類型的模塊,也只有當前記錄所對應的哪一類模塊的那些記錄包含進來。解釋一下
auth       include      postlogin
account    include      password-auth
password   include      password-auth
session    include      password-auth

上邊的配置文件中有這三條記錄,password-auth這個文件被引用了三次,查看password-auth中的記錄auth account password session四種類型的模塊都有。如下配置文件

# cat password-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok


password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
 account    include      password-auth

該條記錄只會引用password-auth中的如下這些配置

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so
password   include      password-auth

該條記錄只會引用password-auth中的如下這些配置

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

你懂得

  • 認證的流程

在配置文件有存在邏輯的一些認證

一下內容是我從pam.d下的配置文件中摘取出來的一些具有邏輯的配置。

auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
session    optional     pam_keyinit.so force revoke
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
[]中的就是細致定義的控制標記,意思是:user_unknown的返回忽略, seccess的返回執行ok動作,ignore的返回執行ignore動作,default狀態返回執行bad動作
問題:[user_unknown=ignore success=ok ignore=ignore default=bad]列表中的認證是順序認證還是與或非或者是模塊只會給與一個返回??????

這些就是細致描述模塊的返回狀態的處理方式,類似user_unknown、sucess、ignored等這些內容就是某個模塊的返回狀態。那么相應的ignore、ok、bad等就是對這些返回狀態的處理方式,或者說是動作

  • pam所支持的動作列表
標記 說明
ignore 忽略這個狀態,不會對驗證結果產生影響
bad 表示這個返回狀態代表驗證失敗、余下的模塊調用也永遠失敗
die 與bad相同,但是應該立即返回到應用,不在繼續調用余下模塊
ok 標識這個返回狀態應該被看作是驗證成功,繼續調用余下模塊
done 與ok相同,但是應該立即返回到應用,不在繼續調用余下模塊
N 與ok相同,但是要跳過N個模塊才能繼續
reset 清楚所有的返回狀態、繼續調用余下模塊
  • pam常見的返回狀態
狀態 說明
success 認證成功
auth_err 認證失敗
new_authtok_reqd 需要新的認證令牌。有三種情況會返回這個狀態:1. 根據安全策略需要更密碼,2. 是密碼為空;3. 是密碼已經過期
ignore 忽略底層account類型模塊的返回狀態,而且無論是否被required、sufficient和optional修飾。處於安全考慮,這個返回狀態通常需要被忽略掉,這樣其他模塊的返回狀態會被參考
user_unknown 未知用戶
try_again 已經通過了密碼服務的初步檢測
default 所有沒有注明的返回狀態
account     sufficient    pam_succeed_if.so uid < 1000 quiet
這種配置和這個模塊有關的,能在pam配置文件中實現一些分支結構,就像uid < 1000如果登錄用戶是uid返回1000那么就會返回sucess狀態

-session   optional     pam_ck_connector.so
這個-session的意思是這個模塊的返回信息不回記錄在日志中,日志一半就是在/var/log/secure


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM