最佳体验请使用Chrome67及以上版本、火狐、Edge、Safari浏览器 ×

创建银行
创建开票

    如何运行没有Root权限的Docker?

    编者:全 然@勾股弦数据 阅读87 来源: 微信公众号 2024/09/11 01:51:38 文章 外链 公开

    Rootless模式的目的是让Docker守护进程以非root用户身份运行。该方案以实验特性的方式在v19.03版本引入,并在v20.10版本成为正式功能。

    实践

    官方文档已经做了详细的介绍,这里仅仅做一下实践复现。

    具体实践环境为:

    • CentOS 7.2

    • docker-ce 23.0.0

    详细安装升级过程就略过了。CentOS 7.2上默认安装的docker 是1.13版本,需要升级到v20.10以上版本。

    ‍

    第一步,用户准备。

    准备一个普通用户u,后续就使用它来运行docker了。配置subuid、subgid、max_user_namespaces等信息,做好准备工作。

    useradd rootless

    图片

    sysctl user.max_user_namespaces=28633

    ‍

    第二步,从官方下载rootless脚本,并运行。

    curl -fsSL https://get.docker.com/rootless | sh


    图片


    运行成功后,会在用户目录下创建bin目录,包含了dockerd-rootless.sh等文件。


    图片


    根据提示需要设置一些环境变量。可以把环境变量配置写入~/.bashrc,并执行source ~/.bashrc命令使之生效。

    export XDG_RUNTIME_DIR=/home/u/.docker/run
    export PATH=/home/u/bin:$PATH
    export DOCKER_HOST=unix:///home/u/.docker/run/docker.sock


    第三步,启动docker服务。

    一般情况下,可以使用systemctl方式运行,在后台启动docker服务。

    $ systemctl --user restart docker

    但是 CentOS 7 不支持这种方式,可以直接运行dockerd-rootless.sh脚本来启动docker服务。

    $ dockerd-rootless.sh

    运行后,可以看到docker的服务都是以普通用户u的身份运行。

    图片

    使用rootless模式后,从安全角度考虑,也就没必要再使用root以及其他用户操作docker了。

    ‍

    效果

    在rootless模式下启动nginx容器后。

    容器内,依然可以看到root身份的master进程和nginx身份的worker进程。此时容器内应用以为自己使用的是root用户身份。

    图片

    实际上,宿主机上,因为user namespaces机制的缘故,这些进程也只是普通用户身份。

    图片

    总结

    Docker Rootless模式是官方提供的一种安全解决方案,可以让Docker守护进程以普通用户身份运行,从而避免容器应用利用Docker漏洞获得宿主机root权限的风险。

    另外,要注意的是因为Docker作为容器本身需要利用很多系统高级特性,因此Docker守护进程以非Root身份运行实际上也会导致一些功能受限。这点可以参与官方文档详细了解。

    至此Docker的用户安全机制,基本了解完毕。只要清楚地掌握容器的安全机制,做好日常安全管理和风险响应,可以为容器应用化提供较好的安全保障。



    声明:本网站部分内容来源于网络,版权归原权利人所有,其观点不代表本网站立场;本网站视频或图片制作权归当前商户及其作者,涉及未经授权的制作均须标记“样稿”。如内容侵犯了您相关权利,请及时通过邮箱service@ichub.com与我们联系。
     0  0

    微信扫一扫:分享

    微信里点“+”,扫一扫二维码

    便可将本文分享至朋友圈。

      
    
    
    分享
     0
      验证