婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入理解docker容器中的uid和gid

深入理解docker容器中的uid和gid

熱門標(biāo)簽:臨汾電銷機器人費用 地圖標(biāo)注w是什么方向 400電話申請找哪家公司 新鄉(xiāng)人工智能電話機器人加盟 福州呼叫中心外呼系統(tǒng)哪家好 七大洲地圖標(biāo)注 河南省鄭州市地圖標(biāo)注 地圖標(biāo)注需要提交啥資料入駐 昆明外呼系統(tǒng)

默認情況下,容器中的進程以 root 用戶權(quán)限運行,并且這個 root 用戶和宿主機中的 root 是同一個用戶。聽起來是不是很可怕,因為這就意味著一旦容器中的進程有了適當(dāng)?shù)臋C會,它就可以控制宿主機上的一切!本文我們將嘗試了解用戶名、組名、用戶 id(uid)和組 id(gid)如何在容器內(nèi)的進程和主機系統(tǒng)之間映射,這對于系統(tǒng)的安全來說是非常重要的。說明:本文的演示環(huán)境為 ubuntu 16.04(下圖來自互聯(lián)網(wǎng))。

先來了解下 uid 和 gid

uid 和 gid 由 Linux 內(nèi)核負責(zé)管理,并通過內(nèi)核級別的系統(tǒng)調(diào)用來決定是否應(yīng)該為某個請求授予特權(quán)。比如當(dāng)進程試圖寫入文件時,內(nèi)核會檢查創(chuàng)建進程的 uid 和 gid,以確定它是否有足夠的權(quán)限修改文件。注意,內(nèi)核使用的是 uid 和 gid,而不是用戶名和組名。

簡單起見,本文中剩下的部分只拿 uid 進行舉例,系統(tǒng)對待 gid 的方式和 uid 基本相同。

很多同學(xué)簡單地把 docker 容器理解為輕量的虛擬機,雖然這簡化了理解容器技術(shù)的難度但是也容易帶來很多的誤解。事實上,與虛擬機技術(shù)不同:同一主機上運行的所有容器共享同一個內(nèi)核(主機的內(nèi)核)。容器化帶來的巨大價值在于所有這些獨立的容器(其實是進程)可以共享一個內(nèi)核。這意味著即使由成百上千的容器運行在 docker 宿主機上,但內(nèi)核控制的 uid 和 gid 則仍然只有一套。所以同一個 uid 在宿主機和容器中代表的是同一個用戶(即便在不同的地方顯示了不同的用戶名)。

注意,由于普通的用來顯示用戶名的 Linux 工具并不屬于內(nèi)核(比如 id 等命令),所以我們可能會看到同一個 uid 在不同的容器中顯示為不同的用戶名。但是對于相同的 uid 不能有不同的特權(quán),即使在不同的容器中也是如此。

如果你已經(jīng)了解了 Linux 的 user namespace 技術(shù),參考《Linux Namespace : User》,你需要注意的是到目前為止,docker 默認并沒有啟用 user namesapce,這也是本文討論的情況。筆者會在接下來的文章中介紹如何配置 docker 啟用 user namespace。

容器中默認使用 root 用戶

如果不做相關(guān)的設(shè)置,容器中的進程默認以 root 用戶權(quán)限啟動,下面的 demo 使用 ubuntu 鏡像運行 sleep 程序:

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

注意上面的命令中并沒有使用 sudo。筆者在宿主機中的登錄用戶是 nick,uid 為 1000:

在宿主機中查看 sleep 進程的信息:

$ ps aux | grep sleep

sleep 進程的有效用戶名稱是 root,也就是說 sleep 進程具有 root 權(quán)限。

然后進入容器內(nèi)部看看,看到的情況和剛才一樣,sleep 進程也具有 root 權(quán)限:

那么,容器內(nèi)的 root 用戶和宿主機上的 root 用戶是同一個嗎?

答案是:是的,它們對應(yīng)的是同一個 uid。原因我們在前面已經(jīng)解釋過了:整個系統(tǒng)共享同一個內(nèi)核,而內(nèi)核只管理一套 uid 和 gid。

