最近產品需求,從docker 18.09.7 升級到了19.03.11,發(fā)現(xiàn)19.03版本其中一個新的特性就是docker daemon 可以運行在 non-root 用戶下补君,也稱為run as rootless mode致开,借此學習一下這個新的特性弦撩,由此整理出這篇文章文虏,本篇主要內容參考Docker官方文檔。
首先docker daemon為什么要運行在rootless模式呢坷备?因為容器的安全問題一直被廣大開發(fā)者所詬病的又無力的現(xiàn)實問題熄浓,用戶的業(yè)務進程在容器中以root用戶運行,那么進程所能獲得的權限太高省撑,就很容易導致進程由于擁有過高的權限而對宿主機或者其他業(yè)務進程有影響赌蔑。于是Rootless特性終于進入到experimental的試驗性特性中俯在。
Rootless 模式允許docker daemon 和容器可以運行在non-root 用戶下,在non-root用戶下運行娃惯,進程的權限受到限制跷乐,因此會減少潛在的不安全問題的出現(xiàn)。根據官方文檔說明石景,rootless模式不需要root特權劈猿,在安裝docker的時候拙吉。
Rootless工作機制
在rootless模式下潮孽,dockerd 和container都是在一個user namespace中運行的,這非常類似userns-remap
模式筷黔,userns-remap
模式下daemon是在root權限下運行的往史,然而在rootless模式下,dockerd和container運行都不需要root權限佛舱。
rootless模式不需要dockerd設置SETUID或者是文件權限椎例,但是需要newuidmap
和newgidmap
,這樣才能允許在user namespace下使用多個UIDs/GIDs请祖。
使用條件
- 必須在宿主機上安裝
newgidmap
和newuidmap
订歪。 -
/etc/subuid
和/etc/subgid
應該為某用戶包含至少65536個從屬的UIDs/GIDs