Linux賬號密碼安全運維

2023-10-23 21:03:09

前言

隨著雲端計算廠商的興起,雲資源如ECS不再只有企業或者公司才會使用,普通人也可以自己買一臺ECS來搭建自己的應用或者網站。雖然雲端計算廠商幫我們做了很多安全相關的工作,但並不代表我們的機器資源就絕對是安全的。

要知道有很多事情是雲端計算廠商不能為我們做的,就比如賬號密碼的安全策略設定,而賬號密碼的安全又是Linux安全中的第一道安全鎖,我們必須重視起來。

比如一個具有公網IP的伺服器,我們可以使用Linux連線工具或者ssh在本地進行連線,如果密碼太簡單並且沒有錯誤次數限制,我們完全可以暴力破解出來,這屬於【高危】漏洞。

賬號密碼策略

檢視當前使用者的賬號密碼策略

-- 輸入指令
chage -l root

-- 返回結果
Last password change                                  : Jun 14, 2022
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

-- 翻譯過來:
最近一次密碼修改時間 : 6月 14, 2022
密碼過期時間 :從不過期
密碼失效時間 :從不
帳戶過期時間 :從不
兩次改變密碼之間相距的最小天數 :任何時候都可以改
兩次改變密碼之間相距的最大天數 :永遠不需要改
在密碼過期之前警告的天數 :7

這種賬號肯定是有風險的,尤其還是root賬戶,一旦被破解,那這臺Linux伺服器基本上涼涼。

1. 設定密碼失效時間【一定要設定】

設定密碼失效時間,強制定期修改密碼,減少密碼被洩漏和猜測風險,使用非密碼登陸方式(如金鑰對)請忽略此項。

/etc/login.defs 中將 PASS_MAX_DAYS 引數設定為 60-180之間,如:

--兩次改變密碼之間相距的最大天數,密碼有效最大天數
PASS_MAX_DAYS 90  

注意:以上只對之後新增的使用者有效,如果要修改已存在的使用者密碼規則,需要使用chage命令

2. 設定密碼修改最小間隔時間【一定要設定】

設定密碼修改最小間隔時間,限制密碼更改過於頻繁

/etc/login.defs 中將 PASS_MIN_DAYS 引數設定為7-14之間,建議為7:

--兩次改變密碼之間相距的最小天數,為零時代表任何時候都可以更改密碼
PASS_MIN_DAYS 7

注意:以上只對之後新增的使用者有效,如果要修改已存在的使用者密碼規則,需要使用chage命令

3. 在到期前設定警告的天數【建議設定】

裝置警告的天數,可以讓我們備份舊密碼、準備新密碼

/etc/login.defs 中將 PASS_WARN_AGE 引數設定為7天

PASS_WARN_AGE 7

注意:以上只對之後新增的使用者有效,如果要修改已存在的使用者密碼規則,需要使用chage命令

4. 設定密碼複雜度【一定要設定】

簡單的密碼安全性很差,一般建議密碼長度大於8,包括大小寫字母、數位、特殊字元等

/etc/pam.d/common-password 新增如下內容(如果沒有該檔案自己建立一個):

# /etc/pam.d/common-password - password-related modules common to all services

password        requisite       pam_cracklib.so retry=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
password        [success=1 default=ignore]      pam_unix.so sha512
password        requisite       pam_deny.so
password        required        pam_permit.so
  • 「minlen=8」表示密碼長度至少為8個字元。
  • 「ucredit=-1」表示密碼中至少包含一個大寫字母。
  • 「lcredit=-1」表示密碼中至少包含一個小寫字母。
  • 「dcredit=-1」表示密碼中至少包含一個數位。
  • 「ocredit=-1」表示密碼中至少包含一個特殊字元。

注意:以上只對之後新增的使用者有效,如果要修改已存在的使用者密碼規則,需要使用chage命令

5. 檢查密碼重用是否受限制【一定要設定】

強制使用者不重用最近使用的密碼,降低密碼猜測攻擊風險

/etc/pam.d/password-auth/etc/pam.d/system-auth中password sufficient pam_unix.so 這行的末尾設定remember引數為5-24之間,原來的內容不用更改,只在末尾加了remember=5。

6. 設定SSH空閒超時退出時間【建議設定】

設定SSH空閒超時退出時間,可降低未授權使用者存取其他使用者ssh對談的風險

編輯/etc/ssh/sshd_config,將ClientAliveInterval 設定為300到900,即5-15分鐘,將ClientAliveCountMax設定為0-3之間。

ClientAliveInterval 600
ClientAliveCountMax 2

7. 賬戶鎖定策略【一定要設定】

策略要求:

  • 設定鎖定的閾值為5次
  • 鎖定時間為5分鐘即300秒
  • 必須所有使用者都受限,包括root

修改組態檔/etc/pam.d/system-auth-ac/etc/pam.d/password-auth-ac

  • /etc/pam.d/system-auth-ac檔案替換如下:
auth        required      pam_env.so
auth        required      pam_tally2.so even_deny_root deny=5 unlock_time=60
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so
 
account     required      pam_unix.so
account     required      pam_tally2.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so
  • /etc/pam.d/password-auth-ac檔案替換如下:
auth        required      pam_env.so
auth        required      pam_tally2.so deny=5 unlock_time=60
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so
 
account     required      pam_unix.so
account     required      pam_tally2.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so
  • 檢視使用者鎖定狀態
-- 輸入命令
pam_tally2 -u root

-- 輸出結果
Login           Failures Latest failure     From
root                0    
  • 解鎖狀態
-- 輸入命令
pam_tally2 -r -u  root

-- 輸出結果
Login           Failures Latest failure     From
root                0    

溫馨提示:login.defs檔案和/etc/pam.d/system-auth檔案的規則設定對非root使用者起作用,在root使用者下則不會生效!如果設定root使用者密碼過期時間等,需要用chage命令進行設定。
chage命令使用範例:

基本格式:chage [選項] 賬戶名 

--  檢視系統賬戶的當前設定
chage -l username   

-- 設定使用者設定密碼失效時間
chage --maxdays 90 username

-- 設定使用者密碼修改最小間隔時間
chage --mindays 7 username