系統維護、安全稽核、帳號異常時,需暫時或永久禁止特定使用者或所有使用者登入。本文介紹三種標準方法,適用於所有主流 Linux 發行版。
最簡單、標準、可逆的方式。鎖定後使用者無法使用密碼登入(SSH、控制台、圖形介面皆無效),但不影響 SSH 金鑰認證、sudo、cron、systemd 服務帳號等非密碼認證方式。
# 鎖定使用者 lynn passwd -l lynn # 輸出:Locking password for user lynn. passwd: Success # 解鎖 passwd -u lynn
原理:在 /etc/shadow 中該使用者密碼雜湊前加上 !(如 !$6$...),導致密碼驗證永遠失敗。
查詢鎖定狀態:
passwd -S lynn # 輸出範例:lynn LK 2024-01-15 0 99999 7 -1 (LK = Locked)
編輯 /etc/passwd,將使用者的登入 Shell(第 7 欄)改為 /sbin/nologin 或 /bin/false。
# 原始 lynn:x:1000:1000::/home/lynn:/bin/bash # 修改為 lynn:x:1000:1000::/home/lynn:/sbin/nologin
或使用 usermod 指令:
usermod -s /sbin/nologin lynn # 恢復 usermod -s /bin/bash lynn
差異:
/sbin/nologin:顯示友善訊息「This account is currently not available.」並記錄登入嘗試至 /var/log/secure。/bin/false:直接靜默失敗,無訊息,適合系統服務帳號。影響範圍:阻擋所有需要登入 Shell 的服務,但不影響 SSH 通道、SCP、SFTP、rsync over SSH、Git over SSH 等非互動式連線(除非在 /etc/ssh/sshd_config 設定 ForceCommand 或使用 Match User 限制)。
系統維護窗口期間,建立此檔案即可阻擋所有一般使用者登入(含 SSH、控制台、圖形介面)。
# 建立檔案(內容會顯示給嘗試登入的使用者) echo "系統維護中,暫停登入服務,預計 02:00 恢復。" > /etc/nologin # 維護結束後移除 rm -f /etc/nologin
機制:PAM 模組 pam_nologin.so 在認證階段檢查此檔案存在與否。root 使用者不受影響(可透過 pam_succeed_if.so uid = 0 例外)。
注意:此法不影響已建立的 SSH 連線,僅阻擋新連線認證。
| 方法 | 適用場景 | 影響範圍 | 可逆性 | 備註 |
|---|---|---|---|---|
| passwd -l | 暫時停用個人帳號、離職交接 | 密碼認證登入 | 高(-u 即時解鎖) | 不影響 SSH 金鑰、sudo、排程任務 |
| usermod -s /sbin/nologin | 系統服務帳號、永久停用帳號 | 所有需 Shell 的登入 | 高 | 不影響 SFTP/SCP/SSH 隧道 |
| /etc/nologin | 系統維護窗口、緊急安全事件 | 所有非 root 使用者 | 高(刪檔即恢復) | 需配合 PAM,root 不受影響 |
編輯 /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
# 針對特定使用者
Match User lynn
PasswordAuthentication no
PubkeyAuthentication yes
重啟 SSH:systemctl reload sshd。此法更精準控制遠端存取方式。
passwd -l usernameusermod -s /sbin/nologin usernameecho "維護中" > /etc/nologinsshd_config 的 PasswordAuthentication/PubkeyAuthentication操作前建議備份 /etc/passwd、/etc/shadow、/etc/ssh/sshd_config,並在另一終端機保持 root 連線以防誤鎖自己。