返回文章列表

Linux帳戶安全管理與過期設定

本文介紹 Linux 系統中使用 useradd、usermod 和 chage 等指令管理帳戶和密碼過期設定,並探討 pam_tally2 和 pam_faillock 模組在 CentOS、AlmaLinux 和 Ubuntu

系統管理 資安

Linux 系統管理員可使用 useraddusermodchage 指令管理帳戶生命週期和密碼策略。透過設定帳戶過期日期、密碼過期天數、寬限天數等引數,可有效控管帳戶存取許可權。此外,組態 PAM 模組 pam_tally2pam_faillock 可限制登入失敗次數,進一步提升系統安全性,防止暴力破解。文章也提供 CentOS、AlmaLinux 和 Ubuntu 等不同發行版的設定範例,以及手動鎖定和解鎖帳戶的方法,方便讀者根據自身環境進行組態。最後,文章提醒讀者定期檢查密碼是否外洩,並遵循公司政策管理非活躍帳戶,以確保系統安全。

使用 useradd 和 usermod 設定帳戶過期資料

在 Linux 系統中,管理員可以透過 useraddusermod 指令來設定帳戶的過期資料。這些指令提供了靈活的方式來管理使用者帳戶的生命週期。

設定預設值

在建立新使用者之前,可以修改 useradd 的預設值。這些預設值儲存在 /etc/default/useradd 檔案中。管理員可以使用以下指令來檢視和修改這些預設值:

sudo useradd -D

這將顯示目前的預設值,包括預設的群組、家目錄、密碼過期策略等。管理員可以透過修改 /etc/default/useradd 檔案或使用 useradd 指令的 -D 選項來更改這些預設值。

例如,若要將預設的 shell 設定為 /bin/zsh,並將密碼過期的寬限天數設定為 5 天,可以執行以下指令:

sudo useradd -D -f 5
sudo useradd -D -s /bin/zsh

內容解密:

  1. sudo useradd -D -f 5:此指令設定密碼過期後的寬限天數為 5 天。-f 選項用於指定密碼過期後,帳戶被鎖定前的天數。
  2. sudo useradd -D -s /bin/zsh:此指令將預設的 shell 設定為 /bin/zsh-s 選項用於指定預設的 shell。

設定帳戶過期資料

管理員可以使用 useraddusermod 指令來設定帳戶的過期資料。以下是相關的選項:

  • -e:用於設定帳戶的過期日期,格式為 YYYY-MM-DD
  • -f:用於設定密碼過期後,帳戶被鎖定前的天數。

例如,若要在 Red Hat 型系統上建立一個帳戶,並設定其過期日期為 2025 年 12 月 31 日,可以執行:

sudo useradd -e 2025-12-31 charlie

在非 Red Hat 型系統上,則需要額外指定 -m-s 選項來建立家目錄並設定預設的 shell:

sudo useradd -m -d /home/charlie -s /bin/bash -e 2025-12-31 charlie

內容解密:

  1. -e 2025-12-31:設定帳戶的過期日期為 2025 年 12 月 31 日。
  2. -m:建立使用者的家目錄。
  3. -d /home/charlie:指定使用者的家目錄路徑。
  4. -s /bin/bash:設定使用者的預設 shell 為 /bin/bash

修改帳戶過期資料

若要修改現有帳戶的過期資料,可以使用 usermod 指令。該指令與 useradd 共用相同的選項。

例如,若要將 Charlie 的帳戶過期日期更改為 2026 年 1 月 31 日,可以執行:

sudo usermod -e 2026-01-31 charlie

內容解密:

  1. -e 2026-01-31:將 Charlie 的帳戶過期日期更改為 2026 年 1 月 31 日。

使用 chage 設定過期資料

chage 指令提供了另一種方式來設定或修改帳戶和密碼的過期資料。以下是相關的選項:

  • -d:強制使用者在下次登入時更改密碼。
  • -E:設定帳戶的過期日期。
  • -I:設定密碼過期後,帳戶被鎖定前的天數。
  • -m-M:分別用於設定密碼更改的最小和最大天數間隔。
  • -W:設定密碼即將過期前的警告天數。

例如,若要強制 Charlie 在下次登入時更改密碼,可以執行:

sudo chage -d 0 charlie

內容解密:

  1. -d 0:強制 Charlie 在下次登入時更改密碼。

帳戶與密碼過期管理

在 Linux 系統管理中,帳戶與密碼的安全性是至關重要的。我們可以使用 chage 命令來管理使用者的密碼過期和帳戶過期策略。

