1. 程式人生 > >PAM 模塊詳解

PAM 模塊詳解

linux pam


pam 適用場景

Pluggable Authentication Module,PAM. 插入式驗證模塊

PAM 是關註如何為服務驗證用戶的 API。在使用 PAM 之前,諸如 login(和 rlogin、telnet、rsh)之類的應用程序在 /etc/passwd 中查找用戶名,然後將兩者相比較並驗證用戶輸入的名稱。所有應用程序使用了這些共享服務,但是並未共享實現細節和配置這些服務的權限。
pam 通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活的根據需要給不同的服務配置不同的認證方式,而無需更改服務程序

pam 認證過程

用戶使用與驗證有關的服務程序時,應用程序通過 PAM 的API (PAM 的應用編程接口 )與PAM 的動態鏈接庫進行通信。PAM 模塊通過PAM 的SPI (PAM 的服務提供者接口)與PAM 庫進行通信。通過這種方式,PAM 庫可使應用程序和模塊互相進行通信

例如passwd 這個程序::

1、用戶登錄時執行 /usr/bin/passwd 這個程序,並輸入密碼;
2、passwd 程序開始呼叫PAM模塊,PAM塊會搜尋passwd 程序的PAM 相關設定文件,這個設定文件一般是在 /etc/pam.d/ 裏邊的與程序同名的文件,即PAM 會搜尋/etc/pam.d/passwd 這個設置文件 ;
3、根據/etc/pam.d/passwd 中的設定,會調用PAM 所提供的相關模塊(位於/lib64/security)來進行驗證,在/etc/pam.d/passwd 文件中會定義要調用哪個pam 的相關模塊文件 ;
4、將驗證結果回傳給passwd 這個程序,而passwd 這個程序會根據PAM 回傳的結果決定下一個動作(重新輸入密碼或者通過驗證)。

pam 相關文件說明

