4 min read

Linux / LXC 容器登入設定

在 Proxmox VE (PVE) 的 LXC 容器中,長期使用 root 帳號透過 SSH 遠端登入存在極大的安全風險。為了防止暴力破解與人為誤操作,建立普通使用者並妥善配置 SSH 伺服器的 PermitRootLogin 規則,是提升系統安全性的關鍵步驟。而這份教程通用於大部分Linux發行版(*1)

I. 為什麼不建議直接使用 Root 登入?

  1. 防止人為誤操作: root 擁有最高權限,執行危險指令(如刪除系統檔案)沒有挽回餘地。使用普通使用者配合 sudo 提權,能增加一道心理確認手續。
  2. 防禦暴力破解: 駭客通常會鎖定 root 帳號進行密碼猜測。禁用 root 登入後,攻擊者必須同時猜中「自定義帳號」與「密碼」,大幅增加攻擊難度。
  3. 完善的審計追蹤 (Audit Log): 多人管理時,透過 sudo 提權會在系統日誌中留下紀錄,清楚標明「誰」在「何時」執行了什麼指令。

II. 核心設定:三種 PermitRootLogin 模式比較

在 SSH 的設定檔中,PermitRootLogin 決定了 root 帳號的登入權限。以下是三種常見設定的比較與行為分析:

設定參數密碼登入 RootSSH 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 設定檔

使用 nanovim 編輯器打開 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: 使用 dnfyum
    • 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 直接登入。
  • 預設使用者: 它們會給你一個預設使用者(如 ubuntuec2-user),且該使用者已經具備 sudo 權限。
  • 強制使用金鑰: 許多雲端環境在建立時就要求你上傳 SSH Key,並預設關閉密碼登入。

⚠️ 例外:特殊嵌入式系統

有些非常輕量化的系統(如某些路由器韌體或極簡的 Docker 映像檔)可能沒有 sudo 工具,或者為了節省空間只保留 root。但在一般的伺服器運維中,絕對建議推廣這套「普通使用者 + sudo」的架構