摘自:https://blog.csdn.net/lws123253/article/details/89354606
首先了解一下,什么是linux的pam認證呢?
pam認證機制:簡單來說就是linux系統采取的這一種對不同用戶以及系統中的不同服務進行的安全認證機制。
認證流程:linux系統首先確定所需認證的服務,然后加載相應的PAM的配置文件(位於/etc/pam.d下),最后調用認證文件(位於/lib/security下)進行安全認證。
舉個例子,我們登陸的時候,會向 PAM 發出驗證要求的通知, PAM 經過一連串的驗證后,將驗證的結果回報給該程序,然后該程序就能夠利用驗證的結果來進行可登陸或顯示其他無法使用的信息。
現在我們取 /etc/pam.d/passwd這個配置文件的內容來看一看:
我們看到有三列數據,它們分別代表了 :驗證類別、控制標志、PAM 模塊與該模塊的參數。
你會發現在我們上面的表格當中第二列出現的是“include”這個關鍵詞,他代表的是會調用后面的文件來作為這個類別的驗證, 所以,上述的每一行都要調用/etc/pam.d/system-auth 那個文件來進行驗證。
現在我們重點講一下第一個字段驗證類別和第二個字段控制標志。
驗證類別:
驗證類別主要分為四種:
- auth:是 authentication (認證) 的縮寫,所以這種類別主要用來檢驗使用者的身份驗證,這種類別通常是需要口令來檢驗的, 所以后續接的模塊是用來檢驗用戶的身份。
- account:賬戶模塊接口,檢查指定賬戶是否滿足當前驗證條件,檢查賬戶是否到期等。
- session:會話模塊接口,用於管理和配置用戶會話。會話在用戶成功認證之后啟動生效
- password:密碼模塊接口,用於更改用戶密碼,以及強制使用強密碼配置
控制標志:
required:若成功則帶有 success (成功) 的標志,若失敗則帶有 failure 的標志,但不論成功或失敗都會繼續后續的驗證流程。 由於后續的驗證流程可以繼續進行,因此相當有利於數據的登錄 (log) ,這也是 PAM 最常使用 required 的原因。
requisite:若驗證失敗則立刻返回 failure 的標志,並終止后續的驗證流程。若驗證成功則帶有 success 的標志並繼續后續的驗證流程。 這個項目與 required 最大的差異,就在於失敗的時候還要不要繼續驗證下去。由於 requisite 是失敗就終止, 因此失敗時所產生的 PAM 信息就無法透過后續的模塊來記錄了。
sufficient:若驗證成功則立刻回傳 success 給原程序,並終止后續的驗證流程;若驗證失敗則帶有 failure 標志並繼續后續的驗證流程。 這玩意兒與 requisits 剛好相反!
optional :該模塊返回的通過/失敗結果被忽略。當沒有其他模塊被引用時,標記為optional模塊並且成功驗證時該模塊才是必須的。
常用模塊:
pam_securetty.so: 限制系統管理員 (root) 只能夠從安全的 (secure) 終端機登陸;例如 tty1, tty2 等就是傳統的終端機裝置名稱。那么安全的終端機配置呢? 就寫在 /etc/securetty 這個文件中。你可以查閱一下該文件, 就知道為什么 root 可以從 tty1~tty7 登陸,但卻無法透過 telnet 登陸 Linux 主機了! pam_nologin.so: 這個模塊可以限制一般用戶是否能夠登陸主機之用。當 /etc/nologin 這個文件存在時,則所有一般使用者均無法再登陸系統了!若 /etc/nologin 存在,則一般使用者在登陸時, 在他們的終端機上會將該文件的內容顯示出來!所以,正常的情況下,這個文件應該是不能存在系統中的。 但這個模塊對 root 以及已經登陸系統中的一般賬號並沒有影響。 pam_selinux.so: SELinux 是個針對程序來進行細部管理權限的功能。由於 SELinux 會影響到用戶運行程序的權限,因此我們利用 PAM 模塊,將 SELinux 暫時關閉,等到驗證通過后, 再予以啟動! pam_console.so: 當系統出現某些問題,或者是某些時刻你需要使用特殊的終端接口 (例如 RS232 之類的終端聯機設備) 登陸主機時, 這個模塊可以幫助處理一些文件權限的問題,讓使用者可以透過特殊終端接口 (console) 順利的登陸系統。 pam_loginuid.so: 我們知道系統賬號與一般賬號的 UID 是不同的!一般賬號 UID 均大於 500 才合理。 因此,為了驗證使用者的 UID 真的是我們所需要的數值,可以使用這個模塊來進行規范! pam_env.so: 用來配置環境變量的一個模塊,如果你有需要額外的環境變量配置,可以參考 /etc/security/pam_env.conf 這個文件的詳細說明。 pam_unix.so: 這是個很復雜且重要的模塊,這個模塊可以用在驗證階段的認證功能,可以用在授權階段的賬號許可證管理, 可以用在會議階段的登錄文件記錄等,甚至也可以用在口令升級階段的檢驗!非常豐富的功能! 這個模塊在早期使用得相當頻繁喔! pam_cracklib.so: 可以用來檢驗口令的強度!包括口令是否在字典中,口令輸入幾次都失敗就斷掉此次聯機等功能,都是這模塊提供的! 這玩意兒很重要!