其實我們可以通過數(shù)據(jù)卷來簡單的驗證上面的結(jié)論。在宿主機上創(chuàng)建一個只有 root 用戶可以讀寫的文件:

然后掛載到容器中:

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

在容器中可以讀寫該文件:

我們可以通過 Dockerfile 中的 USER 命令或者是 docker run 命令的 --user 參數(shù)指定容器中進程的用戶身份。下面我們分別來探究這兩種情況。

在 Dockerfile 中指定用戶身份

我們可以在 Dockerfile 中添加一個用戶 appuser,并使用 USER 命令指定以該用戶的身份運行程序,Dockerfile 的內(nèi)容如下:

FROM ubuntu
RUN useradd -r -u 1000 -g appuser
USER appuser
ENTRYPOINT ["sleep", "infinity"]

編譯成名稱為 test 的鏡像:

$ docker build -t test .

用 test 鏡像啟動一個容器:

$ docker run -d --name sleepme test

在宿主機中查看 sleep 進程的信息:

這次顯示的有效用戶是 nick,這是因為在宿主機中,uid 為 1000 的用戶的名稱為 nick。再進入到容器中看看:

$ docker exec -it sleepme bash

容器中的當(dāng)前用戶就是我們設(shè)置的 appuser,如果查看容器中的 /etc/passwd 文件,你會發(fā)現(xiàn) appuser 的 uid 就是 1000,這和宿主機中用戶 nick 的 uid 是一樣的。

讓我們再創(chuàng)建一個只有用戶 nick 可以讀寫的文件:

同樣以數(shù)據(jù)卷的方式把它掛載到容器中:

$ docker run -d --name sleepme -w=/testv -v $(pwd)/testv:/testv test

在容器中 testfile 的所有者居然變成了 appuser,當(dāng)然 appuser 也就有權(quán)限讀寫該文件。

這里到底發(fā)生了什么?而這些又這說明了什么?

首先,宿主機系統(tǒng)中存在一個 uid 為 1000 的用戶 nick。其次容器中的程序是以 appuser 的身份運行的,這是由我們通過 USER appuser 命令在 Dockerfile 程序中指定的。

事實上,系統(tǒng)內(nèi)核管理的 uid 1000 只有一個,在宿主機中它被認為是用戶 nick,而在容器中,它則被認為是用戶 appuser。
所以有一點我們需要清楚:在容器內(nèi)部,用戶 appuser 能夠獲取容器外部用戶 nick 的權(quán)利和特權(quán)。在宿主機上授予用戶 nick 或 uid 1000 的特權(quán)也將授予容器內(nèi)的 appuser。

從命令行參數(shù)中自定用戶身份

我們還可以通過 docker run 命令的 --user 參數(shù)指定容器中進程的用戶身份。比如執(zhí)行下面的命令:

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

因為我們在命令行上指令了參數(shù) --user 1000,所以這里 sleep 進程的有效用戶顯示為 nick。進入到容器內(nèi)部看一下:

$ docker exec -it sleepme bash

這是個什么情況?用戶名稱居然顯示為 "I have no name!"!去查看 /etc/passwd 文件,里面果然沒有 uid 為 1000 的用戶。即便沒有用戶名稱,也絲毫不影響該用戶身份的權(quán)限,它依然可以讀寫只有 nick 用戶才能讀寫的文件,并且用戶信息也由 uid 代替了用戶名:

需要注意的是,在創(chuàng)建容器時通過 docker run --user 指定的用戶身份會覆蓋掉 Dockerfile 中指定的值。
我們重新通過 test 鏡像來運行兩個容器:

$ docker run -d test

查看 sleep 進程信息:

$ docker run --user 0 -d test

再次查看 sleep 進程信息:

指定了 --urser 0 參數(shù)的進程顯示有效用戶為 root,說明命令行參數(shù) --user 0 覆蓋掉了 Dockerfile 中 USER 命令的設(shè)置。

