Linux / LXC 容器登入設定
在 Proxmox VE (PVE) 的 LXC 容器中,長期使用 root 帳號透過 SSH 遠端登入存在極大的安全風險。為了防止暴力破解與人為誤操作,建立普通使用者並妥善配置 SSH 伺服器的 PermitRootLogin 規則,是提升系統安全性的關鍵步驟。而這份教程通用於大部分Linux發行版(*1)
I. 為什麼不建議直接使用 Root 登入?
- 防止人為誤操作:
root擁有最高權限,執行危險指令(如刪除系統檔案)沒有挽回餘地。使用普通使用者配合sudo提權,能增加一道心理確認手續。 - 防禦暴力破解: 駭客通常會鎖定
root帳號進行密碼猜測。禁用root登入後,攻擊者必須同時猜中「自定義帳號」與「密碼」,大幅增加攻擊難度。 - 完善的審計追蹤 (Audit Log): 多人管理時,透過
sudo提權會在系統日誌中留下紀錄,清楚標明「誰」在「何時」執行了什麼指令。
II. 核心設定:三種 PermitRootLogin 模式比較
在 SSH 的設定檔中,PermitRootLogin 決定了 root 帳號的登入權限。以下是三種常見設定的比較與行為分析:
| 設定參數 | 密碼登入 Root | SSH Key (金鑰) 登入 Root | 安全性評估與適用情境 |
yes | ✅ 允許 | ✅ 允許 | 極不安全。 容易遭受字典檔暴力破解,強烈建議不要使用。 |
prohibit-password | ❌ 拒絕 | ✅ 允許 | 中等安全。 Debian/Ubuntu 預設值。防暴力破解,適合需要自動化腳本或備份軟體以 Root 執行的情境。風險在於若私鑰外洩,系統即被攻破。 |
no | ❌ 拒絕 | ❌ 拒絕 | 最安全 (推薦)。 徹底封死 Root 遠端登入的管道。任何人必須先登入普通使用者,再透過 sudo 取得權限。 |
III. 實作步驟:修改 SSH 設定檔
請依照以下步驟修改 SSH 設定:
步驟 1:確認已建立普通使用者並賦予 sudo 權限
在修改設定前,請務必確認你擁有一個可以使用 sudo 的普通帳號,否則設定後你將無法取得管理員權限!
# 建立使用者 (以 myuser 為例)
adduser myuser
# 將使用者加入 sudo 群組
usermod -aG sudo myuser
步驟 2:編輯 SSH 設定檔
使用 nano 或 vim 編輯器打開 SSH 守護進程的設定檔:
sudo nano /etc/ssh/sshd_config
步驟 3:修改 PermitRootLogin 參數
在檔案中找到 #PermitRootLogin prohibit-password 這一行(通常會有 # 註解符號)。
- 將
#刪除(取消註解)。 - 將後面的值修改為你想要的模式(強烈建議改為
no)。
修改後應該長這樣:
PermitRootLogin no(提示:在 nano 編輯器中,按 Ctrl + O 存檔,按 Enter 確認,再按 Ctrl + X 離開。)
步驟 4:重新啟動 SSH 服務
設定檔修改完成後,必須重啟服務才會生效:
sudo systemctl restart ssh🛡️ 進一步優化:免密碼 sudo 或特定指令
如果你覺得每次都要輸入密碼很麻煩,或者想更精細地控制權限,可以編輯 sudoers 檔案:
執行指令:
visudo
- 完全免密碼(不建議,但方便): 在檔案末尾加入
myuser ALL=(ALL) NOPASSWD:ALL - 只允許執行特定指令(最安全): 例如只允許該使用者重啟服務:
myuser ALL=(ALL) /usr/bin/systemctl restart nginx
*1: 這套流程是 Linux 系統管理的標準資安建置(Security Hardening)。不論你使用的是 Ubuntu、Debian、CentOS 還是 Arch Linux,核心邏輯都是通用的。以下是針對不同環境推廣時,你需要注意的幾個小差異:
1. 套件管理指令的差異
雖然邏輯相同,但不同發行版的安裝指令略有不同:
- Debian / Ubuntu / Proxmox (LXC): 使用
apt。apt install sudo
- RHEL / CentOS / AlmaLinux / Rocky: 使用
dnf或yum。dnf install sudo
- Arch Linux: 使用
pacman。pacman -S sudo
2. 管理員群組名稱的差異
在執行 usermod -aG [群組名] 使用者 時,不同系統對「管理員群組」的定義不同:
- Debian / Ubuntu: 群組名稱通常是
sudo。 - RHEL / CentOS / Arch: 群組名稱通常是
wheel。
3. 雲端主機 (AWS/GCP/Azure) 的特殊性
如果你是在雲端平台上建立主機,它們通常預設就已經幫你做好了:
- 禁止 root 登入: 雲端主機通常不允許 root 直接登入。
- 預設使用者: 它們會給你一個預設使用者(如
ubuntu或ec2-user),且該使用者已經具備sudo權限。 - 強制使用金鑰: 許多雲端環境在建立時就要求你上傳 SSH Key,並預設關閉密碼登入。
⚠️ 例外:特殊嵌入式系統
有些非常輕量化的系統(如某些路由器韌體或極簡的 Docker 映像檔)可能沒有 sudo 工具,或者為了節省空間只保留 root。但在一般的伺服器運維中,絕對建議推廣這套「普通使用者 + sudo」的架構。
Member discussion