系統管理常需切換身分執行指令:runuser (無需密碼、僅 root)、su (需密碼、完整登入 Shell)、sudo (權限精細、審計日誌)、systemd-run (現代、資源限制、日誌整合)。本文詳細對比四工具語法、適用場景、安全性差異。


| 工具 | 需密碼 | 適用身分 | 環境繼承 | 審計 | 典型用途 |
|---|---|---|---|---|---|
| runuser -u user cmd | 否 (僅 root) | root → 任意 | 最小 (PAM session hook only) | 無 | 腳本自動化、服務啟動腳本 |
| su - user -c 'cmd' | 是 (目標用戶) | 任意 → 知密碼者 | 完整登入環境 | /var/log/secure | 管理員手動切換身分 |
| sudo -u user cmd | 是 (發起者/目視) | sudoers 允許者 | 可配置 (env_reset) | /var/log/secure + sudo.log | 生產環境標準提權 |
| systemd-run --user --scope cmd | 否 (用戶級) | 當前用戶/其他 (需權限) | systemd 服務環境 | journalctl | 資源限制、依賴管理、自動重啟 |
# 1. runuser (root 執行備份腳本以 postgres 身分)
runuser -u postgres -- pg_dumpall > /backup/db.sql
# 2. su (切換到 oracle 完整環境)
su - oracle -c 'sqlplus / as sysdba @startup.sql'
# 3. sudo (Web 部署腳本以 www-data 身分)
sudo -u www-data php artisan migrate --force
# 4. systemd-run (以用戶級服務運行長期任務)
systemd-run --user --scope --property=MemoryMax=500M \
--property=CPUQuota=50% \
./long_computation.sh
sudo,配合 /etc/sudoers.d/ 最小權限原則。su。runuser 僅限 root 且無審計,僅用於完全受控的自動化環境。.service),而非臨時 systemd-run。選對工具,兼顧自動化效率與安全合規。
ss 指令取代 netstat:Socket 統計神器、tcp_diag 核心加速、TCP 狀態詳盡、常用過濾範例
Linux 查看進程執行緒數完整指令集:top、ps、/proc 三大法門
Ubuntu 編輯應用程式選單:alacarte 工具與 .desktop 檔案手動管理
Ubuntu 編譯安裝 FFmpeg 完整教學:從 yasm 依賴到安裝驗證
Linux 磁碟裝置節點與 mknod 指令實戰:建立區塊、字元、管道裝置檔
修復 Linux 下 gulp watch ENOSPC 錯誤:調大 inotify 監控上限
Linux Vim 安裝 YouCompleteMe 程式碼補全外掛:Vundle 管理、Python 支援編譯、Clangd 語義補全完整流程