亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

如何隔離docker容器中的用戶的方法

2024-09-01 13:55:44
字體:
來源:轉載
供稿:網友

筆者在前文《理解 docker 容器中的 uid 和 gid》介紹了 docker 容器中的用戶與宿主機上用戶的關系,得出的結論是:docker 默認沒有隔離宿主機用戶和容器中的用戶。如果你已經了解了 Linux 的 user namespace 技術(參考《Linux Namespace : User》),那么自然會問:docker 為什么不利用 Linux user namespace 實現用戶的隔離呢?事實上,docker 已經實現了相關的功能,只是默認沒有啟用而已。筆者將在本文中介紹如何配置 docker 來隔離容器中的用戶。
說明:本文的演示環境為 ubuntu 16.04。

了解 Linux user namespace

Linux user namespace 為正在運行的進程提供安全相關的隔離(其中包括 uid 和 gid),限制它們對系統資源的訪問,而這些進程卻感覺不到這些限制的存在。關于 Linux User Namespace 的介紹請參考筆者的《Linux Namespace : User》一文。

對于容器而言,阻止權限提升攻擊(privilege-escalation attacks)的最好方法就是使用普通用戶權限運行容器的應用程序。
然而有些應用必須在容器中以 root 用戶來運行,這就是我們使用 user namespace 的最佳場景。我們通過 user namespace 技術,把宿主機中的一個普通用戶(只有普通權限的用戶)映射到容器中的 root 用戶。在容器中,該用戶在自己的 user namespace 中認為自己就是 root,也具有 root 的各種權限,但是對于宿主機上的資源,它只有很有限的訪問權限(普通用戶)。

User namespace 的用戶映射

在配置 docker daemon 啟用 user namespace 前,我需要先來了解一些關于從屬(subordinate)用戶/組和映射(remapping)的概念。從屬用戶和組的映射由兩個配置文件來控制,分別是 /etc/subuid 和 /etc/subgid??聪滤鼈兊哪J內容:在配置 docker daemon 啟用 user namespace 前,我需要先來了解一些關于從屬(subordinate)用戶/組和映射(remapping)的概念:

docker,容器

對于 subuid,這一行記錄的含義為:

用戶 nick,在當前的 user namespace 中具有 65536 個從屬用戶,用戶 ID 為 100000-165535,在一個子 user namespace 中,這些從屬用戶被映射成 ID 為 0-65535 的用戶。subgid 的含義和 subuid 相同。

比如說用戶 nick 在宿主機上只是一個具有普通權限的用戶。我們可以把他的一個從屬 ID(比如 100000 )分配給容器所屬的 user namespace,并把 ID 100000 映射到該 user namespace 中的 uid 0。此時即便容器中的進程具有 root 權限,但也僅僅是在容器所在的 user namespace 中,一旦到了宿主機中,你頂多也就有 nick 用戶的權限而已。

當開啟 docker 對 user namespace 的支持時(docker 的 userns-remap 功能),我們可以指定不同的用戶映射到容器中。比如我們專門創建一個用戶 dockeruser,然后手動設置其 subuid 和 subgid:

nick:100000:65536dockeruser:165536:65536

并把它指定給 docker daemon:

{ "userns-remap": "dockeruser"}

請注意 subuid 的設置信息,我們為 dockeruser 設置的從屬 ID 和 nick 用戶是不重疊的,實際上任何用戶的從屬 ID 設置都是不能重疊的。

或者一切從簡,讓 docker 為我們包辦這些繁瑣的事情,直接把 docker daemon 的 userns-rempa 參數指定為 "default":

{ "userns-remap": "default"}

這時,docker 會自動完成其它的配置。

配置 docker daemon 啟用用戶隔離

這里筆者采取簡單的方式,讓 docker 創建默認的用戶用于 user namespace。我們需要先創建 /etc/docker/daemon.json 文件:

$ sudo touch /etc/docker/daemon.json

然后編輯其內容如下(如果該文件已經存在,僅添加下面的配置項即可),并重啟 docker 服務:

{ "userns-remap": "default"}
$ sudo systemctl restart docker.service

下面我們來驗證幾個關于用戶隔離的幾個點。

首先驗證 docker 創建了一個名為 dockremap 的用戶:

docker,容器

然后查看 /etc/subuid 和 /etc/subgid 文件中是否添加了新用戶 dockremap 相關的項:

docker,容器

接下來我們發現在 /var/lib/docker 目錄下新建了一個目錄: 165536.165536,查看該目錄的權限:

docker,容器

165536 是由用戶 dockremap 映射出來的一個 uid。查看 165536.165536 目錄的內容:

docker,容器

與 /var/lib/docker 目錄下的內容基本一致,說明啟用用戶隔離后文件相關的內容都會放在新建的 165536.165536 目錄下。

通過上面的檢查,我們可以確認 docker daemon 已經啟用了用戶隔離的功能。

宿主機中的 uid 與容器中 uid

在 docker daemon 啟用了用戶隔離的功能后,讓我們看看宿主機中的 uid 與容器中 uid 的變化。

$ docker run -d --name sleepme ubuntu sleep infinity

docker,容器

uid 165536 是用戶 dockremap 的一個從屬 ID,在宿主機中并沒有什么特殊權限。然而容器中的用戶卻是 root,這樣的結果看上去很完美:

docker,容器

新創建的容器會創建 user namespace

在 docker daemon 啟用用戶隔離的功能前,新創建的容器進程和宿主機上的進程在相同的 user namespace 中。也就是說 docker 并沒有為容器創建新的 user namespace:

docker,容器

上圖中的容器進程 sleep 和宿主機上的進程在相同的 user namespace 中(沒有開啟用戶隔離功能的場景)。

在 docker daemon 啟用用戶隔離的功能后,讓我們查看容器中進程的 user namespace:

docker,容器

上圖中的 4404 就是我們剛啟動的容器中 sleep 進程的 PID。可以看出,docker 為容器創建了新的 user namespace。在這個 user namespace 中,容器中的用戶 root 就是天神,擁有至高無上的權力!

訪問數據卷中的文件

我們可以通過訪問數據卷中的文件來證明容器中 root 用戶究竟具有什么樣的權限?創建四個文件,分別屬于用戶 root 、165536 和 nick。rootfile 只有 root 用戶可以讀寫,用戶 nick 具有 nickfile 的讀寫權限,uid 165536 具有文件 165536file 的讀寫權限,任何用戶都可以讀寫 testfile 文件:

docker,容器

下面把這幾個文件以數據卷的方式掛載到容器中,并檢查從容器中訪問它們的權限:

$ docker run -it --name test -w=/testv -v $(pwd)/testv:/testv ubuntu

docker,容器

容器中的 root 用戶只能訪問 165536file 和 testfile,說明這個用戶在宿主機中只有非常有限的權限。

在容器中禁用 user namespace

一旦為 docker daemon 設置了 "userns-remap" 參數,所有的容器默認都會啟用用戶隔離的功能(默認創建一個新的 user namespace)。有些情況下我們可能需要回到沒有開啟用戶隔離的場景,這時可以通過 --userns=host 參數為單個的容器禁用用戶隔離功能。--userns=host 參數主要給下面三個命令使用:

docker container createdocker container rundocker container exec

比如執行下的命令:

$ docker run -d --userns=host --name sleepme ubuntu sleep infinity

查看進程信息:

docker,容器

進程的有效用戶又成 root 了,并且也沒有為進程創建新的 user namespace:

docker,容器

已知問題

User namespace 屬于比較高級的功能,目前 docker 對它的支持還算不上完美,下面是已知的幾個和現有功能不兼容的問題:

  • 共享主機的 PID 或 NET namespace(--pid=host or --network=host)
  • 外部的存儲、數據卷驅動可能不兼容、不支持 user namespace
  • 使用 --privileged 而不指定 --userns=host

總結

Docker 是支持 user namespace 的,并且配置的方式也非常簡便。在開啟 user namespace 之后我們享受到了安全性的提升,但同時也會因為種種限制讓其它的個別功能出現問題。這時我們需要作出選擇,告別一刀切的決策,讓合適的功能出現的合適的場景中。

參考:

