如何建立 Linux 使用者的最小權限環境
在 Linux 系統管理中,「最小權限原則」(Principle of Least Privilege, PoLP)是安全防護的核心基石。許多資安事件並非源於黑客的技術高超,而是因為系統上存在擁有過多權限的帳號,一旦憑證洩漏,攻擊者便能輕易取得根目錄的控制權。對於中階 Linux 使用者而言,理解如何為日常任務建立一個僅具備必要權限的使用者環境,不僅能提升系統安全性,更是學習系統管理的重要門檻。本文將以 Ubuntu 22.04 / Debian 12 為例,逐步示範如何建立並配置一個最小權限環境。
第一步:建立專屬使用者與群組
首先,我們需要建立一個新的使用者。為了確保該使用者無法直接登入系統進行互動(例如透過 SSH 或控制台),我們通常會將其登入殼層設定為 nologin 或 false。
請使用以下指令建立使用者 devuser,並將其歸類到一個新的群組 devteam 中:
sudo groupadd devteam
sudo useradd -m -g devteam -s /usr/sbin/nologin devuser
這裡的參數含義如下:
-m:自動建立使用者的家目錄。-g devteam:將主要群組設定為devteam。-s /usr/sbin/nologin:禁止該使用者進行互動式登入。
接著,為該使用者設定密碼(雖然無法直接登入,但部分服務可能需要驗證):
sudo passwd devuser
第二步:配置 sudo 權限與特定指令白名單
最小權限並非完全禁止權限,而是精確控制。假設 devuser 需要執行特定的管理任務,例如重啟 Nginx 服務,我們不希望他擁有完整的 sudo 權限,而只允許執行該特定指令。
編輯 sudoers 檔案:
sudo visudo
在檔案末尾加入以下行,允許 devuser 在不輸入密碼的情況下,僅執行 /usr/sbin/service nginx restart:
devuser ALL=(ALL) NOPASSWD: /usr/sbin/service nginx restart
注意:使用 visudo 而非直接編輯 /etc/sudoers 是最佳實踐,因為它能在儲存前檢查語法錯誤,避免因為設定錯誤導致無法使用 sudo 的災難性後果。
第三步:限制家目錄與檔案權限
為了防止使用者意外或惡意修改系統設定,我們需要嚴格控制其家目錄的權限。最小權限環境下,使用者僅應擁有自己家目錄的完全控制權,而對其他目錄僅有讀取權限(若必要)。
# 設定家目錄擁有者與權限
sudo chown -R devuser:devteam /home/devuser
sudo chmod 750 /home/devuser
此外,建議建立一個專案目錄,讓 devuser 可以在其中自由操作,而不影響系統其他部分。例如,建立一個開發目錄並授予群組寫入權限:
sudo mkdir -p /var/www/devproject
sudo chown devuser:devteam /var/www/devproject
sudo chmod 775 /var/www/devproject
這樣,devuser 可以在 /var/www/devproject 中建立、修改檔案,但無法寫入 /var/www 的其他目錄。
第四步:使用容器或命名空間進一步隔離(進階選項)
對於更高安全需求的情境,僅靠檔案權限可能不足。Linux 的 namespaces 和 cgroups 技術允許我們創建更嚴格的隔離環境。雖然這超出了基礎使用者管理的範疇,但對於現代 DevOps 實踐至關重要。
例如,使用 unshare 命令可以建立一個新的命名空間,讓使用者在其中擁有獨立的 PID、網路和 mount 空間:
sudo unshare --mount --pid --fork --user --map-root-user bash
這將啟動一個新的 shell,其中使用者的權限被限制在該命名空間內,無法影響宿主系統。
常見問題
Q1: 為什麼我無法以 devuser 登入 SSH?
A: 這是預期行為。我們在建立使用者時指定了 -s /usr/sbin/nologin,這明確禁止了互動式登入。若需透過 SSH 執行特定腳本,建議使用 authorized_keys 配合 command="..." 選項限制可執行的指令,而非開放完整登入。
Q2: 如果忘記了 sudo 設定,如何恢復?
A: 若因 sudoers 錯誤導致無法使用 sudo,可透過單人模式(Single User Mode)或 Live USB 進入系統,重新編輯 /etc/sudoers 檔案。建議永遠使用 visudo 來避免語法錯誤。
小結
建立最小權限環境並非一蹴可幾,它需要對系統架構有清晰的理解。透過建立受限使用者、精確配置 sudo 權限、嚴格管理檔案權限,我們能有效降低系統被入侵時的損害範圍。對於中階 Linux 使用者而言,實踐這些步驟不僅能提升系統的安全性,更能深化對 Linux 多使用者環境運作機制的理解。記住,安全是一個持續的過程,定期審查使用者權限與服務配置,是維持系統健康的關鍵。