如何建立 Linux 使用者的最小權限環境 文章首圖

如何建立 Linux 使用者的最小權限環境

如何建立 Linux 使用者的最小權限環境

在 Linux 系統管理中,「最小權限原則」(Principle of Least Privilege, PoLP)是安全防護的核心基石。許多資安事件並非源於黑客的技術高超,而是因為系統上存在擁有過多權限的帳號,一旦憑證洩漏,攻擊者便能輕易取得根目錄的控制權。對於中階 Linux 使用者而言,理解如何為日常任務建立一個僅具備必要權限的使用者環境,不僅能提升系統安全性,更是學習系統管理的重要門檻。本文將以 Ubuntu 22.04 / Debian 12 為例,逐步示範如何建立並配置一個最小權限環境。

第一步:建立專屬使用者與群組

首先,我們需要建立一個新的使用者。為了確保該使用者無法直接登入系統進行互動(例如透過 SSH 或控制台),我們通常會將其登入殼層設定為 nologinfalse

請使用以下指令建立使用者 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 的 namespacescgroups 技術允許我們創建更嚴格的隔離環境。雖然這超出了基礎使用者管理的範疇,但對於現代 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 多使用者環境運作機制的理解。記住,安全是一個持續的過程,定期審查使用者權限與服務配置,是維持系統健康的關鍵。