在 Linux 中建立密碼策略

再一次問好! 新課程組的課程明天開始 《Linux 管理員》,在這方面,我們正在就此主題發表一篇有用的文章。

在 Linux 中建立密碼策略

在之前的教程中我們已經告訴你如何使用 pam_cracklib讓系統上的密碼更加複雜 紅帽6 或 CentOS。 在紅帽 7 中 pam_pwquality 取代 cracklib 作為一個 pam 用於檢查密碼的預設模組。 模組 pam_pwquality 也支援 Ubuntu 和 CentOS 以及許多其他作業系統。 此模組可以輕鬆建立密碼策略,以確保使用者接受您的密碼強度標準。

長期以來,密碼的常見做法是強制使用者使用大寫、小寫、數字或其他符號。 這些密碼複雜性的基本規則在過去十年中得到了廣泛推廣。 關於這是否是好的做法已經有很多討論。 反對設置如此複雜的條件的主要論點是用戶將密碼寫在紙上並不安全地儲存它們。

另一項最近受到質疑的政策強制使用者每 x 天更改一次密碼。 有一些研究顯示這也不利於安全。

關於這些討論的主題已經寫了許多文章,證實了一種觀點或另一種觀點。 但這不是我們在本文中要討論的內容。 本文將討論如何正確設定密碼複雜性而不是管理安全性原則。

密碼策略設定

您將在下面看到密碼原則選項以及每個選項的簡要說明。 其中許多與模組中的參數類似 cracklib。 這種方法可以更輕鬆地從舊系統移植您的策略。

  • 迪福克 – 新密碼中不應出現在舊密碼中的字元數。 (預設 5)
  • 民倫 – 最小密碼長度。 (預設 9)
  • 優信 – 使用大寫字元的最大學分(如果參數 > 0),或所需的最小大寫字元數(如果參數 < 0)。 預設值為 1。
  • 信用證 — 使用小寫字元的最大學分(如果參數 > 0),或所需的最小小寫字元數(如果參數 < 0)。 預設值為 1。
  • 信用證 — 使用數字的最大學分數(如果參數 > 0),或所需的最小數字數(如果參數 < 0)。 預設值為 1。
  • 信用證 — 使用其他符號的最大學分數(如果參數 > 0),或所需的最小其他符號數(如果參數 < 0)。 預設值為 1。
  • 小班 – 設定所需的班級數量。 類別包括上述參數(大寫字元、小寫字元、數字、其他字元)。 預設值為 0。
  • 最大重複次數 – 密碼中字元可以重複的最大次數。 預設值為 0。
  • 最大類重複次數 — 一類中連續字元的最大數量。 預設值為 0。
  • 地理檢查 – 檢查密碼是否包含使用者 GECOS 字串中的任何單字。 (使用者訊息,即真實姓名、位置等)預設為 0(關閉)。
  • 字典路徑 – 讓我們來看看cracklib 字典。
  • 髒話 – 密碼中禁止使用空格分隔的單字(公司名稱、單字「密碼」等)。

如果貸款的概念聽起來很奇怪,沒關係,這很正常。 我們將在下面的部分中詳細討論這一點。

密碼策略配置

在開始編輯設定檔之前,最好提前寫下基本密碼策略。 例如,我們將使用以下難度規則:

  • 密碼的最小長度必須為 15 個字元。
  • 密碼中相同的字元不應重複兩次以上。
  • 密碼中的字元類別最多可以重複四次。
  • 密碼必須包含每個類別的字元。
  • 新密碼與舊密碼相比必須有 5 個新字元。
  • 啟用 GECOS 檢查。
  • 禁止使用「password、pass、word、putorius」等字詞

現在我們已經制定了策略,我們可以編輯文件 /etc/security/pwquality.conf增加密碼複雜度要求。 下面是一個帶有註釋的範例文件,以便更好地理解。

