無需sudo使用Podman在Linux上執行容器
導讀 | 容器是現代計算的一個重要組成部分,隨著圍繞容器的基礎設施的發展,新的和更好的工具開始浮出水面。過去,你只需用 LXC 就可以執行容器,然而隨著 Docker 得到了普及,它開始變得越來越複雜。最終,我們在 Podman 得到了我們所期望的容器管理系統:一個無守護程式的容器引擎,它使容器和吊艙易於構建、執行和管理。 |
容器直接與 核心能力(如控制組和名稱空間)互動,它們在這些名稱空間中產生大量的新程式。簡而言之,執行一個容器實際上就是在 Linux 系統內部執行一個 Linux 系統。從作業系統的角度來看,它看起來非常像一種管理和特權活動。普通使用者通常不能像容器那樣自由支配系統資源,所以預設情況下,執行 Podman 需要 root 或 sudo 許可權。然而,這只是預設設定,而且這絕不是唯一可用的設定。本文演示瞭如何配置你的 Linux 系統,使普通使用者可以在不使用 sudo 的情況下(“無根rootless”)執行 Podman。
核心名稱空間 本質上是一種虛構的結構,可幫助 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
當你設定好你的配置,重啟你的計算機,以確保你的使用者和核心引數的變化被載入和啟用。
重啟後,試著執行一個容器映象:
$ podman run -it busybox echo "hello" hello
如果你是第一次接觸容器,可能會覺得很神秘,但實際上,它們與你現有的 Linux 系統沒有什麼不同。它們實際上是在你的系統上執行的程式,沒有模擬環境或虛擬機器的成本和障礙。容器和你的作業系統之間的區別只是核心名稱空間,所以它們實際上只是帶有不同標籤的本地程式。Podman 使這一點比以往更加明顯,當你將 Podman 配置為無根命令,容器感覺更像命令而不是虛擬環境。Podman 使容器和吊艙變得簡單,所以請試一試。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2854616/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在 Linux 中執行特定命令而無需 sudo 密碼Linux密碼
- 無需 root 實現在 Android 裝置上執行 LinuxAndroidLinux
- 為什麼Podman執行容器更安全?
- Podman:一個更安全的執行容器的方式
- 如何在 Windows 上執行 Linux 容器WindowsLinux
- RHCE(podman容器)
- [Docker]在Ubuntu容器中建立sudo使用者DockerUbuntu
- Linux伺服器上配置 sudo 及 sudo命令使用Linux伺服器
- 在 macOS 中使用 PodmanMac
- Linux中無許可權使用sudoLinux
- 轉:在Linux上執行WinFormLinuxORM
- 在無 sudo 許可權的 linux 伺服器上安裝軟體Linux伺服器
- 在OpenShift中執行容器
- Podman中如何執行一個 Linux 虛擬機器?Linux虛擬機
- 在 Azure 上使用 Docker 執行 MonoDockerMono
- 在Linux上以容器方式執行安卓系統的開源專案:WaydroidLinux安卓
- sudo以其他使用者身份身份執行命令-linux命令學習Linux
- 配置 Rational Functional Tester 在 Linux 上執行FunctionLinux
- 使用Systemd執行Docker容器Docker
- 使用docker執行CentOS容器DockerCentOS
- linux sudo命令使用Linux
- 在 Linux 命令列指令碼中執行 sudo 時自動輸入密碼Linux命令列指令碼密碼
- Linux命令su、sudo、sudo su、sudo -i使用和區別Linux
- 教你在 Ubuntu 上使用 LXC 容器Ubuntu
- 在掌上電腦HPiPAQ上執行Linux(轉)Linux
- 使用 LXD 容器執行 Ubuntu CoreUbuntu
- 在Podman、Kubernetes和OpenShift上使用Odo實現Java開發Java
- 在Linux中,如何在Linux中使用LXD進行容器管理?Linux
- 在NuoDB上執行AsteriskAST
- 在window上執行bash
- 如何在 Linux 中不輸入密碼執行 sudo 命令Linux密碼
- Docker 與 Podman 容器管理的比較Docker
- docker(podman)容器設定中文環境Docker
- 在Docker容器中使用Hadoop執行Python MapReduce作業DockerHadoopPython
- 使用 ARChon 執行時環境在 Ubuntu 上執行 Android 應用UbuntuAndroid
- Docker命令-docker exec-在執行的容器中執行命令Docker
- Linux sudo 被曝提權漏洞,任意使用者均能以 root 身份執行命令Linux
- 【Linux】Liunx配置sudo 使oracle使用者有root許可權執行指令碼LinuxOracle指令碼