設定帳戶與密碼過期資料

chage 命令允許管理員設定使用者的密碼過期和帳戶過期的相關引數。這些引數包括密碼的最小更改天數、最大更改天數、警告天數等。

同時設定多個引數

sudo chage -E 2026-02-28 -I 4 -m 3 -M 90 -W 4 charlie

這條命令同時設定了 Charlie 使用者的多個密碼和帳戶引數:

  • -E 2026-02-28:設定帳戶的過期日期為 2026 年 2 月 28 日。
  • -I 4:設定密碼過期後,帳戶被鎖定前的寬限天數為 4 天。
  • -m 3:設定密碼更改的最小天數為 3 天。
  • -M 90:設定密碼更改的最大天數為 90 天。
  • -W 4:設定密碼過期前的警告天數為 4 天。

使用 chage -l 命令可以檢視使用者的密碼和帳戶狀態:

sudo chage -l charlie

輸出結果將顯示 Charlie 使用者的密碼和帳戶相關資訊。

強制使用者首次登入時更改密碼

對於新建立的使用者帳戶,可以強制使用者在首次登入時更改密碼。這可以透過以下兩種方式實作:

  1. 使用 chage 命令:
    sudo chage -d 0 samson
    
  2. 使用 passwd 命令:
    sudo passwd -e samson
    

執行上述任一命令後,使用 chage -l 檢視 Samson 使用者的狀態:

sudo chage -l samson

結果將顯示 Samson 使用者需要更改密碼。

實作實驗室:設定帳戶和密碼過期資料

在本實驗室中,您將建立新使用者帳戶,設定過期資料,並檢視結果。步驟如下:

  1. 在 CentOS 或 AlmaLinux 虛擬機器上建立 Samson 使用者,並設定其帳戶過期日期為 2025 年 6 月 30 日:

    sudo useradd -e 2025-06-30 samson
    sudo chage -l samson
    

    在 Ubuntu 上,使用以下命令:

    sudo useradd -m -d /home/samson -s /bin/bash -e 2025-06-30 samson
    sudo chage -l samson
    
  2. 使用 usermod 修改 Samson 的帳戶過期日期為 2025 年 7 月 31 日:

    sudo usermod -e 2025-07-31 samson
    sudo chage -l samson
    
  3. 為 Samson 設定密碼,並強制其在首次登入時更改密碼:

    sudo passwd samson
    sudo passwd -e samson
    sudo chage -l samson
    su - samson
    exit
    
  4. 使用 chage 設定 Samson 的密碼策略:

    sudo chage -m 5 -M 90 -I 2 -W 5 samson
    sudo chage -l samson
    

防範暴力破解密碼攻擊

為了防止暴力破解攻擊,可以組態 PAM(可插拔認證模組)來在多次登入失敗後鎖定帳戶。在 RHEL 7 和 Ubuntu 18.04 上,可以使用 pam_tally2;而在 RHEL 8/9 和 Ubuntu 20.04/22.04 上,則使用 pam_faillock

組態 pam_tally2 在 CentOS 7 上

編輯 /etc/pam.d/login 檔案,並新增以下行來組態 pam_tally2

auth required pam_tally2.so deny=4 even_deny_root unlock_time=1200

這將在連續 4 次登入失敗後鎖定帳戶,包括 root 使用者,並在 20 分鐘後自動解鎖。

強化Linux系統登入安全:pam_tally2與pam_faillock模組詳解

前言

在Linux系統管理中,強化登入安全是至關重要的環節。本文將探討兩種重要的PAM(Pluggable Authentication Modules)模組:pam_tally2和pam_faillock,分別用於CentOS 7和AlmaLinux 8/9,以防止暴力破解攻擊。

pam_tally2在CentOS 7上的設定

設定步驟

  1. 編輯/etc/pam.d/login檔案,在pam_securetty模組下方新增以下行:

    auth required pam_tally2.so deny=4 even_deny_root unlock_time=1200
    

    這行設定表示在4次登入失敗後鎖定帳戶,甚至對root使用者也生效,1200秒後自動解鎖。

  2. 同樣地,在/etc/pam.d/password.auth/etc/pam.d/system.auth檔案的頂部新增上述行。

測試與驗證

  1. 登出並嘗試以錯誤密碼登入指定帳戶,直到帳戶被鎖定。
  2. 使用pam_tally2命令查詢登入失敗記錄:
    sudo pam_tally2
    
  3. 使用以下命令手動解鎖帳戶:
    sudo pam_tally2 --user=<username> --reset
    

