1. 程式人生 > >Linux學習——小白看PAM認證

Linux學習——小白看PAM認證

pam認證機制

  • 是一種與認證相關的通用框架機制,但是自身不做認證
  • 它同時面向驗證服務的開發者和被驗證服務者:淘寶、商家、買家
    • 應用程式開發者通過 在服務程式中使用PAM API來實現對認證方法的呼叫;而PAM服 務模組的開發者則利用PAM SPI來編寫模組供 PAM介面庫呼叫,將不同的認證機制加入到系統中;PAM介面庫則 讀取配置檔案,將應用程式和相應的PAM服務模組聯絡起來
  • 系統管理員可以靈活的根據需要給不同的服務配置不同的認證方式而無需更改服務程式
    • 修改服務的配置檔案來修改認證方式

PAM相關檔案

  • 模組檔案目錄:/lib64/security/*.so
  • 模組的配置檔案:/etc/security/,該目錄下存放/lib64/security/下複雜模組的子配置檔案
  • 主(專門的)配置檔案:/etc/pam.conf,預設不存在
  • 為每種應用模組提供一個專用的配置檔案:/etc/pam.d/APP_NAME,/etc/pam.d/下的應用程式通過對應的/etc/pam.d/APP_NAME配置檔案來呼叫功能模組
  • 呼叫模組需要的工作引數如果簡單就放在/etc/pam.d./下的配置檔案中,複雜就放在/lib64/security/下
  • 注意:如/etc/pam.d存在,/etc/pam.conf將失效

PAM認證原理

  1. PAM認證首先要確定那一項服務,然後載入相應的PAM的配置檔案(位於 /etc/pam.d下),最後呼叫認證檔案(位於/lib/security下)進行安全認證
  2. 過程,以執行passwd程式為例
  • 使用者執行/usr/bin/passwd 程式,並輸入密碼
  • passwd開始呼叫PAM模組,PAM模組會搜尋passwd程式的PAM相關配置文 件,這個設定檔案一般是在/etc/pam.d/裡邊的與程式同名的檔案,即PAM會 搜尋/etc/pam.d/passwd此設定檔案
  • 經由/etc/pam.d/passwd設定檔案的資料,取用PAM所提供的相關模組來進 行驗證
  • 將驗證結果回傳給passwd這個程式,而passwd這個程式會根據PAM回傳的 結果決定下一個動作(重新輸入密碼或者通過驗證)

PAM檔案格式

  1. 通用配置檔案格式/etc/pam.conf,太大,內容太多,不用
  2. 專用配置檔案格式/etc/pam.d/*,分四個型別
  • type
    • Auth 賬號的認證和授權
    • Account 與賬號管理相關的非認證類的功能,如:用來限制/允許使用者對某 個服務的訪問時間,當前有效的系統資源(最多可以有多少個使用者),限制用 戶的位置(例如:root使用者只能從控制檯登入)
    • Password 使用者修改密碼時密碼複雜度檢查機制等功能
    • Session 使用者獲取到服務之前或使用服務完成之後需要進行一些附加的操作, 如:記錄開啟/關閉資料的資訊,監視目錄等
    • -type 表示因為缺失而不能載入的模組將不記錄到系統日誌,對於那些不總是 安裝在系統上的模組有用
  • control,PAM庫如何處理與該服務相關的PAM模組成功或失敗情況
    • 分兩種方式:簡單、複雜
    • 簡單方式實現,用一個關鍵字實現
      • required:一票否決,表示本模組必須返回成功才能通過認證,但是如果該 模組返回失敗,失敗結果也不會立即通知使用者,而是要等到同一type中的所有模組全部執行完畢再將失敗結果返回給應用程式
      • requisite:一票否決,該模組必須返回成功才能通過認證,但是一旦該模組返 回失敗,將不再執行同一type內的任何模組,而是直接將控制權返回給應用程式
      • sufficient:一票通過,BOSS發話好使,表明本模組返回成功則通過身份認證的要求,不必再執 行同一type內的其它模組,但如果本模組返回失敗可忽略
      • opitional:可選可不選,返回值一般對最終結果沒影響
      • include:可以呼叫其他的配置檔案中定義的配置資訊
    • 複雜詳細實現,一般不用
  • modules-path
    • 相對路徑:
      • /lib64/security目錄下的模組可使用相對路徑,如:pam_shells.so、 pam_limits.so
    • 絕對路徑:
      • 模組通過讀取配置檔案完成使用者對系統資源的使用控制,/etc/security/*.conf
    • 注意:修改PAM配置檔案將馬上生效
    • 建議:編輯pam規則時,保持至少開啟一個root會話,以防止root身份驗證錯誤
  • arguments,用來傳遞給該模組的引數 
  • image

PAM文件說明

  • /user/share/doc/pam-*/txts/*
  • rpm -qd pam檢視pam的man檔案
  • man modules-name,man rootok

常用的PAM模組

pam_shells.so

  1. 模組:pam_shells
  2. 功能:檢查有效shell
  3. man pam_shells
  4. 示例:模擬非shell型別的使用者無法登入
/* 原本的shell型別內容 */
    cat /etc/shells
/* 修改登入程式的配置檔案 */
    vim /etc/pam.d/login
/* 新增auth required pam_shells.so */
/* 將一名系統使用者的登入型別設為/bin/csh */
    usermod/chsh -s /bin/csh huang
/* 但是使用su命令可以用huang登入,同理修改su的配置檔案*/
    vim /etc/pam.d/su
    auth required pam_shells.so 
  • 使用huang使用者將無法登入  

pam_securetty.so

  1. 功能:只允許root使用者在/etc/securetty列出的安全終端上登陸
  2. 示例:允許root在telnet登陸
  • 可以以在/etc/securetty中新增talnet的登入終端
  • 或是在/etc/pam.d/remote中刪除auth required pam_securetty.so

pam_nologin.so

  1. 功能
  • 如果/etc/nologin檔案存在,將導致非root使用者不能登陸
  • 如果使用者shell型別是/sbin/nologin時,當該使用者登陸時,會顯示**/etc/nologin檔案內容**,並拒絕登陸,維護時使用

pam_limits.so

  1. 功能:在使用者級別實現對其可用資源的控制,比如可開啟的檔案數量、可執行的程序數量、可用記憶體
  2. 修改限制
  • 使用ulimit命令,立即生效但不永久
    • -n,最大能開啟的檔案個數
    • -u,最大的使用者程序數
    • -S,使用軟資源限制
    • -H,硬資源限制
  • 寫到檔案中中永久儲存
    • /etc/security/limits.conf,總配置檔案
    • /etc/security/limits.d/*.conf,分成子配置來修改
    • domain type item value
    • 指定使用者 限制類型 限制的資源 具體數值
      • huang - nproc 8

總結的不深,希望剛接觸這些的人有所幫助。