在 Fedora 中結合權能使用 Podman
容器化是一項蓬勃發展的技術。在不久的將來,多達百分之七十五的全球組織可能會執行某種型別的容器化技術。由於廣泛使用的技術更容易成為駭客攻擊的目標,因此保護容器的安全就顯得尤為重要。本文將演示如何使用 POSIX 權能 來保護 Podman 容器的安全。Podman 是 RHEL8 中預設的容器管理工具。
確定 Podman 容器的許可權模式
容器以特權模式或無特權模式執行。在特權模式下,容器的 uid 0 被對映到宿主機的 uid 0。對於某些情況,無特權的容器缺乏對宿主機資源的充分訪問能力。但不管其操作模式如何,包括強制訪問控制(MAC:如 apparmor、SELinux 等)、seccomp 過濾器、刪除權能、名稱空間等在內的技術有助於確保容器的安全。
要從容器外部確定特權模式:
$ podman inspect --format="{{.HostConfig.Privileged}}" <container id>
如果上面的命令返回 true
,那麼容器在特權模式下執行。如果返回 false
,那麼容器在非特權模式下執行。
要從容器內部確定特權模式:
$ ip link add dummy0 type dummy
如果該命令允許你建立一個介面,那麼你執行的是一個特權容器,否則你執行的是一個非特權容器。
權能
名稱空間隔離了容器的程序,使其無法任意訪問宿主機的資源,也無法訪問在同一宿主機上執行的其他容器的資源。然而,在特權容器內的程序仍然可以做一些事情,如改變 IP 路由表、跟蹤任意程序和載入核心模組。權能允許人們對容器內的程序可以訪問或更改的資源施加更細微的限制,即使容器在特權模式下執行也一樣。權能還允許人們為無特權的容器分配它本來不會擁有的特權。
例如,如果要將 NET_ADMIN
功能新增到一個無特權的容器中,以便在容器內部建立一個網路介面,你可以用下面的引數執行 podman
:
[root@vm1 ~]# podman run -it --cap-add=NET_ADMIN centos
[root@b27fea33ccf1 /]# ip link add dummy0 type dummy
[root@b27fea33ccf1 /]# ip link
上面的命令演示了在一個無特權的容器中建立一個 dummy0
介面。如果沒有 NET_ADMIN
權能,非特權容器將無法建立介面。上面的命令演示瞭如何將一個權能授予一個無特權的容器。
目前,大約有 39 種權能可以被授予或拒絕。特權容器預設會被授予許多權能。建議從特權容器中刪除不需要的權能,以使其更加安全。
要從容器中刪除所有權能:
$ podman run -it -d --name mycontainer --cap-drop=all centos
列出一個容器的權能:
$ podman exec -it 48f11d9fa512 capsh --print
上述命令顯示沒有向容器授予任何權能。
請參考 capabilities
手冊頁以獲取完整的權能列表:
$ man capabilities
可以使用 capsh
命令來列出目前擁有的權能:
$ capsh --print
作為另一個例子,下面的命令演示瞭如何從容器中刪除 NET_RAW
權能。如果沒有 NET_RAW
權能,就不能從容器中 ping
網際網路上的伺服器。
$ podman run -it --name mycontainer1 --cap-drop=net_raw centos
>>> ping google.com (will output error, operation not permitted)
最後一個例子,如果你的容器只需要 SETUID
和 SETGID
權能,你可以刪除所有權能,然後只重新新增這兩個權能來實現這樣的許可權設定。
$ podman run -d --cap-drop=all --cap-add=setuid --cap-add=setgid fedora sleep 5 > /dev/null; pscap | grep sleep
上面的 pscap
命令會顯示容器被授予的權能。
我希望你喜歡這個關於如何使用權能來保護 Podman 容器的簡短探索。
謝謝!
via: https://fedoramagazine.org/podman-with-capabilities-on-fedora/
作者:shiwanibiradar 選題:lujun9972 譯者:geekpi 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
相關文章
- 在 macOS 中使用 PodmanMac
- 在 Fedora 中利用 ffsend 使用 Firefox SendFirefox
- 在WSL2的Ubuntu中安裝和使用Docker/PodmanUbuntuDocker
- 在 Fedora 中使用私人助理 Mycroft
- Fedora 中如何使用 Firefox Send?Firefox
- podman安裝和普通使用者使用podman的方式及podman常用命令
- 在 Fedora 上使用 SSH 埠轉發
- 無需sudo使用Podman在Linux上執行容器Linux
- 在 Fedora 中獲取最新的 Ansible 2.8
- 在 Fedora 上使用 GIMP 輕鬆編輯影像
- 在 Fedora 上使用 GIMP 輕鬆編輯影象
- 使用 Eclipse 在 Fedora 上進行 PHP 開發EclipsePHP
- 在 Fedora 中使用 Cockpit 建立虛擬機器KPI虛擬機
- 在Podman、Kubernetes和OpenShift上使用Odo實現Java開發Java
- 在 Fedora 中安裝替代版本的 RPM 包
- 如何結合phpstorm配置在docker中的xdebugPHPORMDocker
- 在Fedora 30系統中安裝深度DDE桌面
- k8s結合jumpserver做kubectl許可權控制 使用者在多個namespaces的訪問許可權 rbac許可權控制K8SServernamespace訪問許可權
- 07_NET中Ocelot結合Consult使用
- Podman
- 如何使用 systemd-resolved 在 Fedora 上配置 DNS over TLSDNSTLS
- Fedora中的vim
- Redux在React中的使用小結ReduxReact
- SSRF結合Redis未授權的打法Redis
- 《Afterlight》:在遊戲設計中結合象徵符號遊戲設計符號
- 怎麼在 Fedora 中建立我的第一個 RPM 包?
- 3 款在 Fedora 中管理個人財務的應用
- 開源容器 Podman 常用命令總結!
- 【轉載】在Android中使用Rust:Rust與Android的結合AndroidRust
- 結合scipy.linalg在Python中使用線性系統Python
- 在MVC中配置鑑權MVC
- Go和JavaScript結合使用:抓取網頁中的影像連結GoJavaScript網頁
- 如何在 Windows 使用 Podman Desktop 取代 Docker DesktopWindowsDocker
- Podman Desktop安裝與使用-Windows10Windows
- 使用 Bitwarden 和 Podman 管理你的密碼密碼
- Akash Angle:你如何使用 Fedora?
- Fedora 29 使用 SCL (Software Collections)
- 在 Fedora 上優化 bash 或 zsh優化