程式碼解析

auth required pam_tally2.so deny=4 even_deny_root unlock_time=1200

內容解密:

  • auth required:表示這是一個驗證模組,且為必要條件。
  • pam_tally2.so:是實作登入失敗次數統計的模組。
  • deny=4:設定允許的登入失敗次數為4次。
  • even_deny_root:確保root使用者在多次失敗後也會被鎖定。
  • unlock_time=1200:設定帳戶鎖定1200秒後自動解鎖。

pam_faillock在AlmaLinux 8/9上的設定

使用authselect進行設定

  1. 檢視可用的authselect組態:
    sudo authselect list
    
  2. 切換到minimal組態並啟用with-faillock功能:
    sudo authselect select minimal with-faillock
    

設定原理

  • authselect是RHEL系列發行版中用於簡化PAM組態的工具。
  • with-faillock功能啟用了pam_faillock模組,用於統計登入失敗次數並在達到閾值時鎖定帳戶。

圖表說明

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Linux帳戶安全管理與過期設定

package "安全架構" {
    package "網路安全" {
        component [防火牆] as firewall
        component [WAF] as waf
        component [DDoS 防護] as ddos
    }

    package "身份認證" {
        component [OAuth 2.0] as oauth
        component [JWT Token] as jwt
        component [MFA] as mfa
    }

    package "資料安全" {
        component [加密傳輸 TLS] as tls
        component [資料加密] as encrypt
        component [金鑰管理] as kms
    }

    package "監控審計" {
        component [日誌收集] as log
        component [威脅偵測] as threat
        component [合規審計] as audit
    }
}

firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成

@enduml

圖表翻譯: 此圖示展示了根據不同的Linux發行版選擇適當的PAM模組進行登入安全強化的流程。對於CentOS 7,使用pam_tally2模組;而對於AlmaLinux 8/9,則使用pam_faillock模組。無論選擇哪種模組,最終都需要進行測試與驗證。

使用 pam_faillock 進行帳戶鎖定

在 Linux 系統中,pam_faillock 是一個重要的安全模組,用於在使用者登入失敗次數過多時自動鎖定帳戶,以防止暴力破解攻擊。本篇文章將介紹如何在 AlmaLinux 和 Ubuntu 上組態 pam_faillock,以及如何手動鎖定使用者帳戶。

在 AlmaLinux 上組態 pam_faillock

  1. 啟用最小組態檔:首先,使用以下命令啟用最小組態檔:
    sudo authselect select minimal --force
    
  2. 啟用 pam_faillock:接著,啟用 pam_faillock 功能:
    sudo authselect enable-feature with-faillock
    
  3. 編輯 faillock.conf:開啟 /etc/security/faillock.conf 檔案,並取消註解以下四行:
    # silent
    # deny = 3
    # unlock_time = 600
    # even_deny_root
    
    修改後儲存檔案。
  4. 建立測試使用者:建立一個名為 vicky 的使用者帳戶:
    sudo useradd vicky
    sudo passwd vicky
    
  5. 測試 pam_faillock:在另一個終端機中,讓 vicky 進行三次錯誤登入嘗試。在自己的終端機中檢視結果:
    sudo faillock
    
    驗證 vicky 的帳戶是否被鎖定,並在十分鐘後嘗試登入。
  6. 重設帳戶:在另一次測試中,重設 vicky 的帳戶:
    sudo faillock --reset --user vicky
    

在 Ubuntu 上組態 pam_faillock

由於 Ubuntu 不支援 authselect 工具,因此需要手動編輯 PAM 組態檔:

  1. 編輯 common-auth:在 /etc/pam.d/common-auth 檔案頂部新增以下兩行:
    auth required pam_faillock.so preauth silent
    auth required pam_faillock.so authfail
    
  2. 編輯 common-account:在 /etc/pam.d/common-account 檔案底部新增以下一行:
    account required pam_faillock.so
    
  3. 組態 faillock.conf:與 AlmaLinux 相同,編輯 /etc/security/faillock.conf 檔案。
  4. 測試組態:按照 AlmaLinux 的測試步驟進行驗證。

手動鎖定使用者帳戶

除了使用 pam_faillock 自動鎖定帳戶外,還可以手動鎖定使用者帳戶:

  • 使用 usermod 鎖定帳戶

    sudo usermod -L katelyn
    

    檢視 /etc/shadow 檔案,確認密碼雜湊值前是否增加了驚嘆號。

  • 使用 passwd 鎖定帳戶

    sudo passwd -l katelyn
    

    此命令同樣可以鎖定帳戶,但在不同發行版中可能顯示不同的回饋訊息。

