Linux用戶密碼策略

轉載地址:http://jialuweb.iteye.com/blog/1540173

前言: 


使用Linux快三年了,從未想過Linux用戶密碼策略,從未把一本Linux的書從頭看到尾(上學時的教材除外),故不知書上有無介紹,直到最近參加公司的信息安全稽覈會議後纔開始考慮Linux用戶密碼策略… 

系統版本: 

Red Hat Enterprise Linux AS release 4 

Linux用戶密碼策略 

    Linux用戶密碼的有效期,是否可以修改密碼可以通過login.defs文件控制.對login.defs文件修隻影響後續建立的用戶,如果要改變以前建立的用戶的有效期等可以使用chage命令. 

    Linux用戶密碼的複雜度可以通過pam pam_cracklib module或pam_passwdqc module控制,兩者不能同時使用. 個人感覺pam_passwdqc更好用. 




/etc/login.defs密碼策略 

PASS_MAX_DAYS   99999     #密碼的最大有效期, 99999:永久有期 

PASS_MIN_DAYS   0          #是否可修改密碼,0可修改,非0多少天后可修改 

PASS_MIN_LEN    5          #密碼最小長度,使用pam_cracklib module,該參數不再有效 

PASS_WARN_AGE   7         #密碼失效前多少天在用戶登錄時通知用戶修改密碼 

pam_cracklib主要參數說明: 

    tretry=N:重試多少次後返回密碼修改錯誤 

    difok=N:新密碼必需與舊密碼不同的位數 

    dcredit=N: N >= 0:密碼中最多有多少個數字;N < 0密碼中最少有多少個數字. 

    lcredit=N:小寶字母的個數 

    ucredit=N大寶字母的個數 

    ocredit=N:特殊字母的個數 

    minclass=N:密碼組成(大/小字母,數字,特殊字符) 



pam_passwdqc主要參數說明: 

mix:設置口令字最小長度,默認值是mix=disabled。 

max:設置口令字的最大長度,默認值是max=40。 

passphrase:設置口令短語中單詞的最少個數,默認值是passphrase=3,如果爲0則禁用口令短語。 

atch:設置密碼串的常見程序,默認值是match=4。 

similar:設置當我們重設口令時,重新設置的新口令能否與舊口令相似,它可以是similar=permit允許相似或similar=deny不允許相似。 

random:設置隨機生成口令字的默認長度。默認值是random=42。設爲0則禁止該功能。 

enforce:設置約束範圍,enforce=none表示只警告弱口令字,但不禁止它們使用;enforce=users將對系統上的全體非根用戶實行這一限制;enforce=everyone將對包括根用戶在內的全體用戶實行這一限制。 

non-unix:它告訴這個模塊不要使用傳統的getpwnam函數調用獲得用戶信息, 

retry:設置用戶輸入口令字時允許重試的次數,默認值是retry=3 





密碼複雜度通過/etc/pam.d/system-auth實施 

如: 
要使用pam_cracklib將註釋去掉,把pam_passwdqc.so註釋掉即可. 

#password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3 difok=1 

password    requisite     /lib/security/$ISA/pam_passwdqc.so min=disabled,24,12,8,7 passphrase=3 

password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow 



#password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3 difok=1 

新密碼至少有一位與原來的不同. 




######################################### 


服務器的系統安全確實是一件讓大多數用戶頭痛的事情:如何確保系統中使用應用程序或服務的用戶確是用戶本人?如何給這些用戶指定限制訪問服務的時間段?以及如何限制各種應用程序或服務對系統資源的使用率等等?所有的這些問題,常規的安全措施並不能妥善地解決。在使用Linux內核的RedHat企業Linux3中,已經集成了一種叫做可插入式認證模塊(Pluggable Authentication Modules)的安全驗證方式,能夠用它來完成上面所示的任務。 
    可插入認證模塊(簡稱PAM)是基於模塊化設計、具有可插入功能的一種獨立於應用程序之外的驗證方式。使用PAM後,應用程序可以不需要集成驗證功能,而由PAM來完成。例如,在Linux系統中,Login服務爲用戶提供系統登錄服務,它提示用戶輸入相應的用戶名和密碼來驗證用戶的有效性,當使用PAM後,這個驗證過程可以由PAM來代替。PAM具有很大的靈活性,系統管理員可以通過它爲應用程序自由選擇需要使用的驗證方式。鑑於PAM有這麼多優點,在本文中,將以RedHat企業Linux3爲應用平臺,來討論如何使用PAM來增強Linux服務器的安全性能。 
