剛剛看到 google 提示今天是世界密碼日,當下決定來發篇跟密碼相關的網誌。所以翻出之前在搞伺服器時留下來的筆記,筆記內容 IT 也貢獻了不少,不過內容雜亂無序,希望最後整理完的時候今天還沒有過 XD
這篇要做事情有二:
- 設定密碼複雜度
- 強迫使用者登入更換密碼
世界密碼日(圖片來源: 今日頭條)
設定密碼複雜度
你知道每年五月的第一個星期四是世界密碼日嗎?很好,我也不知道,直到今天才知道 XD 反正這個節日就是提醒你關心下自己的密碼是否安全。
根據 Microsoft 的密碼原則建議可以朝兩個方向強化密碼強度:
-
密碼複雜度:
設定密碼規則,組成應包含大寫、小寫、數字、特殊符號跟最小長度。像我們公司 AD 帳號就密碼長度至少 15 字元以上,且要求至少包含數字、大寫、小寫、特殊符號。WTF…密碼越來越長了啦…。 -
更換密碼天數:
設定幾天後強制使用者換密碼,如 90 天一換。
Step1、安裝套件
在 Ubuntu 中密碼強度檢查的功能,是透過 libpam-pwquality
這個套件來強制設定密碼的最低複雜度,以避免弱密碼的出現。所以一開始需先安裝該套件:
1 |
|
Step2、設定密碼複雜度
安裝完後,編輯 /etc/pam.d/common-password
設定檔來設定密碼複雜度
1 |
|
找到以下這一行 pam_pwquality.so 的設定值:
1 |
|
我這邊直接把它改成:
1 |
|
其中:
-
retry=3
代表輸入密碼時最多嘗試次數,當密碼輸入超過3
次就會產生錯誤。 -
minlen=15
設定最短的密碼長度為15
。 -
maxrepeat=3
密碼中相同的字元最多只能連續出現3
個,若超過則密碼就會被拒用,例如:maxrepeat=3
,表示不接受pwwwwd
為密碼。如果設為0
,則不檢查。 -
difok=4
新密碼中必須有4
個字元要與舊密碼不同。若設定為0
則不檢查,只要新舊密碼不要完全一樣即可。 ucredit=-1
、lcredit=-1
、dcredit=-1
、ocredit=-1
這邊就是密碼複雜度的主要控制部分。嚴格來說,前面的minlen
並不完全是密碼最小長度,而是密碼最少應得貢獻值。貢獻值的計算是每個字元得1
分,其中若字元為特定類別,會有額外貢獻,但這些貢獻會有上限的,舉例來說:-
ucredit=3
、lcredit=2
、dcredit=1
、ocredit=0
ucredit、lcredit、dcredit、ocredit 分別對應到大寫、小寫、數字、特殊符號四個類別,其值則為其類別貢獻值上限。舉例來說,一密碼為
$$$$$Pwd012
,其長度為11
,其中包含1
個大寫、2
個小寫、3
個數字、4
個特殊符號,但因數字貢獻值上限為1
,特殊符號不計算貢獻值,因此最終貢獻值為 $11+1+2+1+0=15$。因最終貢獻值等於最低貢獻值15
,故雖長度不及15
,但仍是符合所設定的複雜度。 -
ucredit=0
、lcredit=0
、dcredit=0
、ocredit=0
這個例子就是所有類別都不算額外貢獻,直接看密碼長度。 -
ucredit=-1
、lcredit=-1
、dcredit=-1
、ocredit=-1
如果覺得計算貢獻值太複雜,則可以用負數直接指定該類別所想要的數量。以這個例子來說,就是密碼中必須包含大寫、小寫、數字、特殊符號各一個字元。
-
-
reject_username
拒絕包含正、反向的 username。 enforce_for_root
設定 root 管理者亦需遵守密碼規定。說實話管理者往往是最不遵守密碼規定的 XD
Step3、禁止使用過往密碼
另一個討厭常見的功能是禁止使用過往用過密碼,這功能一樣透過編輯 /etc/pam.d/common-password
,找到以下這一行 pam_unix.so 的設定值:
1 |
|
在尾端加上 remember=3
,表不與前三次密碼相同:
1 |
|
設定更換密碼天數
強化密碼強度的另一個方向則是設定密碼有效期限,迫使使用者定期更新密碼。
Step1、設定密碼有效期限
可透過編輯 /etc/login.defs
設定密碼有效期限:
1 |
|
其中
PASS_MAX_DAYS
:密碼效期,以天計算。PASS_MIN_DAYS
:兩次密碼更換至少間隔天數。PASS_MIN_LEN
:密碼最小長度。PASS_WARN_AGE
:密碼到期前幾天通知使用者。
若時間的變動超過 PASS_MAX_DAYS
,則登入時會要求使用者更新密碼並遵循新的密碼規則。但必須注意的是,這裡設定只會套用在之後新建的帳號。若要修改使現有使用者,需另外使用 chage
指令來進行變更。
Step2、設定現有使用者密碼有效期限
剛剛的設定只會套用在新使用者身上,但對於現有使用者於要額外指令變更:
1 |
|
安裝完後,使用指令來更新天數設定:
1 |
|
強迫使用者登入更換密碼
常見情境是我們生成亂數密碼給使用者,然後請使用者第一次登入時修改密碼,或是當我更新密碼複雜度時,請舊有使用者改密碼遵循新的密碼規則。這功能可以用剛剛的 chage
來達成:
1 |
|
這樣會直接把它的到期日期設定成 1970/01/01,強迫它過期。
參考資料
- (2022/03/08)。密碼原則建議。檢自 Microsoft Docs (2022-05-05)。
- 只說區塊鏈 (2020-05-13)。世界密碼日,零極為網絡安全保駕護航!。檢自 今日頭條 (2022-05-05)。
- Chia-An Lee (2021-08-14)。Linux 上密碼相關設定。檢自 Chia-An Lee (2022-05-05)。
- James Kiarie(2020-08-12)。How to Enforce Password Policies in Linux (Ubuntu / CentOS)。檢自 LinuxTechi (2019-01-04)。
- Linux 強制密碼最低複雜度 pam_pwquality 設定教學與範例。檢自 Office 指南 (2022-05-05)。
- admin 。UNIX / Linux : how to force user to change their password on next login after password has reset。檢自 The Geek Diary (2022-05-05)。
- LinuxSysAdmin (2016-02-25)。Linux Password policy – /etc/login.defs No change for existing users。檢自 Linux SysAdmin (2022-05-05)。
- Sk (2016-03-01)。How To Set Password Policies In Linux。檢自 OSTechNix (2022-05-05)。
- Sk (2019-05-09)。如何設定 Linux 系統的密碼策略。檢自 IT人 (2022-05-05)。
- osc_v1ao43h5 (2020-12-16)。Linux 系統密碼策略設定。檢自 MdEditor (2022-05-05)。
- chage(1): change user password expiry info。檢自 Linux man page (2022-05-05)。
更新紀錄
最後更新日期:2022-05-06
- 2022-05-06 發布
- 2022-05-05 完稿
- 2022-05-05 起稿