解鎖使用者帳戶

  • 使用 usermod 解鎖:
    sudo usermod -U katelyn
    
  • 使用 passwd 解鎖:
    sudo passwd -u katelyn
    

使用情境

手動鎖定帳戶的常見場景包括:

  1. 使用者暫時離職或休假:防止他人濫用帳戶。
  2. 調查可疑活動:暫時鎖定帳戶以進行調查。
  3. 使用者離職:根據公司政策和法律規定處理離職員工的帳戶。

注意事項

刪除使用者帳戶前,務必檢查當地法律法規,如美國的 Sarbanes-Oxley 法案,以避免違法。建議遵循公司變更管理程式中的書面來處理非活躍使用者帳戶。

加強雲端伺服器安全:從帳戶管理到登入訊息設定

在當今的數位時代,伺服器安全已成為每個系統管理員的首要任務。許多人在設定雲端伺服器時,會直接使用 root 帳戶進行操作,這是一個極為危險的做法。本文將探討如何透過建立普通使用者帳戶、停用 root 登入、設定安全登入訊息以及檢測密碼是否被洩露等方法來加強伺服器的安全性。

建立普通使用者帳戶並停用 Root 登入

許多駭客工具和機器人網路(如 Hail Mary)會持續掃描網際網路上暴露了 Secure Shell(SSH)埠的伺服器,並嘗試使用暴力破解的方式猜測 root 帳戶的密碼。如果 root 帳戶的密碼設定得太簡單,就很容易被攻破。因此,第一步是建立一個具有完整 sudo 許可權的普通使用者帳戶,並登出 root 帳戶,使用新帳戶登入後執行以下命令來鎖定 root 帳戶:

sudo passwd -l root

這可以有效防止駭客透過猜測 root 密碼來入侵系統。

內容解密:

  • sudo passwd -l root 命令用於鎖定 root 帳戶,使其無法登入。
  • sudo 表示以管理員許可權執行命令。
  • passwd 是用於修改使用者密碼的命令。
  • -l 引數表示鎖定指定的使用者帳戶。

設定安全登入訊息

設定合適的登入訊息可以警告未授權的使用者不要嘗試登入系統。曾經有一個真實案例,一家公司因為登入訊息中包含「歡迎來到我們的網路」這樣的字眼,導致駭客被抓到後辯稱自己是被邀請進入的,最終使得該案件被駁回。

使用 /etc/motd 檔案

/etc/motd(Message of the Day)檔案會在使用者透過 SSH 登入系統時顯示一則訊息。在 CentOS 或 AlmaLinux 上,這個檔案預設存在但為空;在 Ubuntu 上則需要手動建立。編輯該檔案並新增警告訊息,例如:

Warning: Authorized Users Only!
All others will be prosecuted.

儲存後,透過 SSH 遠端登入即可看到這則訊息。

內容解密:

  • /etc/motd 檔案用於顯示每日訊息。
  • Ubuntu 系統預設有動態 MOTD 系統,會顯示 Ubuntu 相關的訊息和系統資訊。
  • 自定義的 /etc/motd 檔案內容會在動態輸出結束後顯示。

使用 /etc/issue 檔案

/etc/issue 檔案會在本地終端登入提示前顯示訊息。預設情況下,它會顯示一些關於機器的資訊,如作業系統版本等。你可以修改這個檔案來新增安全訊息。不過,如果你的伺服器被妥善地鎖在有控管的伺服器室中,這麼做的重要性可能不大;但對於開放環境中的桌面機來說,這樣做就比較有意義。

範例程式碼:

# 在 /etc/issue 檔案中新增以下內容
Warning!!! Authorized users only!

內容解密:

  • /etc/issue 檔案用於在本地終端顯示訊息。
  • 修改該檔案後需要重新啟動系統,新的訊息才會顯示。

避免使用 /etc/issue.net 檔案

/etc/issue.net 檔案原本是用於 telnet 登入時顯示訊息的,但由於 telnet 是極度不安全的協定,現在已經很少使用。因此,不建議使用這個檔案。

檢測密碼是否被洩露

駭客通常會使用包含常見密碼或已被洩露密碼的字典檔來進行字典攻擊。要檢查你的密碼是否已經被洩露,可以使用一些線上服務,如「Have I Been Pwned?」。這類別服務可以幫助你檢查密碼是否已經出現在公開的密碼洩露事件中。