一、PAM入門必讀 
當LINUX服務器中的某個應用程序或服務需要使用PAM來進行驗證時,只要此應用程序或服務支持PAM驗證功能,就可以通過修改其相應的PAM配置文件,加放相應的驗證方式,當重新啓用些服務或應用程序時,PAM模塊就會通過其專用API來讀取它的配置文件,根據配置文件中的內容來提供相應的驗證功能。所有驗證功能都是通過一些庫文件來提供的。 
因此,在使用PAM之前,先掌握PAM配置文件的設置方法,瞭解一些常用的驗證模塊就顯得非常必要。 
當某個支持PAM驗證的應用程序啓動時,就會通過PAM的API讀取它的PAM配置文件,然後根據配置文件中驗證項指定的內容,再由API調用所需的驗證模塊來完成配置文件中指定的驗證任務。從這裏可以看出,要掌握PAM的使用,就必需瞭解配置文件的配置規則,以及各種驗證模塊的意義和作用。 
在這裏還要注意的是,一個Linux系統下的應用程序能夠使用PAM功能,最關鍵的是它已經將支持PAM功能的代碼集成到了原代碼當中。如果你能夠得到一個應用程序的原代碼,你也可以自行將支持PAM的功能代碼加入其中。但是,如果你得到的二進制文件不具有這些PAM功能代碼,那麼,此應用程序就不支持PAM驗證功能。查看應用程序是否具有PAM驗證功能,可以使用ldd命令查看其動態連接庫中有沒有libpam和libpam_misc,有就支持。 
1、設置PAM的配置文件 
  在RedHat企業Linux3系統中,每個支持PAM驗證的應用程序或服務,都有一個相應的PAM配置文件,存放在/etc/pam.d/目錄。要想這些配置文件有效,就必需將這些配置文件名字編寫進程序源代碼中。通常,這些配置文件的名字與其對應的應用程序的名字是一樣的。 
    要想設置這些配置文件,只需要通過VI或VIM來打開它們,然後添加或刪除其中的驗證項就可以。 
    打開/etc/pam.d/目錄下的任何一個配置文件,其中每行的驗證規則都使用如下所示的語法格式: 
    Type  Control-flag  Module-path  Module-arguments 
    其中每行代表一個獨立的驗證方式,每個配置文件可以由多種驗證規則相互疊加而成。驗證時PAM-API會按照從上往下的方式一一讀取這些驗證規則,並根據其中的控制標誌做出相應的動作。 
在編輯配置文件時一定要小心謹慎,由於規則的驗證是有上下順序之分的,因此你要小心確定某些危險的驗證規則處於配置文件中的正確位置。因爲一旦出錯,可能會導致系統的部分功能或整個系統不能訪問,這樣你就不得不重新恢復它們的備份。 
    要正常配置PAM配置文件,就應當瞭解配置文件方法格式中每列的所包括的內容,下面是這些列的簡短說明: 
(1)、Type列,主要用來指定需要驗證的類型。一共有以下四種驗證類型: 
1、 auth 驗證使用者身份,提示輸入帳號和密碼; 
2、 account 提供對帳戶的進一步驗證,例如驗證帳戶的此操作是否已經過期,權限多大,擁有此權限的時間期限是否已經過期等等; 
3、 password 提供對密碼的細緻控制,例如控制密碼的使用期限,重複輸入的次數,密碼鎖定後的解禁時限等等。 
4、 session 對每個會話進行跟蹤和記錄,記錄的內容包括登錄的用戶名及登錄的時間和次數等等。 
    (2)、Control-flag列,主要用來控制在驗證過程中動作和返回結果的方式。它有兩種類型的表達方式:簡單的就是使用一個簡單的關鍵字,複雜的可以使用方括號來嵌套控制標誌,並可在方括號中使用value=action的方式表達。 
簡單的關鍵字有四個: 
1、 required 
當使用此控制標誌時,當驗證失敗時仍然會繼續進行其下的驗證過程,它會返回一個錯誤信息,但是,由於它不會由於驗證失敗而停止繼續驗證過程,因此用戶不會知道是哪個規則項驗證失敗。 
2、 requisite 
此控制標誌與required的驗證方式大體相似,但是,只要某個規則項驗證失敗則立即結束整個驗證過程,並返回一個錯誤信息。使用此關鍵字可以防止一些通過暴力猜解密碼的攻擊,但是,由於它會返回信息給用戶,因此,它也有可能將系統的用戶結構信息透露給攻擊者。 
3、 sufficient 
只要有此控制標誌的一個規則項驗證成功,那麼PAM構架將會立即終止其後所有的驗證,並且不論其前面的required標誌的項沒有成功驗證,它依然將被忽略,然後驗證通過。 
4、 optional 
表明對驗證的成功或失敗都是可有可無的,所有的都會被忽略。(通常用於session類型) 
複雜的控制標誌能夠讓管理員可以指定在驗證過程中發生某種事件時可以執行的動作。這些控制標誌用方括號包括起來,並由一系列的value=action 所構成,每個值之間用空格分開。 
在新版PAM中,可供你選擇的value列表存在於/usr/include/security/_pam_types.h文件中。其中的內容包括:success,open_err,symbol_err,ervice_err,system_err,buf_err,perm_denied,auth_err,cred_insufficient,authinfo_unavail,user_unknown,maxtries,new_authtok_reqd,acct_expired,session_err,cred_unavail,cred_expired,cred_err,no_module_data,conv_err,authtok_err,authtok_recover_err,authtok_lock_busy,authtok_disable_aging,try_again,ignore,abort,authtok_expired,module_unknown,bad_item,conv_again,incomplete,和default。 
    action 可以是一個無符號的整數,當在某行驗證規則的控制標誌的value指定期一個無符號的整數時n,就表明由此行往下的n行驗證模塊將被直接跳過。 
