## docker進行資源隔離的6種namespace
|namespace|隔離內容|內核版本|
|---|---|---|
|UTS|主機名與域名|Linux 2.6.19|
|IPC|信號量,消息隊列和共享內存|Linux 2.6.19|
|PID|進程編號|Linux 2.6.24|
|Network|網絡設備,網絡棧,端口|始于Linux 2.6.24 完成于 Linux 2.6.29|
|Mount|文件掛載|Linux 2.4.19|
|User|用戶用戶組| 始于 Linux 2.6.23 完成于 Linux 3.8|
**其中User namespace是從docker1.10開始被支持,并且不是默認開啟的.**
以上內容不是這篇文章的重點,此篇文章主要是介紹user namespace
## 一.User namespace的作用
docker 使用namespace進行資源隔離,其中一種是user namespace.user namespace主要隔離了安全相關的標識符和屬性,包括用戶ID,用戶組Id,root目錄,key(密鑰)以及特殊權限.
默認的情況下,docker容器使用的root用戶和宿主機的root用戶是同一個用戶,盡管可以限制容器內root用戶的權限(capability),但本質上仍然和宿主機root用戶是同一個用戶.
有了user namespace之后,我們就可以將宿主機上的普通用戶映射為容器的root用戶,這樣容器中的實際用戶為普通用戶權限,可以將容器的安全程度提高一個等級!
### 實驗一:不使用user namespace進行資源隔離
* 運行一個容器
```
docker run -it ubuntu:14.04 top
```
* 另外開一個終端,查看該容器進程在宿主機上的用戶
```
~$ ps -aux|grep top
root 18724 0.2 0.0 19848 2400 pts/15 Ss+ 14:16 0:00 top
```
可以看到,運行top命令的用戶是root,即容器中的root用戶就是宿主機的root用戶
### 實驗二:使用user namespace進行資源隔離
#### 配置實現
* 運行docker deamon進程的時候加入參數`--userns-remap=default`,如:ubuntu中是修改/etc/default/docker中的DOCKER_OPTS,追加配置`--userns-remap=default`
* 重啟docker deamon,如:ubuntu中是使用`service docker restart`
#### 實驗內容
* 運行一個容器
```
docker run -it ubuntu:14.04 top
```
* 另外開一個終端,查看該容器進程在宿主機上的用戶
```
~$ ps -aux|grep top
165536 19347 0.1 0.0 19848 2424 pts/15 Ss+ 14:32 0:00 top
```
可以看到,在宿主機上top命令的執行使用的用戶是165536(uid),不是root
* 看看容器內的top命令的輸出
```
1 root 20 0 19848 2424 2108 R 0.0 0.0 0:00.07 top
```
容器內,看上去仍然是root用戶.即:有了user namespace之后,我們就可以將宿主機上的普通用戶映射為容器的root用戶.
那么,有一個問題?這個普通用戶是誰?
## 二.user namespace的默認映射用戶
上面的實驗中,我們已經使用了user namespace的最簡化配置.即:`--userns-remap=default`
實際上,docker新建了一個用戶和用戶組都叫做dockremap,容器內的root用戶映射到宿主機的這個dockremap用戶上.
```
$ cat /etc/passwd
……
dockremap:x:10000:10000:,,,:/home/dockremap:/bin/false
$ cat /etc/subuid
……
dockremap:165536:65536
$ cat /etc/subgid
……
dockremap:165536:65536
```
## 三.自定義映射用戶
首先在宿主機上創建用戶及用戶組,在啟動docker deamon的時候傳入如下參數.
* --userns-remap=<uid>
* --userns-remap=<uid>:<gid>
* --userns-remap=<username>
* --userns-remap=<username>:<groupname>
- 版權
- 博客主題
- 如何不去做運行3.5G-docker鏡像的工程師
- 預備主題
- FastDFS快速入門
- mysql定時創建月表
- SpringMVC-Restful
- Docker生態系統
- The Docker Ecosystem: An Introduction to Common Components
- docker監控指標
- 基于etcd服務發現的overlay跨多宿主機容器網絡
- etcd:從應用場景到實現原理的全方位解讀
- docker存儲驅動詳解
- 使用docker/engine-api操作docker
- 提升Docker安全性
- docker安全之用戶資源隔離
- marathon
- 開始
- 安裝mararhon
- 高可用模式
- 使用marathon
- 應用的部署
- 架構組件
- Dubbo與Zookeeper、SpringMVC整合和使用(負載均衡、容錯)
- Openstack架構解析
- haproxy
- Ubuntu系統安裝截圖
- mesos官方文檔
- 關于譯者
- mesos基礎
- Mesos架構
- 視頻與ppt
- 讓mesos跑起來
- 快速入門
- 配置
- Containerizer
- Docker Containerizer
- 監控
- 博客文章集
- 煮餃子與mesos之間妙不可言的關系
- linux運維
- 基礎篇
- 進階篇
- mysql
- Ubuntu14.04安裝mysql5.6
- MySQL 5.6 replicate原理與實踐
- mysql性能
- redis
- redis安裝及基礎知識
- redis數據結構
- redis命令
- redis數據持久化
- Redis主從復制
- redis集群
- 其他