以下是一套在 Ubuntu 24.04 中,限制使用者 optim 以「密碼登入 SSH 後,只能透過選單執行指定指令」的完整 SOP。
此作法適合維運帳號、代管帳號、委外人員,避免任意下指令。
一、設計原則(先說清楚邏輯)
- SSH 可用密碼登入
- 登入後 不給 Shell
- 只執行一個「選單程式(Menu Script)」
- 選單內只呼叫 白名單指令
- 使用者無法:
cdvi / nanobashssh到別台Ctrl+C跳出
二、建立使用者 optim(若已存在可略過)
sudo useradd -m optim
sudo passwd optim
三、準備「受控選單腳本」
1️⃣ 建立目錄
sudo mkdir -p /opt/optim-menu
sudo chown root:root /opt/optim-menu
sudo chmod 755 /opt/optim-menu
2️⃣ 建立選單腳本
sudo vi /opt/optim-menu/menu.sh
內容如下(可依需求調整指令):
#!/bin/bash
while true; do
clear
echo "================================="
echo " Optim Maintenance Menu"
echo "================================="
echo "1) 查看系統時間"
echo "2) 查看磁碟使用量"
echo "3) 查看服務狀態 (nginx)"
echo "4) 查看系統負載"
echo "0) 登出"
echo "================================="
read -p "請選擇操作: " choice
case "$choice" in
1)
/usr/bin/date
;;
2)
/usr/bin/df -h
;;
3)
/usr/bin/systemctl status nginx --no-pager
;;
4)
/usr/bin/uptime
;;
0)
exit 0
;;
*)
echo "無效選項"
;;
esac
echo
read -p "按 Enter 繼續..."
done
3️⃣ 設定權限(非常重要)
sudo chown root:root /opt/optim-menu/menu.sh
sudo chmod 755 /opt/optim-menu/menu.sh
⚠️ 使用絕對路徑(/usr/bin/df),避免 PATH 被濫用。
四、限制 optim 使用者的 Shell
方法一(最推薦):使用 ForceCommand
編輯 SSH 設定
sudo vi /etc/ssh/sshd_config
在檔案最下方加入:
Match User optim
ForceCommand /opt/optim-menu/menu.sh
PasswordAuthentication yes
AllowTcpForwarding no
X11Forwarding no
PermitTTY yes
重新啟動 SSH
sudo systemctl restart ssh
五、(加強)防止逃逸技巧
1️⃣ 禁用 .bashrc / .profile
sudo chown root:root /home/optim/.bashrc /home/optim/.profile
sudo chmod 644 /home/optim/.bashrc /home/optim/.profile
或直接清空:
sudo truncate -s 0 /home/optim/.bashrc
sudo truncate -s 0 /home/optim/.profile
2️⃣ 限制 sudo(若不需要)
sudo visudo
確認 沒有:
optim ALL=(ALL) ALL
六、測試驗證清單(必做)
請實際測試以下行為:
| 測試項目 | 預期結果 |
|---|---|
| SSH 密碼登入 | ✅ 可登入 |
| 登入後看到 bash | ❌ 不可 |
| 出現選單 | ✅ |
嘗試輸入 bash | ❌ 無效 |
| Ctrl + C | ❌ 不可中斷 |
| 選 0 | ✅ 正常登出 |
| scp 傳檔 | ❌ 失敗 |
七、常見錯誤與排查
🔴 登入直接斷線
- menu.sh 沒有執行權限
- ForceCommand 路徑錯誤
👉 解法:
chmod +x /opt/optim-menu/menu.sh
🔴 指令顯示 command not found
- 沒用「絕對路徑」
👉 一律改成:
/usr/bin/xxx
八、進階強化(可選)
- 搭配 auditd 記錄所有執行行為
- 將 menu.sh 改為 Python / whiptail UI
- 搭配 PAM + 時段限制
- SSH 僅允許指定 IP
九、總結
此 SOP 能達成:
✅ 密碼登入
✅ 僅能選單操作
✅ 指令白名單
✅ 無 Shell、無逃逸
✅ 符合實務維運安全
若你需要:
- 含審計版(auditd)
- 多層子選單
- 一鍵部署 Script
- 搭配 sudo 精準放權
可直接說明使用情境,我可幫你客製化。
信心指數:96%