Action還可以是下列所示的值: 
         ignore:設定此值後,指定的事件將會被忽略。 
bad :設定此值後,當發生指定的事時的返回值將被認爲是驗證模塊失敗。如果此驗證模塊是整個驗證堆疊中的第一個失敗的模塊, 它的狀態值將作爲整個堆疊的狀態。 
die:它的作用與bad 相同,但是,當設定此值的此類事件發生時,會終止整個驗證模塊的後續驗證工作,立即返回到應用程序。 
ok :設定此值可以用來覆蓋此行驗證規則前面已經返回了PAM_SUCCESS的所有值,但是如果前面有驗證規則返回了一個錯誤的值,那麼就不會被它覆蓋。 
done:它的作用與ok 相同,但是,當設定此值的此類事件發生時,會終止整個驗證模塊的後續驗證工作,立即返回到應用程序。 
reset :設定此值的作用是用來清除內存中原先的驗證模塊狀態,並重新開始下一組的驗證。 
    第三列是Module-path,用來爲要驗證的服務提供需要使用的驗證模塊。在Fedora Core 6系統中,當要引用的模塊處於/lib/security/或/lib64/security/目錄時,可以只輸入模塊的完整名稱;如果要引用的模塊不存在這兩個默認的保存目錄,就必需在模塊的完整名稱前加上完整的模塊路徑名。例如/usr/lib/security/。 
        第四列是Module-arguments,用來爲引用的模塊指定特殊的選項,多個選項之間可以通過空格隔開,還可在選項中使用“[ ]”來輸入嵌套的命令或字串,當選項超過一行時用“\”符號連接下一行。 
3、PAM中常用的驗證模塊說明 
    要掌握PAM的使用,我們還應當去了解一些常用的PAM驗證模塊的作用,畢竟PAM的具體驗證功能都是由這些可插入的驗證模塊來完成的。在RedHat企業Linux3系統中,默認的PAM驗證文件存在於/lib/security/或/lib64/security/目錄,它們都是以“.so”爲後綴的文件。 
    每個PAM驗證模塊的使用對象,總是與PAM的驗證類型相對應的。有些驗證模塊只針對某一種驗證方法,例如pam_access.so驗證模塊只與account驗證類型配套使用,而有些驗證模塊卻可以與所有的驗證類型一起使用,例如pam_unix.so驗證模塊。你在瞭解這些驗證模塊時,應當同時瞭解它們的所屬於驗證類別。 
    下面是一些常用的驗證模塊的簡要說明: 
(1)、pam_access驗證模塊 
pam_access驗證模塊一般與account驗證類型一同使用。它主要用於對訪問進入管理,提供基於登錄名、主機名或域名、公網IP地址或網絡號,以及非網絡登錄時的tty名稱的訪問控制。pam_access驗證模塊主要是根據/etc/security/access.conf配置文件中的內容,來進行相應的驗證工作的。如果access.conf文件不在缺省的/etc/security/目錄,你可以在其後使用accessfile參數指定自定義配置文件的絕對路徑。 
  /etc/security/access.conf配置文件中的每一行都由如下三個字段構成,中間用冒號隔開: 
  permission:users/groups:origins 
  permission(權限)字段可以用“+”,即允許訪問,“-”禁止訪問來表示相應的權限。 
  users/groups(用戶或組)字段可以是一個或幾個登錄名、組名及ALL(表示任何人)的一個清單。要區分哪個是用戶名,哪個是組名,可以將組名加入到一個括號中,例如(groups)。 
  origins(來源)字段可以是非網絡登錄時的tty名稱、主機名、域名(以“.”開始)、主機地址、網絡號(以“.”結束)、帶有子網掩碼的公網IP地址,以及ALL(表示任何主機)和LOCAL只要不包含“.”的所有字符)。還可以使用EXCEPT操作符來表示除…之外。 
