docker的user namespace功能

docker的user namespace功能:

默认情况下:
容器默认是以root账号进入的,即使指定默认账号,用户也可以通过--user 0来切到root账号,容器里的root和宿主机的root是同一性质,-v挂载宿主机任意目录后,可通过容器里的root账号对宿主机数据进行破坏,风险很大

user namespace功能可以规避这一问题,user namespace可以让容器有一个“假”的root用户,它在容器内是root,被映射到容器外一个非root用户,也就是说user namespace实现了host users和container users之间的映射。

检查linux操作系统是否支持user namespace:

uname -a

cat /boot/config-xxxxx | grep CONFIG_USER_NS (显示为y即为支持)

Ubuntu 16.04配置docker使用user namespace:

vi /lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --userns-remap=default -H fd:// --containerd=/run/containerd/containerd.sock

:wq

systemctl restart docker

ps -ef | grep dockerd (看到--userns-remap=default即生效了)

此时创建的容器里的root账号权限范围同创建容器的账号

原文地址:https://blog.51cto.com/yangzhiming/2384688

时间: 2024-08-30 13:52:26

docker的user namespace功能的相关文章

理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境

1. 基础知识:Linux namespace 的概念 Linux 内核从版本 2.4.19 开始陆续引入了 namespace 的概念.其目的是将某个特定的全局系统资源(global system resource)通过抽象方法使得namespace 中的进程看起来拥有它们自己的隔离的全局系统资源实例(The purpose of each namespace is to wrap a particular global system resource in an abstraction th

Docker 1.13 – 新增功能大揭秘

前言 Docker 1.13 马上就要发布了.从 7 月 29 日发布 1.12 发布以来,已经过去 4 个多月了,对于活跃的 Docker 社区来说,已经很久了,让我们看看都 1.13 都新增了什么内容吧. 1.13 有一千二百多个 issue/pull request,四千多个 commits,是历史上最高的.这并不是一个简单的小版本变化,里面有大量的更新. 要想测试 1.13.0 的新功能,可以起一个新的机器,然后在里面运行:curl -fsSL https://test.docker.c

Docker 1 12新功能探索(7) 服务编排三剑客简单总结

docker内置编排功能和目前成熟的编排工具相比可能还略显弱势,但是毕竟它是docker原生态的工具,占有地利的得天独厚的优势.同时目前内置swarm/node/service"三剑客"所组成的组合也能对普通的编排和应用场景提供足够的支持.本文将对docker1.12中这三小件进行简单总结. docker swarm 操作 详细说明 init 初期化集群 join 以node(worker)或者manager的身份加入集群 join-token 管理join-token update

Docker之Linux Namespace

Linux Namespace 介绍 我们经常听到说Docker 是一个使用了Linux Namespace 和 Cgroups 的虚拟化工具,但是什么是Linux Namespace 它在Docker内是怎么被使用的,说到这里很多人就会迷茫,下面我们就先介绍一下Linux Namespace 以及它们是如何在容器里面使用的. 概念 Linux Namespace 是kernel 的一个功能,它可以隔离一系列系统的资源,比如PID(Process ID),User ID, Network等等.一

Docker底层基石namespace与cgroup

容器本质上是把系统中为同一个业务目标服务的相关进程合成一组,放在一个叫做namespace的空间中,同一个namespace中的进程能够互相通信,但看不见其他namespace中的进程.每个namespace可以拥有自己独立的主机名.进程ID系统.IPC.网络.文件系统.用户等等资源.在某种程度上,实现了一个简单的虚拟:让一个主机上可以同时运行多个互不感知的系统. 此外,为了限制namespace对物理资源的使用,对进程能使用的CPU.内存等资源需要做一定的限制.这就是Cgroup技术,Cgro

Docker 1 12新功能探索(9) network基础

docker1.12中的network功能作了一定改进, 但是关于network应该如何使用,docker中的网络模型是如何设计的,当我们在run起来一个container而全然没有意识到network的时候,docker是怎样处理的,在这篇文章中,我们回去尝试一探究竟. docker1.12有关network的特性增加 特性 Built-in Virtual-IP based internal and ingress load-balancing using IPVS Routing Mesh

Docker底层技术Namespace & Cgroup应用

Docker底层技术: docker底层的2个核心技术分别是Namespaces和Control groupsNamespace:是容器虚拟化的核心技术,用来隔离各个容器,可解决容器之间的冲突. 主要通过以下六项隔离技术来实现:有两个伪文件系统:/proc和/sys/ UTS:允许每个container拥有独立的hostname(主机名)和domainname(域名),使其在网络上可以被视作一个独立的节点而非Host上的一个进程. IPC:contaner中进程交互还是采用linux常见的进程间

Docker 1 12新功能探索(8) Remote Api 1 24

Docker的Remote Api并不是1.12才有的,Docker1.12的Remote Api升到了1.24.Remote api的使用在1.12中没有大的变化,稍微大一点的变化是到这个版本之后,二进制文件分裂成了主client的docker以及主server的dockerd了.在centos上通过systemd的配置变化不大,无非是将tcp://ip:port设定到启动的Option中而已,下面来看一下如何设定和简单使用. 事前确认 可以看到只有unix socket的方式 [[email

Docker 1 12新功能探索(4) 1分钟创建集群

在这篇文章里面我们将会通过创建一个极其简单的3个节点的集群来学习一下docker swarm 模式的使用方法.这个1.12版本中最引人关注的部分到底使用的感觉如何.因为没有在大型的生产环境中进行严格的比较,单从研究性质或者小规模的集群的创建的感觉来说和kubernetes的集群创建不相上下,使用方便,在准备妥当的情况下,手速快的朋友1分钟之内完全能够创建完毕. 事前确认 [[email protected] ~]# docker info |egrep 'Manager|Version' WAR