http://www.nulj.cn

首页 所有文章 归档 留言 关于我

在Fedora中结合权能使用Podman|Linux中国_Linux中国

编辑:李靖2021/3/18993次阅读阅读转载: Linux中国
 导读:本文将演示如何使用 POSIX 权能Capability 来保护 Podman 容器的安全。Podman 是 RHEL8 中默认的容器管理工具。本文字数:2239,阅读时长大约:3分钟https://linux.cn/article-12859-1.html作者:Shiwanibiradar译者:geekpi

容器化是一项蓬勃发展的技术。在不久的将来,多达百分之七十五的全球组织可能会运行某种类型的容器化技术。由于广泛使用的技术更容易成为黑客攻击的目标,因此保护容器的安全就显得尤为重要。本文将演示如何使用 POSIX权能(Capability) 来保护 Podman 容器的安全。Podman 是 RHEL8 中默认的容器管理工具。

确定 Podman 容器的权限模式

容器以特权模式或无特权模式运行。在特权模式下,容器的 uid 0 被映射到宿主机的 uid 0。对于某些情况,无特权的容器缺乏对宿主机资源的充分访问能力。但不管其操作模式如何,包括强制访问控制(Mandatory Access Control)(MAC:如 apparmor、SELinux 等)、seccomp 过滤器、删除权能(Capability)、命名空间等在内的技术有助于确保容器的安全。

要从容器外部确定特权模式:

  • $ podman inspect --format="{{.HostConfig.Privileged}}" <container id>
  • 如果上面的命令返回 true,那么容器在特权模式下运行。如果返回 false,那么容器在非特权模式下运行。

    要从容器内部确定特权模式:

  • $ ip link add dummy0 type dummy
  • 如果该命令允许你创建一个接口,那么你运行的是一个特权容器,否则你运行的是一个非特权容器。

    权能

    命名空间隔离了容器的进程,使其无法任意访问宿主机的资源,也无法访问在同一宿主机上运行的其他容器的资源。然而,在特权容器内的进程仍然可以做一些事情,如改变 IP 路由表、跟踪任意进程和加载内核模块。权能(Capability)允许人们对容器内的进程可以访问或更改的资源施加更细微的限制,即使容器在特权模式下运行也一样。权能还允许人们为无特权的容器分配它本来不会拥有的特权。

    例如,如果要将 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中国 荣誉推出

    感谢阅读,如果觉得本文对您有帮助,请给我点个,或者把本文的网址复制分享其它好友。
    本文网址:http://www.nulj.cn/k/2199.html复制
    写博客不容易,服务器成本也很高,感谢谢支持。微信打赏红包

    发表评论

    李靖的博客

    大家好,我是李靖,不是封神榜的托塔天王李靖。我只是一个普通的上班族,1991年出生于湖南邵阳市。我喜欢看书/看电影/摄影/打手游。感谢你访问我的博客,我在博客中会经常分享我喜欢的文章。创建这个博客记录生活,让我学会很多知识也认识了很多朋友。
    关于我的更多资料>>

    支持博主

    写博客不容易,服务器成本也很高。您可以用微信给我发个小红包。疾风知劲草,板荡识诚臣。你的支持就是我的动力。谢谢!
    垃圾信息处理邮箱tousu117@163.com icp备案号 粤ICP备10034762号 互联网安全管理备案 不良信息举报平台 Copyright 2021 www.nulj.cn All Rights Reserved