与Fedora容器化中的功能结合使用是一项蓬勃发展的技术。在不久的将来,多达75%的全球组织可能正在运行某种类型的容器化技术。保护容器就显得尤为重要,因为广泛使用的技术更容易成为黑客的目标。本文将演示如何使用POSIX功能来保护Podman容器。Podman是RHEL8中默认的容器管理工具。确定Podman容器的特权模式,无论容器以特权模式还是非特权模式运行。在特权模式下,容器uid0映射到主机uid0。在某些情况下,非特权容器缺乏对主机资源的足够访问权限。但无论其运行方式如何,包括强制访问控制(MAC:如apparmor、SELinux等)、seccomp过滤器、删除能力、命名空间等技术都有助于确保容器的安全。从容器外部确定特权模式:$podmaninspect--format="{{.HostConfig.Privileged}}"如果上述命令返回true,则容器在特权模式下运行。如果返回false,则容器以非特权模式运行。从容器内部确定特权模式:$iplinkadddummy0typedummy如果该命令允许您创建接口,那么您正在运行一个特权容器,否则您正在运行一个非特权容器。capability命名空间隔离了容器的进程,使其不能随意访问宿主机的资源,也不能访问同一宿主机上运行的其他容器的资源。但是,特权容器内的进程仍然可以执行更改IP路由表、跟踪任意进程和加载内核模块等操作。能力允许对容器内的进程可以访问或更改的资源施加更细粒度的限制,即使容器以特权模式运行也是如此。功能还允许将特权分配给非特权容器,否则它不会拥有这些特权。例如,如果要将NET_ADMIN功能添加到非特权容器以便在容器内创建网络接口,则可以使用以下参数运行podman:[root@vm1~]#podmanrun-it--cap-add=NET_ADMINcentos[root@b27fea33ccf1/]#iplinkadddummy0typedummy[root@b27fea33ccf1/]#iplink上面的命令演示了在非特权容器中创建一个dummy0接口。没有NET_ADMIN能力,非特权容器无法创建接口。上面的命令演示了如何向非特权容器授予能力。目前,大约有39种能力可以授予或拒绝。默认情况下,特权容器被授予许多功能。建议从特权容器中删除不需要的功能,以使其更安全。从容器中删除所有功能:$podmanrun-it-d--namemycontainer--cap-drop=allcentos列出容器的功能:$podmanexec-it48f11d9fa512capsh--print上面的命令显示没有capsh被添加到容器授予任何权限。请参阅capabilities手册页以获取完整的功能列表:$mancapabilities您可以使用capsh命令列出当前拥有的功能:$capsh--print作为另一个示例,以下命令演示了如何从一个文件中删除NET_RAW功能容器。如果没有NET_RAW能力,就不可能从容器内ping互联网上的服务器。$podmanrun-it--namemycontainer1--cap-drop=net_rawcentos>>>pinggoogle.com(将输出错误,不允许操作)作为最后一个例子,如果你的容器只需要SETUID和SETGID能力,你可以去掉所有的capabilities,然后重新只添加这两个capabilities,就可以实现这样的权限设置。$podmanrun-d--cap-drop=all--cap-add=setuid--cap-add=setgidfedorasleep5>/dev/null;pscap|grepsleep上面的pscap命令将显示授予容器的能力。我希望您喜欢这篇关于如何使用功能来保护Podman容器的简短探索。谢谢!