Understanding how uid and gid work in Docker containers
Introduction to User Namespaces in Docker Engine
Isolate containers with a user namespace

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄色成人av在线| 亚洲爱爱爱爱爱| 欧美在线视频观看| 午夜精品福利视频| 久久久国产在线视频| 亚洲乱码一区二区| 欧美高清视频在线播放| 午夜美女久久久久爽久久| www.欧美视频| 欧美激情xxxx性bbbb| 麻豆一区二区在线观看| 欧美一区二区大胆人体摄影专业网站| 午夜精品美女自拍福到在线| 精品日韩美女的视频高清| 国产一区二区欧美日韩| 国产精品视频精品视频| 欧美激情影音先锋| 欧美亚洲激情视频| 91精品国产自产在线| 精品女同一区二区三区在线播放| 91精品视频网站| 国产精品欧美激情| 色www亚洲国产张柏芝| 欧美性xxxxhd| 日韩a**中文字幕| 欧美中文在线字幕| 日本免费在线精品| 日韩电影在线观看免费| 色天天综合狠狠色| 国内精品国产三级国产在线专| 日韩中文字幕视频在线观看| 欧美日韩另类在线| www.久久撸.com| 国模精品一区二区三区色天香| 久热在线中文字幕色999舞| 久久久之久亚州精品露出| 亚洲欧洲日产国产网站| 性欧美激情精品| 欧美大片大片在线播放| 九色91av视频| 精品中文字幕乱| 国产欧美 在线欧美| 国产日韩在线视频| 一二美女精品欧洲| 在线观看亚洲视频| 国外成人在线播放| 亚洲欧美精品suv| 欧美高清理论片| 91久热免费在线视频| 欧美激情亚洲激情| 亚洲欧洲国产伦综合| 日韩av综合中文字幕| 久久久久久久电影一区| 久久久久一本一区二区青青蜜月| 欧美成人精品在线观看| 欧美国产视频一区二区| 久久久亚洲网站| 正在播放欧美视频| 欧美人交a欧美精品| 国产精品无av码在线观看| 欧美日韩成人免费| 日韩视频免费在线观看| 国产精品av在线| 久久精品久久久久久国产 免费| 日韩精品在线视频观看| 亚洲专区在线视频| 91产国在线观看动作片喷水| 性欧美xxxx交| 96精品视频在线| 亚洲第一页中文字幕| 九九九热精品免费视频观看网站| 亚洲欧美日韩国产中文专区| 久久久久久久久国产精品| 91国内在线视频| 中文综合在线观看| 黄网动漫久久久| 成人午夜激情免费视频| 色哟哟网站入口亚洲精品| 欧美影院在线播放| 亚洲人成77777在线观看网| 在线电影av不卡网址| 欧美电影在线免费观看网站| 国产精品白丝jk喷水视频一区| 一区二区成人av| 性视频1819p久久| 欧美激情一级欧美精品| 成人午夜在线观看| 亚洲人成欧美中文字幕| 欧美精品免费播放| 中文字幕欧美国内| 欧美一区二区三区图| 日韩视频―中文字幕| 国外成人在线直播| 日韩激情av在线播放| 久久精品国产电影| 国产精品青青在线观看爽香蕉| 亚洲人成电影在线| 国产一区二区三区在线播放免费观看| 欧美裸身视频免费观看| 亚洲激情电影中文字幕| 亚洲精品成人av| 中文字幕av一区中文字幕天堂| 91欧美精品成人综合在线观看| 国产精品国语对白| 午夜免费日韩视频| 日韩中文字幕第一页| 亚洲欧美一区二区三区情侣bbw| 亚洲精品永久免费精品| 午夜精品久久久久久99热软件| 欧美另类极品videosbestfree| 伊人av综合网| 亚洲成色999久久网站| 亚洲精品av在线播放| 中日韩美女免费视频网站在线观看| 亚洲综合色激情五月| 亚洲欧美综合区自拍另类| 亚洲国产精品美女| 欧美电影免费在线观看| 成人免费淫片视频软件| 九九久久久久久久久激情| …久久精品99久久香蕉国产| 亚洲福利小视频| 亚洲一区二区三区香蕉| 91亚洲精品久久久久久久久久久久| 国产97色在线|日韩| 中文字幕国内精品| 欧美精品电影免费在线观看| 一区二区三区视频免费在线观看| 8050国产精品久久久久久| 欧美成人中文字幕| 亚洲第一偷拍网| 亚洲欧美资源在线| 国精产品一区一区三区有限在线| 日韩欧美成人精品| 亚洲直播在线一区| 亚洲成av人影院在线观看| 久久成人av网站| 国产精品第三页| 久久精品一偷一偷国产| 国产欧美一区二区白浆黑人| 成人精品福利视频| 黄色一区二区在线观看| 亚洲欧美日韩精品久久亚洲区| 国产丝袜一区二区三区免费视频| 国产精品日韩电影| 国产精品情侣自拍| 中文字幕精品国产| 欧美成人精品h版在线观看| 久久99久久99精品免观看粉嫩| 成人福利在线视频| 亚洲成成品网站| 欧美成aaa人片在线观看蜜臀| 国产视频精品一区二区三区| 日韩毛片在线观看| 一本久久综合亚洲鲁鲁| 久久久999精品免费| 亚洲欧美精品伊人久久| 国产午夜精品麻豆| 欧美夜福利tv在线| 国产精品男女猛烈高潮激情| 亚洲欧洲自拍偷拍| 欧美日韩中文字幕日韩欧美| 91人人爽人人爽人人精88v| 日韩激情视频在线播放|