(2)、pam_cracklib驗證模塊 
    pam_cracklib驗證模塊通常只與password驗證類型一起使用。這個驗證模塊可以通過插入password堆棧,爲特殊的應用提供可插入式密碼強度性檢測。它的工作方式就是先提示用戶輸入密碼,然後使用一個系統字典和一套規則來檢測輸入的密碼是否不能滿足強壯性要求。密碼的強度檢測分二次進行,第一次只是檢測密碼是否是提供的對比字典中的一部分,如果檢測結果是否定的,那麼就會提供一些附加的檢測來進一步檢測其強度,例如檢測新密碼中的字符佔舊密碼字符的比例,密碼的長度,所用字符大小寫狀況,以及是否使用了特殊字符等等。 
  由於pam_cracklib驗證模塊提供了細緻的密碼強度檢測,因此,當我們在使用時,必需爲它指定相應的額外檢測選項。這些選項包括: 
  debug:此選項表示將模塊信息寫入系統日誌 
  type=xxx:此選項用來修改缺省的密碼提示文本,例如,如果缺省提示輸入密碼的文本爲“New Passwork:”,那麼你就可以通過設置type=my password:來改變提示文本。   
retry=N:此選項定義用戶在重試輸入多少次密碼後,返回一個錯誤信息,然後不準繼續輸入。缺省是1次。 
  difok=N:此選項用來定義新密碼中必須有幾個字符要與舊密碼不同,如果新密碼中有1/2以上的字符與舊密碼不同時,該新密碼就會被接受。 
    difignore=N:此選項用來設定在difok之前收到多少個字符時,difok設置會被忽略,缺省爲23。 
  minlen=N:此選項用來設置新密碼的最小長度。 
   dcredit=N:此選項用來設定新密碼中可以包含數字的最大數目。 
  ucredit=N:此選項用來設定新密碼中可以包含的大寫字母的最大數目。 
   lcredit=N:此選項用來設定新密碼中可以包含的小寫字母的最大數目。 
  ocredit=N:此選項用來設定新密碼中可以包含的特殊字符的最大數目。 
    minclass=N:此選項用來規定新密碼中的字符類別的最小數目,字符一般有四種類別:數字、大寫字母、小寫字母,以及特殊字符。 
    use_authtok:在某個與密碼相關的驗證模塊後使用此選項,例如pam_unix.so驗證模塊,可以強迫此模塊不提示輸入密碼,而使用上面設置的另一種方式,例如pam_cracklib.so。 
    dictpath=/path/to/dict:指定cracklib目錄路徑。 
(3)、pam_limit驗證模塊 
pam_limits驗證模塊通常與session驗證類別一同使用。它主要用來限制用戶在會話過程中對系統資源的使用,即使UID=0的用戶也受它的限制。此模塊使用一個獨立的配置文件來設置對系統資源的限制情況,默認的配置文件是/etc/security/limits.conf,在使用中可以用conf選項來指定配置文件所在的位置。當你使用pam_limits驗證模塊時,先對此配置文件進行相應的設置總是一個不錯的選擇。 
    /etc/security/limits.conf配置文件的設置語法如下: 
    <domain> <type> <item> <value> 
配置文件語法格式中的“domain”列可以是用戶名、採用@group語法的組名,還可以用通配符“*”來表示任何用戶,以及使用“%”通配符來只限制maxlogins,並可以採用%group的語法格式。 
  配置文件語法格式中的“type”列有兩個值: 
  soft:用來設置對系統資源的軟限制,它允許用戶所使用的系統資源可以在設定的硬限制值的規定範圍來上下浮動。 
  hard:用來設置對系統資源的硬限制,這些硬限制由超級用戶設置,並由系統內核來執行。普通用戶對系統資源的使用率不能超過設置的硬限制設定值。 
    配置文件語法格式中的“item”和“value”是成對使用的,“item”表示某類具體的系 
統資源,而“value”就是“item”的值。在limits.conf配置文件中可以設置的系統資源有: 
  core:    核心文件的大小 (KB) 
  data:     最大的數據包大小(KB) 
  fsize:     最大的文件大小(KB) 
  memlock: 最大可用的內存空間(KB) 
  nofile:    最大可以打開的文件數量 
  rss:      最大的可駐留空間(KB) 
  stack:    最大的堆棧空間(KB) 
  cpu:      最大的CPU佔用時間(minutes) 
  nproc:    最大允許運行的進程數量 
  as:       地址空間限制(KB) 
  maxlogins: 用戶可以登錄到系統的最多次數,UID=0的用戶除外 
    priority:    優先運行的用戶進程(負值越高的進程優先) 
    sigpending: 最大數量的等待信號(Linux2.6及以上內核) 
    msqqueue:  POSIX信息隊列的最大可使用的內存(bytes)(Linux2.6及以上內核) 
    locks:      最大可鎖定文件的數目(Linux2.4及以上內核的系統) 
  上面這些“item”項目是一些對系統資源使用情況非常有用的,新版本的PAM中還新加入了其它一些項目,你可以通過它的幫助文檔得到它們的說明。需要注意的是,用戶的限制優先級要高於組的限制,如果你爲一個組設置了某種系統資源限制,但是其中的某個用戶設置了另一級別的系統資源限制,那麼,系統將會優先按用戶級別的限制處理。另外,如果無限制可以使用“-”號表示。 
  優先級高。 
