Linux 帳號安全加固的 10 個步驟
在 Linux 系統管理中,帳號安全是防禦外來攻擊的第一道防線。許多初學者往往只關注服務配置,卻忽略了底層帳號權限的設定。一旦 root 帳號失守或弱口令被破解,整個系統將面臨無底洞般的風險。本文將針對 Ubuntu 22.04 與 Debian 12 環境,提供一套循序漸進的帳號安全加固指南,幫助中階使用者建立更堅固的防禦體系。
1. 建立具備 sudo 權限的新使用者
永遠不要直接使用 root 帳號進行日常操作。首先,建立一個新的管理員帳號,並賦予 sudo 權限。
# 建立新使用者並指定家目錄
sudo adduser newadmin
# 將使用者加入 sudo 群組
sudo usermod -aG sudo newadmin
2. 設定強健的密碼策略
弱口令是暴力破解的主要目標。請確保密碼長度至少 12 碼,並包含大小寫字母、數字與特殊符號。您可以使用 passwd 指令強制使用者在下次登入時變更密碼,以確保初始密碼的安全。
sudo passwd -e newadmin
3. 禁用 SSH 的 root 直接登入
SSH 是常見的攻擊入口。透過修改 SSH 設定檔,禁止 root 帳號直接遠端登入,迫使攻擊者必須先破解普通帳號,再嘗試提權,大幅增加攻擊難度。
sudo nano /etc/ssh/sshd_config
找到 PermitRootLogin 並修改為:
PermitRootLogin no
修改後重新啟動 SSH 服務:
sudo systemctl restart sshd
4. 啟用 SSH 金鑰認證並停用密碼登入
金鑰認證比密碼認證更安全,因為私鑰極難被暴力破解。請在客戶端生成金鑰並複製到伺服器,隨後停用密碼登入。
# 在客戶端執行
ssh-copy-id newadmin@your_server_ip
# 在伺服器端修改 sshd_config
PasswordAuthentication no
5. 限制 SSH 登入端口與來源 IP
預設的 SSH 端口(22)是掃描器最常攻擊的目標。變更端口並配合防火牆規則,可有效阻擋大部分自動化掃描。
# 修改 sshd_config
Port 2222
# 使用 ufw 允許新端口
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
sudo ufw reload
6. 啟用 Fail2ban 防護暴力破解
Fail2ban 能監控日誌檔案,當偵測到多次登入失敗時,自動封鎖來源 IP。
sudo apt install fail2ban
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
# 設定封鎖時間與嘗試次數
sudo nano /etc/fail2ban/jail.local
加入以下設定:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
7. 設定密碼過期與歷史記錄
防止使用者長期使用相同密碼。透過 pam_pwquality 模組強制密碼複雜度,並設定過期時間。
sudo nano /etc/login.defs
修改或確認以下參數:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
8. 鎖定系統預設帳號
許多 Linux 發行版會建立如 games、nobody 等預設帳號,這些帳號通常無合法用途,卻可能成為攻擊跳板。將其鎖定以防止登入。
sudo usermod -L games
sudo usermod -L nobody
9. 設定 Sudo 權限最小化原則
並非所有 sudo 使用者都需要全系統控制權。對於僅需特定管理權限的使用者,應編輯 /etc/sudoers 檔,限制其可執行的指令。
sudo visudo
加入特定限制,例如僅允許重新啟動網路服務:
newadmin ALL=(ALL) NOPASSWD: /usr/sbin/service networking restart
10. 定期審計帳號與登入記錄
安全不是一次性的設定,而是持續的過程。定期檢查異常登入與帳號變更。
# 查看最近登入記錄
last
# 檢查是否有未授權的 sudo 操作
sudo grep sudo /var/log/auth.log
常見問題
Q1:修改 SSH 端口後無法連線怎麼辦?
若因設定錯誤導致無法連線,請透過主機提供商提供的控制台(Console)或 VNC 登入伺服器,檢查 /etc/ssh/sshd_config 中的端口設定是否正確,並確認防火牆規則是否已更新。
Q2:Fail2ban 封鎖了自己怎麼辦?
若 IP 被誤封,可執行 sudo fail2ban-client set sshd unbanip <your_ip> 解除封鎖。建議在測試階段先設定較短的 bantime,以免影響正常操作。
小結
帳號安全加固並非一蹴可幾,而是透過層層防護機制來降低風險。從禁用 root 登入、啟用金鑰認證,到部署 Fail2ban 與定期審計,每個步驟都構成了防禦體系的重要一環。建議您在正式環境前,先在測試機上完整執行這些步驟,確認無誤後再應用至生產環境。記住,安全是一個持續的過程,保持警惕與定期更新才是長治久安之道。