/lib64/security/*.so

pam 模塊的動態鏈接庫.

/etc/security

環境相關的設置的配置文件 : pam 使用的動態庫文件對應使用的配置文件.

/etc/pam.conf

主配置文件 : 默認不存在 #不推薦直接修改其主配置文件,所以默認不存在.

/etc/pam.d/APP_NAME

對於使用 PAM 的各項服務,目錄中都有一個對應的文件,其中包含應當如何獲取該服務的驗證及帳戶信息的規則或說明。用戶也可根據需要在此目錄下定義自己想要針對的某程序的pam 的配置文件.

註: 如果/etc/pam.d存在,/etc/pam.conf將失效

應用程序的pam 模塊文件說明–/etc/pam.d/APP_NAME

每行定義一種檢查規則
格式 :type control module——path module-arguments

1、type :pam 模塊是按模塊類型歸類的。pam 模塊主要有4類 :

  • auth 驗證模塊 。與賬號認證和授權相關的檢查;

  • account 帳戶管理模塊。將執行與賬號管理相關非認證功能,例如是否為有效賬號,有效期限、限制用戶的訪問時間等;

  • password 密碼管理模塊。執行與密碼更改/更新有關的操作。

  • session 會話管理模塊。用於初始化和終止會話,以及一些附加性操作,如,記錄打開/關閉數據的信息,監視目錄等

2、control :同一種功能的多個檢查之間如何進行組合。如auth功能的第一個檢查完成之後,第二個怎麽辦等。PAM庫如何處理與該服務相關的PAM模塊成功或失敗情況。有兩種機制 : 簡單和復雜。這裏只說明簡單機制(使用一個關鍵詞來定義)。

  • required
    “一票否決“,表示本模塊必須返回成功才能通過認證。是如果該模塊返回失敗,將不再執行同一功能內的任何模塊,失敗結果也不會立即通知用戶,而是要等到同一type中的所有模塊全部執行完畢再將失敗結果返回給應用程序;

  • sufficient
    “一票通過”,表明本模塊返回成功則通過身份認證的要求,且通過同一type 內的模塊,則不必再執行同一type內的其它模塊,而是去執行下一個模塊。但如果本模塊返回失敗則可忽略;

  • optional
    表明本模塊是可選的,它的成功與否不會對身份認證起關鍵作用,其返回值一般被忽略 ;

  • include
    用其他的配置文件中定義的配置信息;

  • requisite
    一票否決,該模塊必須返回成功才能通過認證,但是一旦該模塊返回失敗,將不再執行同一type內的任何模塊,而是直接將控制權返回給應用程序。

3、 module——path

調用的模塊文件的路徑位置

4、module-arguments

模塊參數 (一般不會用到)

常用pam 模塊示例

1、pam_securetty.so

  • 功能
    只允許root用戶在 /etc/securetty 列出的安全終端上登錄, /etc/securetty 文件裏面定義了用戶可登錄的終端名

  • 註意
    /etc/securtty 在此文件中定義的終端是允許root 登錄的,ssh 登錄是不受此文件定義的終端限制的,但是諸如telnet 是受限制的,而且telnet 默認是不允許使用root登錄的

2、pam_time 認證模塊

  • 功能
    對用戶訪問服務提供時間控制,即控制用戶能夠訪問服務的時間

  • 配置文件
    /etc/security/time.conf
    主要設置 : services;ttys;users;times

  • 示例
    只允許 centos 這個用戶在工作時間通過ssh 遠程連接到本機

vim /etc/security/time.conf
ssh ;IP ;centos ;Wd0000-24000

3、pam_nologin.so

  • 功能
    1、如果/etc/nologin 文件存在,將導致非root 用戶不能登錄,且如果/etc/nologin 文件裏面存在一些內容時,則非root用戶被拒絕時,還會顯示文件裏面的內容。su 可以登錄;
    2、如果用戶shell 是/sbin/nologin 時,當該用戶登錄時,會被拒絕登錄;

4、模塊 :pam_limit.so

  • 功能
    在用戶級別實現對其可使用的資源的限制,例如: 可打開的文件的數量,可運行的進程的數量,可用內存空間

  • 限制用戶可使用的資源的方式:2種
    1、ulimit 命令 :立即生效,但無法保存

-n # 最多的打開的文件的描述符的個數,例如可通過此限制其他主機對本機httpd 的壓力測試
-u # 最大用戶進程數,針對所有用戶。只能調小,不能調大
-S # 使用的(軟)資源限制
-H # 使用的(硬)資源限制
-a # 列出所有的限制值

2、修改配置文件
/etc/security/limits.conf
/etc/security/limits.d/*.conf #limit 通過專門的配置文件來進行設置

  • 格式
    < domain> < type> < item> < value>

1、< domain> : 應用於哪些對象

  • username : 指明某單個用戶

  • @group : 某組內所用用戶

  • * : 所有用戶

2、< type> : 限制的類型

  • Soft : 軟限制,普通用戶自己可以修改

  • Hard 硬限制,由root用戶設定,且通過kernel強制生效

  • - 二者同時限定

3、< item> : 限制哪些資源

  • nofile :所能夠同時打開的最大文件數量,默認為1024

  • nproc 所能夠同時運行的進程的最大數量,默認為1024

  • rss 實際分配給進程的物理內存

  • maxlogin 某用戶的最多登錄次數

4、< value> 指定具體值

  • 示例
    apache 用戶可打開10240 個文件;student 用戶不能運行超過20個進程

vim /etc/security/limits.conf
apache - nofile 1024
student hard nproc 20

4、模塊 :pam_shells

  • 功能
    檢查有效的shell ,僅允許在/etc/shells 中列出的sehll 登錄

  • 示例
    禁止shell 類型為csh 的用戶使用ssh 或者su 進行登錄

vim /etc/pam.d/login
auth required pam_shells.so
或者
vim /etc/pam.d/su
auth required pam_shells.so
vim /etc/shells
註釋掉此文件裏面的/bin/csh


本文出自 “12108009” 博客,請務必保留此出處http://12118009.blog.51cto.com/12108009/1968572

PAM 模塊詳解