(4)、pam_time驗證模塊 
pam_time驗證模塊通常與account驗證類型一起使用。它並不對用戶提供驗證服務,而是用來限制用戶在指定的日期、時間及終端線路上對系統或特定應用程序進行訪問。 
要正確使用Pam_time驗證模塊,必需有一個正確的/etc/security/time.conf相配套。此配置文件中每一行的語法格式爲: 
services;ttys;users;times 
services字段:表示應用PAM功能的服務名稱。 
ttys字段:應用此規則的終端名,可以“*”號表示任何終端,“!”表示非。 
users字段:應用此規則的用戶名單或網絡組名,可以“*”號表示任何用戶,“!”表示非。 
times字段:指定時間,通常使用日期/時間範圍的格式來表示。可以用星期幾英文單詞前兩個字母來表示具體的日期,例如MoTuSa就是指星期一星期二和星期六。注意:重複的日期將會被取消,比如MoMo表示任何一天都沒有。兩個字母的組合有: Mo、Tu、We、Th、Fr、Sa、Su、Wk、Wd、Al, Mo到Su分別指從星期一到星期天,Wk指每一天,Wd指週末,Al也指每一天,例如AlFr指除星期五外的每一天。 時間採用24小時制,即HHMM(時分)的形式。日期/時間範圍前可有“!”表表除此以外的所有日期/時間,用“-”連接指定的時間範圍,如果結束時間小於開始時間,就表明時間持續到第二天的結束時間,例如Al1800-0800就是指每天下午6點整到第二天的早晨8點整。 
(5)、pam_listfile驗證模塊 
pam_listfile驗證模塊通常與auth驗證類型一起使用。此模塊提供根據某個指定的文件來允許或禁止用戶訪問某個應用程序或服務的功能,這些被指定的文件必需事先存在,然後通過file參數來指定該文件。pam_listfile驗證模塊可以根據用戶名、tty、rhost、ruser、用戶組、使用的shell來對用戶進行訪問控制。 
Pam_listfile驗證模塊可以使用的選項有: 
item=[tty|user|rhost|ruser|group|shell]:設置訪問控制的對象類型。 
sense=allow|deny:用來指定當在保存“item”對象的文件中找不到item指定的對象時的動作方式,如果在文件中找不到相應的對象,則執行相反的動作。 
onerr=succeed|fail:用來指定當某類事件(如無法打開配置文件)發生時的返回值。 
file=filename:指定保存有“item”對象的文件位置。 
apply=[user|@group]:用指定使用非用戶和組類別時,這些規則所適用的對象。當item=[user|ruser|group]時,這個選項沒有任何意義,只有當item=[tty|rhost|shell]時纔有意思。 
(6)、pam_unix驗證模塊 
pam_unix提供基於/etc/passwd 和 /etc/shadow文件的類UNIX風格的認證。它適用所有的驗證類型,包括:auth、account、 password、session。 
當pam_unix驗證模塊與auth驗證類型一起使用時,此模塊可以使用的選項有debug、audit、use_first_pass、try_first_pass、nullok和nodelay,主要功能是驗證用戶密碼的有效性,在缺省情況下(即不帶任何參數時),該模塊的主要功能是禁止密碼爲空的用戶提供服務; 
在作爲account類型使用時,此時該模塊可識別的參數有debug、audit,該模塊主要執行建立用戶帳號和密碼狀態的任務,然後執行提示用戶修改密碼,用戶採用新密碼後才提供服務之類的任務; 
在作爲password類型使用時,此時該模塊可識別的參數有debug、 audit、 nullok;、not_set_pass、use_authtok、try_first_pass、use_first_pass、md5、bigcrypt、shadow、nis、 
remember,該模塊完成讓用戶更改密碼的任務; 
在作爲session類型使用時,此時該模塊沒有可識別的參數,該模塊僅僅完成記錄用戶名和服務名到日誌文件的工作。 
Pam_unix驗證模塊可以使用的選項有: 
debug:將調試信息寫入系統日誌,當pam_unix驗證模塊與所有驗證類別使用時都有效。 
audit:提供比debug更多診斷調試,它只有當pam_unix驗證模塊與 auth、account及password驗證類型使用時有效。 
nullok:默認情況下,如果密碼爲空,那麼就不允許用戶訪某項服務,而使用此項後將則覆蓋這個默認動作。它只有當pam_unix驗證模塊與 auth、和password驗證類型使用時有效。 
nodelay:當用戶驗證失敗後,系統在給出錯誤信息時會有一個延遲,默認爲2秒鐘。當使用此選項後,將取消這個延遲。它只有當pam_unix驗證模塊與 auth驗證類型使用時有效。 
try_first_pass:當pam_unix驗證模塊與auth驗證類型一起使用時,使用該選項將在提示用戶輸入密碼前,嘗試使用以往的密碼驗證方式來對用戶進行驗證。而當pam_unix驗證模塊與password驗證類型一起使用時,該選項主要用來防止用戶新設定的密碼與以前的舊密碼相同。 
use_first_pass:當pam_unix驗證模塊與auth驗證類型一起使用時,使用該選項將在提示用戶輸入密碼前,直接使用以往的密碼驗證方式來對用戶進行驗證。而當pam_unix驗證模塊與password驗證類型一起使用時,該選項主要用來防止用戶新設定的密碼與前面password提供的密碼相同。 
use_authok:當用戶修改時,使用此選項強制用戶使用前面堆疊驗證模塊提供的密碼,例如由pam_cracklib驗證模塊提供的新密碼。當pam_unix驗證模塊與password驗證類型一起使用時有效。 
md5:採用md5對用戶密碼進行加密, 當pam_unix驗證模塊與password驗證類型一起使用時有效。 
shadow:使用用shadow密碼,當pam_unix驗證模塊與password驗證類型一起使用時有效。 
sha256:使用此選項,當下次修改密碼時將用SHA256算法加密,如果SHA256的libcrypt不存在,就會重新使用MD5加密密碼。Sha512與此選項相同,只是加密強大不同而已。當pam_unix驗證模塊與password驗證類型一起使用時有效。 
rounds=n:用來指定使用SHA256和SHA512算法加密密碼時重複哈希算法的次數。當pam_unix驗證模塊與password驗證類型一起使用時有效。 
remember=n:使用此選項將會將n個使用過的舊密碼,以MD5的方式加密後保存到/etc/security/opasswd文件中。當pam_unix驗證模塊與password驗證類型一起使用時有效。 
(7)、pam_deny驗證模塊可以用來禁止所有的訪問,當你設置PAM配置文件時,爲了安全,在開始的行可以使用它來禁止所有的訪問,以減少錯誤配置引起的安全風險。而pam_permit驗證模塊卻總是允許所有的訪問,你要謹慎的使用此驗證模塊。它們都適用於所有的驗證類型。 
(8)、pam_rootok驗證模塊允許/etc/pam.d/su中的用戶不需要任何驗證就可以登錄系統。因此,你應當小心設置/etc/pam.d/su文件,並且在使用時要與pam_wheel驗證模塊一同使用,以保證root權限只允許在pam_wheel的限制中進行。它只適用於auth驗證類型。 
(9)、pam_security驗證模塊只對root用戶有影響。當root用戶登錄時,pam_security驗證模塊會參考/etc/securetty目錄中的控制終端列表,來保證root用戶不會從不安全的終端登錄。它一般與auth驗證類型一現使用。 
(10)、pam_nologin驗證模塊,如果/etc/nologin文件存在,此模塊將禁止所有的登錄。它一般與auth和account驗證類型一同使用。 
(11)、pam_echo驗證模塊用來給用戶顯示通過file選項指定的文件中的內容,它適用於所有的驗證類型。pam_motd驗證模塊允許將/etc/motd文件中的內容顯示給用戶,它只適用於session驗證類型。 
(12)、pam_lastlog顯示用戶上次登錄的日期和時間,它主要通過讀取/var/log/lastlog文件來顯示。它只適用與session驗證類型。 
(13)、pam_warn將剛登錄的信息記錄到系統日誌當中,它一般與auth和password驗證類型一同使用。 
(15)、pam_wheel驗證模塊,當使用此驗證模塊後,只有加入到了一個wheel group中的的根用戶,並且提交的密碼有效,才能訪問指定的服務或系統。將它與pam_rootok一同使用能增加對根用戶的限制。它只適用於auth和account驗證類型。 
    在/lib/security/或/lib64/security/目錄中還有許多沒有在上面列出的驗證模塊,由於它們的使用頻率不高,加上文章篇幅的限制,就不再在此對它們做相應的說明,大家可以參考PAM管理員指南來得到它們的詳細說明。 


