先講怎麼使用,後面有理論教程,先知其然再知其所以然
1. 禁止使用舊密碼
vi /etc/pam.d/system-auth
找到同時有 “password” 和 “pam_unix.so” 欄位並且附加有 “remember=5” 的那行,它表示禁止使用最近用過的5個密碼(己使用過的密碼會被儲存在 /etc/security/opasswd 下面)。
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember=5
2.設定密碼最短長度
vi /etc/pam.d/system-auth
找到同時有 “password” 和 “pam_cracklib.so” 欄位並且附加有 “minlen=10” 的那行,它表示最小密碼長度為(10 - 型別數量)。這裡的 “型別數量” 表示不同的字元型別數量。PAM 提供4種型別符號作為密碼(大寫字母、小寫字母、數字和標點符號)。如果你的密碼同時用上了這4種型別的符號,並且你的 minlen 設為10,那麼最短的密碼長度允許是6個字元。
password requisite pam_cracklib.so retry=3 difok=3 minlen=10
3.設定密碼複雜度
vi /etc/pam.d/system-auth
找到同時有 “password” 和 “pam_cracklib.so” 那行.
password requisite pam_cracklib.so retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1
4.設定密碼過期期限
vi /etc/login.defs
PASSMAXDAYS 99999 #密碼的最大有效期, 99999:永久有期
PASSMINDAYS 0 #是否可修改密碼,0可修改,非0修改密碼後下一次修改需間隔多少天后可修改
PASS_MIN_LEN 5 #密碼最小長度,使用pam_cracklib module,該引數不再有效
PASSWARNAGE 7 #密碼失效前多少天在使用者登入時通知使用者修改密碼
Linux密碼策略理論知識:
PAM(Pluggable Authentication Modules )是由Sun提出的一種認證機制。它通過提供一些動態連結庫和一套統一的API,將系統提供的服務 和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程式,同時也便於向系 統中新增新的認證手段。PAM最初是整合在Solaris中,目前已移植到其它系統中,如Linux、SunOS、HP-UX 9.0等。
PAM的配置是通過單個配置檔案/etc/pam.conf。RedHat還支援另外一種配置方式,即通過配置目錄/etc/pam.d/,且這種的優先順序要高於單 個配置檔案的方式。
###
1、使用配置檔案/etc/pam.conf
該檔案是由如下的行所組成的:
service-name module-type control-flag module-path arguments
service-name 服務的名字,比如telnet、login、ftp等,服務名字“OTHER”代表所有沒有在該檔案中明確配置的其它服務。
module-type 模組型別有四種:auth、account、session、password,即對應PAM所支援的四種管理方式。
同一個服務可以呼叫多個 PAM模組進行認證,這些模組構成一個stack。
control-flag 用來告訴PAM庫該如何處理與該服務相關的PAM模組的成功或失敗情況。
它有四種可能的 值:required,requisite,sufficient,optional。
*required *表示本模組必須返回成功才能通過認證,但是如果該模組返回失敗的話,失敗結果也不會立即通知使用者,
而是要等到同一stack 中的所有模組全部執行完畢再將失敗結果返回給應用程式。
**即全部策略執行成功才能通過, 有失敗不會立即返回,待模組執行完成才返回。**
requisite 與required類似,該模組必須返回成功才能通過認證,
但是一旦該模組返回失敗,將不再執行同一stack內的任何模組,而是直 接將控制權返回給應用程式。
是一個必要條件。注:這種只有RedHat支援,Solaris不支援
**即全部策略執行成功才能通過,一旦有一項失敗,立即返回.**
sufficient 表明本模組返回成功已經足以通過身份認證的要求,不必再執行同一stack內的其它模組
但是如果本模組返回失敗的話可以 忽略。
optional 表明本模組是可選的,它的成功與否一般不會對身份認證起關鍵作用,其返回值一般被忽略。
*control-flag * 從Linux-PAM-0.63版本起,支援一種新的語法,具體可參看LinuxPAM文件。
module-path 用來指明本模組對應的程式檔案的路徑名,一般採用絕對路徑,如果沒有給出絕對路徑
預設該檔案在目錄/usr/lib/security下面。
arguments 是用來傳遞給該模組的引數。一般來說每個模組的引數都不相同,可以由該模組的開發者自己定義,
但是也有以下幾個共同 的引數:
debug 該模組應當用syslog( )將除錯資訊寫入到系統日誌檔案中。
no_warn 表明該模組不應把警告資訊傳送給應用程式。
use_first_pass 表明該模組不能提示使用者輸入密碼,而應使用前一個模組從使用者那裡得到的密碼。
try_first_pass 表明該模組首先應當使用前一個模組從使用者那裡得到的密碼,
如果該密碼驗證不通過,再提示使用者輸入新的密碼。
use_mapped_pass 該模組不能提示使用者輸入密碼,而是使用對映過的密碼。
*expose_account * 允許該模組顯示使用者的帳號名等資訊,一般只能在安全的環境下使用,
因為洩漏使用者名稱會對安全造成一定程度的威脅。
2、使用配置目錄/etc/pam.d/
該目錄下的每個檔案的名字對應服務名,例如ftp服務對應檔案/etc/pam.d/ftp。如果名為xxxx的服務所對應的配置檔案/etc/pam.d/xxxx不存 在,則該服務將使用預設的配置檔案/etc/pam.d/other。每個檔案由如下格式的文字行所構成:
module-type control-flag module-path arguments
每個欄位的含義和/etc/pam.conf中的相同。
密碼複雜度通過/etc/pam.d/system-auth這個檔案來實現的
我們先看一下預設有什麼內容然後將這個檔案備份一個:
在這個檔案中我們會用到pam_cracklib.so這個模組。pam_cracklib.so是一個常用並且非常重要的PAM模組。該模組主要的作用是對使用者密碼的強健性進行檢測。即檢查和限制使用者自定義密碼的長度、複雜度和歷史等。如不滿足上述強度的密碼將拒絕使用。
pam_cracklib.so 比較重要和難於理解的是它的一些引數和計數方法,其常用引數包括:
debug:將除錯資訊寫入日誌;
type=xxx:當新增/修改密碼時,系統給出的預設提示符是“New UNIX password:”以及“Retype UNIX
password:”,而使用該引數可以自定義輸入密碼的提示符,比如指定type=your own word;
retry=N:定義登入/修改密碼失敗時,可以重試的次數;
Difok=N:定義新密碼中必須有幾個字元要與舊密碼不同。但是如果新密碼中有1/2以上的字元與舊密碼不同時,該新密碼將被接受;
minlen=N:定義使用者密碼的最小長度;
dcredit=N:定義使用者密碼中必須包含多少個數字;
ucredit=N:定義使用者密碼中必須包含多少個大寫字母;
lcredit=N:定義使用者密碼中必須包含多少個小些字母;
ocredit=N:定義使用者密碼中必須包含多少個特殊字元(除數字、字母之外)
使用 PAM 整合 OpenLDAP 實現 Linux 統一管理系統使用者
www.linuxidc.com/Linux/2014-08/1055...
FTP伺服器工作原理及如何通過PAM認證實現虛擬使用者登入
www.linuxidc.com/Linux/2013-05/8498...
PAM的配置過程
www.linuxidc.com/Linux/2012-12/7681...
基於ssl/tls實現vsftpd的安全通訊並通過PAM實現對vsftpd的虛擬使用者認證
www.linuxidc.com/Linux/2013-05/8447...
Linux 使用PAM_ldap通過ad域認證
www.linuxidc.com/Linux/2012-09/7104...
整合vsftp+PAM+mysql—集中管理ftp的虛擬帳號
www.linuxidc.com/Linux/2012-08/6839...
vsftpd2.3.5+PAM安裝配置筆記
www.linuxidc.com/Linux/2012-07/6665...
本作品採用《CC 協議》,轉載必須註明作者和本文連結