Pma模塊詳解,對用戶登錄linux等進行限制,密碼修改限制等
1.PMA簡介
PMA(Pluggable Authentication Module)是一個可插入式認證模塊,在Linux系統中,各種不同的應用程序都需要完成認證功能,為了實現統一調配,把所有需要認證的功能做成一個模 塊(認證機制特別復雜的除外,如:https),當特定的程序需要完成認證功能的時候,就去調用PMA的認證模塊,這些模塊都位於系統中的/lib64 /security(/lib/security:32位操作系統)目錄下,但並不是所有的模塊都是用來完成認證的,有些模塊是為了實現PAM的某些高級 功能而存在的,其中PMA的認證庫是由glibc提供的,應用程序最終使用哪個PMA模塊,取決於/etc/pma.d/*這個目錄下的定義.
PMA完成認證的過程:下面用passwd這個應用程序舉例吧!
一)首先用戶執行/usr/bin/passwd這個程序,並輸入密碼
二)passwd這個程序會去調用PMA模塊進行驗證
三)PMA會到/etc/pam.d/*下去尋找與passwd同名的配置文件
四)當找到配置文件後,PMA會根據/etc/pam.d/passwd內的配置,調用PMA的模塊進行認證
五)認證完成後,將驗證的結果返回給passwd這支程序
六)最終,passwd會根據PAM的返回結果決定下一個執行動作(重新輸入密碼或驗證通過)
·在以上步驟中最重要的是第四步,我們來詳細分析一下分析下第四步,pam是如何完成認證功能的,同樣,拿/etc/pam.d/passwd來舉例,首先來 /etc/pam.d/passswd的配置信息.
1 2 3 4 5 6 7 |
[[email protected] ~] # cat /etc/pam.d/passwd
#%PAM-1.0 <==PAM的版本號
auth include system-auth <==每一行都是一個驗證過程
account include system-auth
password substack system-auth
-password optional pam_gnome_keyring.so 驗證類別 驗證控制標誌 PAM的模塊與該模塊的參數
|
·第一個字段:驗證類別(Type)
驗證類別主要分為如下四種,並且按順序依次向下驗證
·auth
auth是用來認證用戶的身份信息的,如果auth認證的時候需要用到多個模塊,就依次檢查各個模塊,這個模塊通常最終都是是需要密碼來檢驗的,所以這個模塊之後的下一個模塊是用來檢驗用戶身份的.如果帳號沒問題,就授權
·account
account大部分是用來檢查權限的,比如檢查賬戶和密碼是否過期等,如果你使用一個過期的賬戶或密碼就不允許驗證通過.如果有多個模塊,也依次檢查各個模塊.
·password
修改密碼需要用到的,如果用戶不修改密碼,幾乎用不到這個模塊.
·session
限定會話限制的,比如:vsftpd下午6點不允許訪問,那6點過後用戶再去訪問的話就會被限制,或內存 不足不允許訪問等,session就是限定這種類型的
·第二個字段:驗證控制標誌(control flag)
用於控制認證成功或失敗時要采取的行動,其中又分為兩種control,一種是簡單control,一種是復雜 contorl
·簡單的control
·required
此驗證如果成功則帶有success的標誌,如果失敗則帶有failure的標誌,此驗證如果失敗了,就一定會 返回失敗的標誌,但是不會立即返回,而是等所有模塊驗證完成後才返回,所以它不論驗證成功或失敗 都會繼續向後驗證其他的流程.
·requisite
如果驗證失敗則立即返回failure的標誌,並終止後續的驗證流程,如果驗證帶有success標誌,則繼續 後面的流程.
·sufficient
與requisite正好相反,此驗證如果成功則帶有success的標誌,並立即終止後續的流程,如果驗證帶有 failure的標誌,則繼續後面的流程.
·optional
optional參考意見,這個只是打醬油的....
·以上流程如下圖所示
·include
包含進來指定的其他配置文件中的同名棧中的規則,並以之進行檢測.
·substack·
有點麻煩.不管他了...你也用不著
·PAM模塊路徑
·/etc/pam.d/*:每個程序個別的PAM的配置文件;
·/lib/security/*:PAM模塊檔案的實際放置目錄;
·/etc/security/*:其他PAM環境的配置文件;
·/usr/share/doc/pam-*/:詳細的PAM說明文件;
·PAM模塊分類
·pam_unix.so
傳統意義上的帳號和密碼認證機制,這個機制實現了標準C庫中基於讓用戶輸入帳號密碼並完成檢測 的認證過程
·pam_permit.so
直接通過,允許訪問,定義默認策略
·pam_deny.so
拒絕訪問,定義默認策略
·pam_cracklib.so
用來檢驗密碼的強度,包括設定的密碼是否在字典中,修改的密碼是否能和上次一樣,密碼至少包含多 少個數字字符,可以輸入多少次錯誤密碼等,都是由這個模塊定義的
·pam_shells.so
檢查用戶登錄的shell是否是安全shell,也就是寫在 /etc/shells中的shell
·pam_securetty.so
限定管理員只能通過安全的tty登錄,/etc/securetty,tty就是傳統終端
·pam_listfile,這東西可牛逼了....
1 |
item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=/path/filename onerr=[succeed|fail] [apply=[user|@group]] [quiet]
|
·pam_rootok.so
管理員su到其他用戶不用輸入密碼就是靠這個定義的
·pam_succeed_if.so
普通用戶su的時候不需要密碼
·pam_limits.so
資源限定打開文件數,使用進程數等等,對任何人都生效,/etc/security/limits 或/etc/security/limits.d/*
·pam_nologin.so
可以限制一般用戶是否能夠登入主機,當/etc/nologin這個檔案存在時,則所有一般使用者均無法 再登入系統
練習:
·限制root用戶只能最多從tty2登錄,不能遠程使用sshd登錄
1 2 3 4 5 6 |
[[email protected] etc]# vim /etc/pam.d/sshd #編輯這個文件
auth required pam_securetty.so #添加這一行
[[email protected] ~]# cat /etc/securetty #編輯這個文件
console
tty1
tty2
|
·只有sshusers組的用戶能使用ssh遠程登錄
1 2 3 4 5 |
[[email protected] etc]# groupadd sshusers #添加一個組
[[email protected] etc]# vim /etc/pam.d/sshd #編輯遠程登錄的pam
auth required pam_listfile.so item=group sense=allow file=/etc/security/allow-groups #添加這一句
[[email protected] etc]# vim /etc/security/allow-groups #編輯組文件,就是上面那個
sshusers #添加組
|
·管理員su的時候需要密碼
1 2 3 4 5 6 |
[[email protected] etc]# vim /etc/pam.d/su #編輯這個文件
#auth sufficient pam_rootok.so #註釋這一項
[[email protected] etc]# whoami
root
[[email protected] etc]# su ldf
Password:
|
·普通用戶ldf,su的時候不用輸入密碼
1 2 3 4 5 6 |
[[email protected] etc]# vim /etc/pam.d/su #編輯這個文件
3 auth sufficient pam_succeed_if.so uid = 500 use_uid quiet #添加這一句
[[email protected] etc]# id ldf
uid= 500 (ldf) gid= 500 (ldf) groups= 500 (ldf)
[[email protected] ~]$ su root #嘗試
[[email protected] ldf]#
|
·限定組(用戶)使用最大的資源數
1 2 3 4 5 6 |
[[email protected] etc]# vim /etc/security/limits.conf #這裏看限制的東西很多
@sshusers soft nofile 10000 #軟限制,打開文件數 10000 個
@sshusers hard nofile 10000 #硬限制,
@sshusers - data 10000 #軟硬都限制,使用數據大小
sshusers - nproc 10000 #軟硬都限制,進程數
上面帶@的是組,不帶的是用戶,使用命令limits可以臨時調整
|
本文出自 “煙不離手” 博客,請務必保留此出處http://lidefu.blog.51cto.com/3429777/1388751
Pma模塊詳解,對用戶登錄linux等進行限制,密碼修改限制等