# Make sure 5 characters in new password are new compared to old password
difok = 5
# Set the minimum length acceptable for new passwords
minlen = 15
# Require at least 2 digits
dcredit = -2
# Require at least 2 upper case letters
ucredit = -2
# Require at least 2 lower case letters
lcredit = -2
# Require at least 2 special characters (non-alphanumeric)
ocredit = -2
# Require a character from every class (upper, lower, digit, other)
minclass = 4
# Only allow each character to be repeated twice, avoid things like LLL
maxrepeat = 2
# Only allow a class to be repeated 4 times
maxclassrepeat = 4
# Check user information (Real name, etc) to ensure it is not used in password
gecoscheck = 1
# Leave default dictionary path
dictpath =
# Forbid the following words in passwords
badwords = password pass word putorius

您可能已經注意到,我們文件中的一些參數是多餘的。 例如,參數 minclass 是多餘的,因為我們已經使用了使用字段的類別中的至少兩個字符 [u,l,d,o]credit。 我們不能使用的單字清單也是多餘的,因為我們禁止任何類別重複 4 次(清單中的所有單字都以小寫字元書寫)。 我提供這些選項只是為了示範如何使用它們來配置您的密碼原則。
建立策略後,您可以強制使用者在下次登入時變更密碼。 系統.

您可能已經註意到的另一個奇怪的事情是字段 [u,l,d,o]credit 包含負數。 這是因為大於或等於 0 的數字將表示您在密碼中使用了該字元。 如果該欄位包含負數,則表示需要一定數量。

什麼是貸款?

我稱它們為貸款,因為這盡可能準確地傳達了它們的目的。 如果參數值大於 0,則在密碼長度中加入等於「x」的「字元積分」數。 例如,如果所有參數 (u,l,d,o)credit 設定為 1 並且所需的密碼長度為 6,那麼您將需要 6 個字元來滿足長度要求,因為每個大寫、小寫、數字或其他字元都會給您一個積分。

如果你安裝 dcredit 在 2 處,理論上您可以使用 9 個字元長的密碼並獲得 2 個數字字元積分,然後密碼長度可能已經是 10。

看這個例子。 我將密碼長度設為 13,將 dcredit 設定為 2,其他所有設定為 0。

$ pwscore
 Thisistwelve
 Password quality check failed:
  The password is shorter than 13 characters

$ pwscore
 Th1sistwelve
 18

我的第一次檢查失敗,因為密碼長度少於 13 個字元。 下一次,我將字母“I”更改為數字“1”,並獲得了兩個數字積分,這使得密碼等於 13。

密碼測試

libpwquality 提供文章中所描述的功能。 它還附帶一個程序 pwscore,旨在檢查密碼複雜度。 我們上面用它來檢查貸款。
效用 pwscore 讀取自 標準輸入。 只需執行該實用程式並寫入您的密碼,它就會顯示錯誤或 0 到 100 之間的值。

密碼品質分數與參數有關 minlen 在設定檔中。 一般來說,低於50分的被認為是“普通密碼”,高於XNUMX分的被認為是“強密碼”。 任何通過品質檢查的密碼(尤其是強制驗證) cracklib) 必須能夠承受字典攻擊,且密碼的設定分數高於 50 minlen 即使預設情況下 brute force 攻擊。

結論

調整 pwquality – 與使用的不便相比,它簡單又容易 cracklib 直接文件編輯 pam。 在本指南中,我們介紹了在 Red Hat 7、CentOS 7 甚至 Ubuntu 系統上設定密碼原則時所需的一切。 我們也討論了貸款的概念,但很少有人詳細討論這個概念,因此對於那些以前沒有遇到過這個話題的人來說,這個話題常常不清楚。

來源:

pwquality 手冊頁
pam_pwquality 手冊頁
pwscore 手冊頁

相關鏈接:

選擇安全密碼 – Bruce Schneier
Lorrie Faith Cranor 討論她在卡內基美隆大學的密碼研究
關於熵的臭名昭著的 xkcd 漫畫

來源: www.habr.com

添加評論