在 Linux 系統下,Podman 是一種流行的輕量級容器引擎,但在操作容器時需要注意一些細節。其中一個重要的問題是,如何正確地使用 sudo 命令來管理容器,以確保安全性和可靠性。本文將介紹如何使用 sudo 指令來正確管理 Podman 容器。
容器是現代運算的一個重要組成部分,隨著圍繞容器的基礎設施的發展,新的和更好的工具開始浮出水面。過去,你只需用 LXC 就可以運行容器,然而隨著 Docker 得到了普及,它開始變得越來越複雜。最終,我們在 Podman 得到了我們所期望的容器管理系統:一個無守護程序的容器引擎,它使容器和吊艙易於構建、運行和管理。
容器直接與 Linux 核心能力(如控制群組和命名空間)交互,它們在這些命名空間中產生大量的新進程。簡而言之,運行一個容器其實就是在 Linux 系統內部運行一個 Linux 系統。從作業系統的角度來看,它看起來非常像一種管理和特權活動。一般使用者通常無法像容器那樣自由支配系統資源,所以預設情況下,執行 Podman 需要 root 或 sudo 權限。然而,這只是預設設置,而且這絕不是唯一可用的設定。本文示範如何設定你的 Linux 系統,讓一般使用者可以在不使用 sudo 的情況下(「無根rootless」)運行 Podman。
命名空間的使用者 ID
#核心命名空間 本質上是一種虛構的結構,可幫助 Linux 追蹤哪些進程屬於同一類別。這是 Linux 中的「佇列護欄」。一個佇列中的進程與另一個佇列中的進程之間實際上沒有區別,但可以將它們用「警戒線」彼此隔離。要聲明一組進程為“容器”,而另一組進程為你的作業系統,將它們分開是關鍵。
Linux 透過使用者 ID(UID)和群組 ID(GID)來追蹤哪個使用者或群組擁有的進程。通常情況下,一個使用者可以存取一千個左右的從屬 UID,以分配給命名空間的子程序。由於 Podman 運行的是分配給啟動容器的使用者的整個從屬作業系統,因此你需要的不僅僅是預設分配的從屬 UID 和從屬 GID。
你可以用 usermod 指令授予一個使用者更多的從屬 UID 和從屬 GID。例如,要授予使用者 tux 更多的從屬 UID 和從屬 GID,選擇一個還沒分配使用者的適當的高 UID(如 200000),然後將其增加數千:
$ sudo usermod \ --add-subuids 200000-265536 \ --add-subgids 200000-265536 \ tux
命名空間存取
對命名空間數量也有限制。這通常被設定得很高。你可以用 systctl,也就是核心參數工具來驗證使用者的命名空間分配:
$ sysctl --all --pattern user_namespaces user.max_user_namespaces = 28633
這是很充足的命名空間,而且可能是你的發行版預設的。如果你的發行版沒有這個屬性或設定得很低,那麼你可以在檔案 /etc/sysctl.d/userns.conf 中輸入這樣的文字來建立它:
user.max_user_namespaces=28633
載入該設定:
$ sudo sysctl -p /etc/sysctl.d/userns.conf
在沒有 root 權限的情況下執行一個容器
#當你設定好你的配置,重啟你的計算機,以確保你的使用者和核心參數的變化被載入和啟動。
重啟後,試著執行一個容器映像:
$ podman run -it busybox echo "hello" hello
容器像指令一樣
#本文詳細介紹了在 Linux 系統下使用 sudo 維護 Podman 容器的正確姿勢,包括 sudoers 檔案配置、安全配置和啟動容器等多個方面。透過合理配置和使用 sudo,我們可以更好地保護容器的安全性和可靠性,從而更好地滿足業務需求。需要注意的是,在實際操作中,務必謹慎處理敏感資訊,確保不會造成不必要的損失。希望本文能幫助您更能掌握使用 sudo 指令管理 Podman 容器的技巧。
以上是運行Podman容器的正確姿勢:使用Sudo指令在Linux系統下管理容器的詳細內容。更多資訊請關注PHP中文網其他相關文章!