1. 程式人生 > >PAM認證機制

PAM認證機制

pam模塊使用


PAM認證機制


PAM:Pluggable Authentication Modules

認證庫:文本文件,MySQL,NIS,LDAP等

PAM 是關註如何為服務驗證用戶的API,通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開

使得系統管理員可以靈活地根據需要給不同的服務配置不 同的認證方式而無需更改服務程序

它提供了對所有服務進行認證的中央機制,適用於login,遠 程登錄(telnet,rlogin,fsh,ftp,點對點協議(PPP)),su等 應用程序中。系統管理員通過PAM配置文件來制定不同應用 程序的不同認證策略;應用程序開發者通過在服務程序中使 用PAM API(pam_xxxx( ))來實現對認證方法的調用;而 PAM服務模塊的開發者則利用PAM SPI來編寫模塊(主要是 引出一些函數pam_sm_xxxx( )供PAM接口庫調用),將不 同的認證機制加入到系統中;PAM接口庫(libpam)則讀取 配置文件,將應用程序和相應的PAM服務模塊聯系起來。


PAM架構



技術分享


PAM認證原理


1、PAM認證一般遵循這樣的順序:Service(服務)→PAM(配置文 件)→pam_*.so

2、PAM認證首先要確定那一項服務,然後加載相應的PAM的配 置文件(位於/etc/pam.d下),最後調用認證文件(位於 /lib/security下)進行安全認


PAM相關文件