sag-pam_cracklib.html 



    如何在Linux系統中限制密碼長度的同時對密碼的複雜程度也進行管理,最近發現有人的密碼符合長度規則,但是卻很簡單很容易被猜出來,查了相關資料後發現了PAM中的pam_cracklib模塊就是用來做密碼複雜度檢測的。 

        先簡單的介紹一下PAM,PAM(Pluggable Authentication Modules )是由Sun提出的一種認證機制。它通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程序,同時也便於向系統中添加新的認證手段。 PAM模塊是一種嵌入式模塊,修改後即時生效。 

        pam的重要文件如下: 

         /usr/lib/libpam.so.*         ## PAM核心庫 

         /etc/pam.conf            ## PAM配置文件 

         /etc/pam.d/*             ## PAM各個模塊的配置文件 

         /lib/security/pam_*.so     ## 可動態加載的PAM模塊 

         PAM配置文件的每一行的格式:Module-type   Control-flag   Module-path   Arguments 

                                                          模塊類型         控制字符      模塊路徑         模塊參數 

         Module-type: 

                   auth:確定有關用戶認證的兩方面。第一,他確認用戶就是他們自己,這通過應用程序提示用戶輸入密碼 或者其他正式身份的辦法。第二,這類模塊會賦予成員資格。 

                   account:處理非認證級的賬號管理。典型的用法是基於一天的不同時間來限制、允許訪問某服務。限制 當前可用的系統資源(最大用戶數)或者限制特定用戶—root只能從控制檯登陸。 

                   session:一系列有關動作,只在用戶得到/失去服務時要做的事。這包括記錄用戶的登錄/退出、掛載必要 的目錄等。 

                   password:設置密碼。 


          Control-flag: 

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

                   requisite:與required類似,該模塊必須返回成功才能通過認證,但是一旦該模塊返回失敗,將不再執行   同一stack內的任何模塊,而是直接將控制權返回給應用程序。是一個必要條件。注:Solaris不支持。 

                   sufficient:表明本模塊返回成功已經足以通過身份認證的要求,不必再執行同一stack內的其它模塊,但是 如果本模塊返回失敗的話可以忽略。可以認爲是一個充分條件。 

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

                   include,從字面就知道什麼意思了。包含另外一個配置文件。 


           Module-path: 

                   Debian的PAM module存放目錄默認是在/lib/security。在各個模塊的配置文件裏,不用寫絕對路徑,直接   寫這個默認目錄下面的模塊名就可以了。當然,也可以寫絕對路徑。 


           Arguments: 

                  各個模塊的參數都不一樣,具體的要開發者的man手冊。無效參數不會對結果有影響,但是會被日誌記錄 下來。首先,看看/lib/security有沒有這個模塊,再:man 模塊名 


          下面開始介紹cracklib模塊 

                   pam_cracklib是一個PAM模塊,用來檢查密碼是否違反密碼字典,這個驗證模塊可以通過插入password堆 棧,爲特殊的應用提供可插入式密碼強度性檢測。 它的工作方式就是先提示用戶輸入密碼,然後使用一個系統           字典和一套規則來檢測輸入的密碼是否不能滿足強壯性要求。密碼的強度檢測分二次進行,第一次只是檢測密             碼是否是提供的對比字典中的一部分,如果檢測結果是否定的,那麼就會提供一些附加的檢測來進一步檢測其             強度,例如檢測新密碼中的字符佔舊密碼字符的比例,密碼的長度,所用字符大小寫狀況,以及是否使用了特             殊字符等等。(libpam-cracklib) 

          下面是cracklib模塊的一些參數: 

           debug:將debug信息寫入syslog 

           type=XXX:提示輸入密碼的文本內容。默認是"New UNIX password: " and "Retype UNIX password: ",可自定 

           retry=N:用戶最多可以幾次輸入密碼後報錯。默認是1次。 

           difok=N:新密碼有幾個字符不能和舊密碼相同,默認是5個。另外如果新密碼有1/2的字符於舊不同,也會被接受。 

           diginore=N:默認當新密碼有23個字符時,difok選項會被忽略。 

           minlen=N:最小密碼長度。 

           dcredit=N:當N>=0時,N代表新密碼最多可以有多少個阿拉伯數字。當N<0時,N代表新密碼最少要有多少個阿拉伯數字。 

            ucredit=N:和dcredit差不多,但是這裏說的是大寫字母。 

            lcredit=N:和dcredit差不多,但是這裏說的是小寫字母。 

            ocredit=N:和dcredit差不多,但是這裏說的是特殊字符。 

            use_authtok:在某個與密碼相關的驗證模塊後使用此選項,例如pam_unix.so驗證模塊 

            pam_cracklib 模塊式PAM配置接口的基本模塊,在Debian系統中配置文件是 /etc/pam.d/common-password 但是在Redhat系統中配置文件是 /etc/pam.d/system-auth 他的配置看起來像以下這樣: 

            password required pam_cracklib.so retry=3 minlen=6 difok=3 

            password required pam_unix.so md5 use_authtok 

            第一行是 pam_cracklib模塊和設置的幾個模塊參數 

            第二行是 pam_unix模塊,MD5表示採用MD5加密 

            pam_cracklib可以記錄用戶使用的歷史密碼,並且不允許用戶重複使用舊的密碼,實際上存儲用戶舊密碼的是通過pam_unix模塊實現的。 

           第一步是建立一個空文件用來存儲舊密碼/etc/security/opasswd,如果你沒有建立文件卻使用了歷史密碼記錄功能的話,所有的密碼更新都會失敗,因爲pam_unix模塊會報錯。 

          opasswd就像/etc/shadow文件,因爲他記錄用戶密碼的哈希 

          touch /etc/security/opasswd 

          chown root:root /etc/security/opasswd 

          chmod 600 /etc/security/opasswd 

           一旦建立了opasswd文件,就可以在pam_unix模塊後面加上參數remember=N來開始記錄舊密碼,remember參數記錄你想記錄多少舊密碼,他的最大值是400,如果你設置的值超過400會當做400來對待,例如: 

          password required pam_cracklib.so retry=3 minlen=12 difok=4 

          password required pam_unix.so md5 remember=12 use_authtok 

          opasswd文件內容格式如下: 

          hal:1000:<n>:<hash1>,<hash2>,...,<hashn> 

          以‘:’分割,第一列是用戶名,第二列是用戶ID,第三列是目前記錄了該用戶多少箇舊密碼,hashN是每次密碼的MD5值,opasswd在某些系統安裝PAM模塊時會自動建立。 

         密碼字典檢查 

                pam_cracklib 也可以檢查用戶設置的密碼是不是違反系統內部的密碼字典,在Debian系統中pam_cracklib的         密碼字典在/var/cache/cracklib目錄下,而且每天晚上update-cracklib腳本會自動的rebuild密碼字典。 

           /etc/login.defs 文件設置密碼過期時間等一系列參數,注意login.defs中設置的參數只有是用系統的useradd程序新建的一個用戶時纔會有login.defs中設置的屬性,如果是用其他機器新建的用戶,則沒有以上屬性,不過可以試用chage命令手動添加相關屬性。 

         chage參數如下: 

         -m 密碼可更改的最小天數。 爲零時代表任何時候都可以更改密碼。 

         -M 密碼保持有效的最大天數。 

         -W 用戶密碼到期前,提前收到警告信息的天數。 

         -E 帳號到期的日期。過了這天,此帳號將不可用。 

         -d 上一次更改的日期 

         -i 停滯時期。如果一個密碼已過期這些天,那麼此帳號將不可用。 

         -l 例出當前的設置。由非特權用戶來確定他們的密碼或帳號何時過期。 




       在密碼管理方面one time password(OTP)也很有效果,動態密碼管理,有興趣的同學可以研究一下。 



Linux ssh多次登錄失敗鎖定用戶(轉)Submitted by admin on 2012, January 31, 10:46 AM. linux 

1、修改配置文件 

# vi /etc/pam.d/system-auth 
增加 
auth required pam_tally.so deny=3(deny=N爲登錄失敗N次後鎖定用戶) 

2、在客戶端測試 

# ssh [email protected](user爲服務器端的用戶,192.168.1.1爲主機IP地址) 

3、3次後再次測試並用正確密碼登錄會發現仍不能登錄 

4、解除鎖定方法 

在服務器端以root用戶登錄 
執行命令: 
# faillog –a ////查看用戶登錄錯誤次數 

如果超過三次的話,用戶不能登錄並且此後登錄用戶錯誤登錄次數還是會增加。 
在登錄錯誤次數不滿三次時,登錄成功後,則這個用戶登錄錯誤值將清零,退出後重新ssh登錄將採用新的計數。 

# faillog -u user –r ////清空指定用戶user的錯誤登錄次數 
# faillog –r ////清空所有用戶錯誤登錄次數 

------------------------------------ 
測試系統 :Asianux 3.0 sp2 x86 
kernel : 2.6.18-128.7 
pam版本:pam-0.99.6.2-4.1AXS3 
操作方法: 

一、在字符終端下,實現某一用戶連續錯誤登陸N次後,就鎖定該用戶X分鐘。 
執行 vi /etc/pam.d/login 
在#%PAM-1.0 下新起一行,加入 

auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=10 

如果不限制root用戶,則可以寫成 

auth required pam_tally2.so deny=3 unlock_time=5 
[img][/img]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章