最近产品需求,从docker 18.09.7 升级到了19.03.11,发现19.03版本其中一个新的特性就是docker daemon 可以运行在 non-root 用户下,也称为run as rootless mode,借此学习一下这个新的特性,由此整理出这篇文章,本篇主要内容参考Docker官方文档。
首先docker daemon为什么要运行在rootless模式呢?因为容器的安全问题一直被广大开发者所诟病的又无力的现实问题,用户的业务进程在容器中以root用户运行,那么进程所能获得的权限太高,就很容易导致进程由于拥有过高的权限而对宿主机或者其他业务进程有影响。于是Rootless特性终于进入到experimental的试验性特性中。
Rootless 模式允许docker daemon 和容器可以运行在non-root 用户下,在non-root用户下运行,进程的权限受到限制,因此会减少潜在的不安全问题的出现。根据官方文档说明,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
网友评论