−25%

Windows 年繳方案適用,至 10 月 31 日。 檢視方案

EQVPS
開始使用

如何在 VPS 上建立 sudo 使用者並停用 root

在 Ubuntu 或 Debian 上建立非 root 的 sudo 使用者,給它您的 SSH 金鑰,測試通過後再關閉 root 登入——按這個順序就不會把自己鎖在門外。

幾乎每台新 VPS 的開局都一樣:用 root 登入,裝幾樣東西,一個月後還在用 root。這樣一直沒事,直到某天貼上的指令碼刪錯了目錄。設定一個帶 sudo 的普通使用者只要五分鐘,而順序比指令更重要——順序錯了,您就把自己鎖在門外了。

下面是適用於 Ubuntu 22.04/24.04 和 Debian 12 的安全步驟。

1. 建立使用者

以 root 身分:

adduser deploy
usermod -aG sudo deploy

adduser 會要您設密碼,並詢問一些可選資訊(直接按回車跳過即可)。請設一個像樣的密碼:用 sudo 時要輸入它。在精簡版 Debian 映像上,如果沒有這個指令,先執行 apt install -y sudo。

2. 給它您的 SSH 金鑰

最簡單的辦法是複製 root 的授權金鑰,並保持正確的屬主:

rsync --archive --chown=deploy:deploy /root/.ssh /home/deploy

如果您更想手動操作:

mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys

權限不對是金鑰登入悄無聲息失敗的經典原因。SSH 會忽略其他使用者可寫的 authorized_keys。

3. 改任何東西之前先測試

保持 root 工作階段開著。在一個新終端裡:

ssh -p 22 deploy@203.0.113.10
sudo whoami

用您自己的 IP 和埠——NAT 方案的話就是控制面板裡的專屬 SSH 埠。如果 sudo whoami 輸出 root,就一切正常。如果登入失敗,您還有 root 視窗可以修。

4. 關閉 root 登入

現在把門關上。不要編輯主設定檔案,而是建立一個小的 drop-in 檔案:

cat > /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
EOF
sshd -t && systemctl reload ssh

sshd -t 會先檢查語法。設定寫壞了再 reload,就是很多人最後只能靠控制台的原因。PasswordAuthentication no 只有在新使用者的金鑰登入能用時才有意義——而您剛剛已經測過了。

再開一個終端,確認 root 被拒絕、deploy 仍能登入。然後再關掉舊的 root 工作階段。

5. 可選:給自動化用的免密碼 sudo

如果部署指令碼需要不經詢問就使用 sudo,只給它恰好需要的權限,不要多給:

visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

說實話,NOPASSWD: ALL 很誘人,但這意味著金鑰一旦被盜就等於 root。把它限制在自動化實際執行的指令上。

出問題了怎麼辦

控制面板裡的網頁控制台既不依賴 SSH,也不依賴防火牆。從那裡登入,修好 /etc/ssh/sshd_config.d/ 裡的檔案,reload,搞定。完整的恢復流程我們寫在了如何重新進入被鎖的 VPS裡。

接下來做什麼

各方案的存取方式見存取文件。哪怕是 $3 的 Nano,也值得配一個非 root 使用者——這是最便宜的安全升級。

常見問題

為什麼不能一直用 root?

以 root 身分執行的任何操作都可能搞垮整個系統,一個打字錯誤也不例外。機器人也總是先試使用者名稱 'root',所以關閉 root 登入就去掉了最常被猜的目標。有名字的使用者加 sudo,能讓您在每條特權指令前停一下,還會留下執行記錄。

萬一把自己鎖在外面怎麼辦?

使用控制面板裡的網頁控制台。即使 SSH 壞了或者防火牆擋住了您,它也能用,您可以登入進去修復 sshd_config。這也是為什麼要在關閉 root 工作階段前先測試新使用者。

要不要允許免密碼 sudo?

給人用的帳戶請保留密碼提示——SSH 金鑰洩露時,這是最後一道防線。免密碼 sudo 適合給自動化專用的部署使用者,並且只限於它真正需要的指令。

我的 Debian 伺服器上沒有 sudo 指令,為什麼?

精簡版 Debian 映像不一定自備它。用 root 執行 'apt install -y sudo' 安裝,然後把您的使用者加入 sudo 組。

應該用哪個 SSH 埠?

控制面板裡顯示的那個。獨立 IP 方案使用您自己 IP 上的 22 埠;NAT 方案使用您的專屬 SSH 埠。

評論

目前還沒有評論。歡迎成為第一位。

發表評論

評論在顯示前會經過審核。