模塊文件目錄:/lib64/security/*.so

環境相關的設置:/etc/security/

主配置文件:/etc/pam.conf,默認不存在

為每種應用模塊提供一個專用的配置文件: /etc/pam.d/APP_NAME ü

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

PAM認證過程:

1.使用者執行/usr/bin/passwd 程序,並輸入密碼

2.passwd開始呼叫PAM模塊,PAM模塊會搜尋passwd程序的 PAM相關設定文件,這個設定文件一般是在/etc/pam.d/裏邊的與程序同名的文件,即PAM會搜尋/etc/pam.d/passwd 這個設置文件

3.經由/etc/pam.d/passwd設定文件的數據,取用PAM所提 供的相關模塊來進行驗證

4.將驗證結果回傳給passwd這個程序,而passwd這個程序會 根據PAM回傳的結果決定下一個動作(重新輸入密碼或者通 過驗證)

通用配置文件/etc/pam.conf格式

application type control module-path arguments

專用配置文件/etc/pam.d/* 格式

type control module-path arguments

說明:

服務名(application) telnet、login、ftp等,服務名字“OTHER”代表所有沒 有在該文件中明確配置的其它服務

模塊類型(module-type)

control PAM庫該如何處理與該服務相關的PAM模塊的成 功或失敗情況 ü module-path 用來指明本模塊對應的程序文件的路徑名

Arguments 用來傳遞給該模塊的參數

模塊類型(module-type)

Auth 賬號的認證和授權

Account 與賬號管理相關的非認證類的功能,如:用來限 /允許用戶對某個服務的訪問時間,當前有效的系統資源 (最多可以有多少個用戶),限制用戶的位置(例如:root用 戶只能從控制臺登錄)

Password 用戶修改密碼時密碼復雜度檢查機制等功能

Session 用戶獲取到服務之前或使用服務完成之後需要進 行一些附加的操作,如:記錄打開/關閉數據的信息,監視 目錄等

-type 表示因為缺失而不能加載的模塊將不記錄到系統日 誌,對於那些不總是安裝在系統上的模塊有用

Control:

PAM庫如何處理與該服務相關的PAM模塊成功或失敗情況

兩種方式實現:簡單和復雜

簡單方式實現:一個關健詞實現

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

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

sufficient :一票通過,表明本模塊返回成功則通過身份認 證的要求,不必再執行同一type內的其它模塊,但如果本模 塊返回失敗可忽略,即為充分條件

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

include: 調用其他的配置文件中定義的配置信息

比如我們查看一下/etc/pam.d中的一個配置文件,第一列就是模塊的類型,第二列就是control,第三列就是我們所要調用的庫,有些文件的配置格式中只有這三項,但是有些文件是四項。技術分享

module-path: 模塊路徑

相對路徑:

/lib64/security目錄下的模塊可使用相對路徑

如:pam_shells.so、pam_limits.so

絕對路徑:

模塊通過讀取配置文件完成用戶對系統資源的使用控制

/etc/security/*.conf

註意:修改PAM配置文件將馬上生效

建議:編輯pam規則時,保持至少打開一個root會話,以防止 root身份驗證錯誤

Arguments 用來傳遞給該模塊的參數

模塊:pam_shells

功能:檢查有效shell

如果修改vim /etc/pam.d/login只要和登陸相關的程序都受影響,因為用戶一登陸就會調用這個login程序

如果只修改vim /etc/pam.d/sshd這個配置文件,那就只會影響ssh的連接

技術分享


實驗



1、創建一個用戶並且這個用戶的shells類型是/bin/csh

useradd -s /bin/csh test

可以在查看一下/etc/passwd是否設置正確

技術分享

2、/etc/shells中刪除/bin/csh這一行

3然後在其他主機試著用ssh連接這個用戶,註意,必須是連接這個用戶,因為只是修改了這個用戶的shells

技術分享

看見如上字樣那就說明我們的實驗是成功的,因為在172.18.77.7這臺主機上設置了sshd這個服務,且在/etc/pam.d/sshd中定義了用戶用sshd連接是檢查shells的類型。(調用了pam_shells.so這個庫)這個庫的作用就是檢查/etc/shells這個文件中有沒有對應的shells類型,沒有/bin/sch這樣的shells類型就會拒絕。

現在在嘗試做另一個小實驗修改vim /etc/pam.d/login文件,將同樣的設置放在這個配置文件中

技術分享

切換普通用戶登錄,依然會登上去,因為可能沒有調用login程序

技術分享

采用本地登錄的方式就會看到明顯的效果了,如下圖所示

技術分享

兩個小實驗已經做完了,收獲不小吧!還可以查看日誌cat /var/log/secure

如果還不明白,也可以將上述設置放入到/etc/pam.dsu這個文件裏,看看效果

可以直接切換用戶就可以看到明顯的效果

技術分享

模塊:pam_securetty.so v

功能:只允許root用戶在/etc/securetty列出的安全終端上登陸

cat /etc/securetty

這裏面放置的是限制root用戶登錄在特定的設備上,安全的登陸tty終端

示例:

允許root在telnet登陸

vi /etc/pam.d/login #auth required pam_securetty.so

#將這上面一行加上註釋

如果登錄不成功,可能是其他的文件配置中也有上面那一行,搜索註釋就可以了

經過實驗證明只要註釋掉remote這個文件中的那一行就可以登錄,看來登錄的時候沒有啟動login這個文件,remote文件是負責遠程登錄的。

技術分享

或者/etc/securetty文件中加入 pts/0,pts/1…pts/n

也可以用第一種方法用telnet登錄上去後看看tty是什麽,然後在/etc/securetty中加上就可以

模塊:pam_nologin.so

功能:如果/etc/nologin文件存在,將導致非root用戶不能登陸如果用戶shell是/sbin/nologin 時當該用戶登陸時會顯示/etc/nologin.txt文件內容,並拒絕登陸

默認/etc/nologin這個文件是不存在的,若果將改文件創建則不是root用戶就不能登錄,該文件中有內容的話,會顯示該文件中的內容。

示例:

echo "do not allow access" > /etc/nologin


技術分享

在做一個小實驗證明一下,將/etc/pam.d/su文件中加上一行下面的字樣

技術分享

這樣的話用su - wang 切換也是不可以的

技術分享

如果

/etc/nologin

這個文件不在默認路徑下,將它移到/app/下,則普通用戶是可以登錄的,想要普通用戶不能登錄,則要在login指定文件路徑,如下所示

技術分享

時間有限,就介紹這幾個模塊,謝謝!

PAM認證機制