總結(jié)

從本文中的示例我們可以了解到,容器中運行的進程同樣具有訪問主機資源的權(quán)限(docker 默認并沒有對用戶進行隔離),當(dāng)然一般情況下容器技術(shù)會把容器中進程的可見資源封鎖在容器中。但是通過我們演示的對數(shù)據(jù)卷中文件的操作可以看出,一旦容器中的進程有機會訪問到宿主機的資源,它的權(quán)限和宿主機上用戶的權(quán)限是一樣的。所以比較安全的做法是為容器中的進程指定一個具有合適權(quán)限的用戶,而不要使用默認的 root 用戶。當(dāng)然還有更好的方案,就是應(yīng)用 Linux 的 user namespace 技術(shù)隔離用戶,筆者會在接下來的文章中介紹如何配置 docker 開啟 user namespace 的支持。

參考:

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:臨沂 烏海 股票 海口 岳陽 四川 鎮(zhèn)江 紅河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《深入理解docker容器中的uid和gid》,本文關(guān)鍵詞  深入,理解,docker,容器,中的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《深入理解docker容器中的uid和gid》相關(guān)的同類信息!
  • 本頁收集關(guān)于深入理解docker容器中的uid和gid的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    voyeur盗摄精品| 欧美亚洲动漫制服丝袜| 亚洲日本一区二区| 欧美国产精品一区二区三区| 亚洲欧美日韩国产成人精品影院| 国产精品一色哟哟哟| 欧美日韩一区二区电影| 欧美三级电影一区| 51精品秘密在线观看| 国产精品久久国产精麻豆99网站| 欧美精品在线观看一区二区| 美国三级日本三级久久99| 亚洲视频你懂的| 日韩视频一区在线观看| 精品国产伦理网| 2023国产精华国产精品| 一区二区三区欧美在线观看| 国产毛片精品视频| 天堂成人免费av电影一区| 精品在线播放免费| 久久网站热最新地址| 亚洲欧洲精品天堂一级| 亚洲人成在线播放网站岛国| av资源站一区| 久久99国产精品尤物| 亚洲综合视频在线观看| 一区二区三区中文字幕精品精品| 在线观看视频一区| 亚洲成人资源在线| 337p亚洲精品色噜噜噜| 日本韩国一区二区三区| 久久品道一品道久久精品| 精品区一区二区| 欧美一区二区三区系列电影| 老司机精品视频线观看86| 91小视频在线免费看| 欧美一级理论片| 国产成人在线观看免费网站| 久久久久久久久久久久久久久99| 国产在线精品视频| 亚洲精品国产第一综合99久久| 一区二区三区丝袜| 欧美午夜不卡视频| 亚洲国产成人91porn| 国产精品一区二区三区99| 日韩亚洲欧美在线| 亚洲男女一区二区三区| 欧美怡红院视频| 国产精品香蕉一区二区三区| 欧美理论片在线| 韩国一区二区视频| 一区二区视频在线看| 欧美日韩国产a| 美国十次综合导航| 国产亚洲欧美一级| 亚洲欧美aⅴ...| 久久久久国色av免费看影院| 欧美群妇大交群中文字幕| 日本成人在线一区| 亚洲欧美偷拍三级| 成人免费高清在线| 国产一区二区三区不卡在线观看| 中文字幕欧美激情一区| 亚洲蜜臀av乱码久久精品蜜桃| 久久综合久久综合久久综合| 中文字幕不卡三区| 91官网在线观看| 91精品一区二区三区在线观看| 亚洲福利视频导航| 精品视频123区在线观看| 国产伦精品一区二区三区在线观看 | 老司机免费视频一区二区| 免费看欧美女人艹b| 亚洲影视在线播放| 日本高清无吗v一区| 美女视频一区二区三区| 亚洲国产精品激情在线观看| 亚洲成人av免费| 又紧又大又爽精品一区二区| 精品国产乱码久久久久久蜜臀| 亚洲一区二区偷拍精品| 日韩精品成人一区二区三区| 蜜臀久久久久久久| 婷婷中文字幕一区三区| 色爱区综合激月婷婷| 欧美日韩一区二区三区免费看 | 精品婷婷伊人一区三区三| 欧美三片在线视频观看| 成人毛片在线观看| 久久综合五月天婷婷伊人| 久久久久国产精品免费免费搜索| 国产偷国产偷亚洲高清人白洁 | 一本色道久久综合亚洲aⅴ蜜桃| 7777女厕盗摄久久久| 精品嫩草影院久久| 一区二区三区四区不卡在线| 国产精品一卡二| 三级不卡在线观看| 日韩av中文字幕一区二区三区| 国产不卡视频一区| 欧美亚洲国产一卡| 午夜日韩在线电影| 美日韩一区二区三区| 视频一区二区中文字幕| 精品视频999| 奇米综合一区二区三区精品视频| 91激情五月电影| 日韩精品一级二级| 亚洲国产成人av| 欧美亚洲动漫制服丝袜| 蜜桃视频免费观看一区| 欧美不卡视频一区| 国产精品久久久久久久久免费丝袜| 国产综合久久久久久鬼色| 在线视频国内一区二区| 一区二区国产视频| 91麻豆精品国产91| 粉嫩av一区二区三区粉嫩| 亚洲综合无码一区二区| 欧美一区二区三区的| 国产综合久久久久久鬼色| 欧美激情一区在线观看| 色综合天天综合在线视频| 婷婷综合五月天| 中文字幕亚洲欧美在线不卡| 精品国偷自产国产一区| 国产自产v一区二区三区c| 亚洲毛片av在线| 精品久久久久久最新网址| 国产suv精品一区二区6| 亚欧色一区w666天堂| 中国色在线观看另类| 欧美激情在线一区二区三区| 色94色欧美sute亚洲线路二| 狠狠色狠狠色综合系列| 亚洲精品老司机| 国产欧美日韩另类视频免费观看| 51精品秘密在线观看| 欧亚一区二区三区| 99re这里都是精品| 色悠悠亚洲一区二区| 成人99免费视频| av一区二区久久| 色婷婷亚洲综合| 99在线热播精品免费| 91免费在线播放| 欧美一区二区在线不卡| 久久久久久毛片| 国产精品美女久久久久久久| 亚洲欧美色一区| 亚洲激情av在线| 日韩视频免费观看高清在线视频| 一本一道久久a久久精品| 久久国产夜色精品鲁鲁99| 亚洲精品一区二区三区影院| 国产黄色精品视频| 国产日本欧洲亚洲| 欧美军同video69gay| 亚洲成人精品影院| 国产自产视频一区二区三区| 精品无人区卡一卡二卡三乱码免费卡| 久久国产日韩欧美精品| 粉嫩绯色av一区二区在线观看| 不卡视频在线看| av在线不卡电影| 欧美久久高跟鞋激| 国产精品第13页| 精品一区二区三区影院在线午夜| 久久99精品一区二区三区| 天使萌一区二区三区免费观看| 欧美一区二区三区四区高清| 国产精品不卡一区| 久久99热狠狠色一区二区| 成人午夜av在线| 久久先锋影音av鲁色资源 | 国产日韩精品久久久| 亚洲人亚洲人成电影网站色| 午夜一区二区三区在线观看| 国产乱码精品一区二区三区av| 欧美另类高清zo欧美| 亚洲免费在线观看| 国产精品一区二区三区99| 亚洲女人****多毛耸耸8| 国产资源精品在线观看| 一区二区三区在线观看视频| 精品国产一区久久| 国产精品不卡在线观看| www.久久精品| 久久理论电影网| 国产精华液一区二区三区| 精品视频123区在线观看| 午夜精品福利一区二区蜜股av| 99久久精品国产毛片| 亚洲精品国产精华液| 成人美女在线观看| 欧美xxx久久| 精品无码三级在线观看视频| 中文字幕在线一区| 欧美午夜精品久久久久久孕妇 | 亚洲欧美自拍偷拍色图|