非root用户无法运行Docker,使用root权限启用Docker服务时,外部可针对Docker守护程序或运行中的容器的漏洞间接获取到root权限,在 V19.03 中实验性引入Rootless mode用于缓解守护程序和容器运行时中的潜在漏洞。V20.10 正式使用。
环境搭建:
containerd.io
docker-ce-rootless-extras-20.10.0-3.el8.x86_64.rpm
fuse-overlayfs-1.6-1.x86_64.rpm
slirp4netns-1.1.8-1.x86_64.rpm
container-selinux-2.158.0-1.rpm
fuse3-3.2.1-12.x86_64.rpm
libslirp-4.3.1-1.x86_64.rpm
docker-ce-20.10.0-3.x86_64.rpm
fuse3-libs-3.2.1-12.x86_64.rpm
docker-ce-cli-20.10.0-3.x86_64.rpm
fuse-common-3.2.1-12.x86_64.rpm
shadow-utils46-newxidmap-4.6-4.el7.ppc64le.rpm
shadow-utils46-newxidmap下载地址:
https://download.copr.fedorainfracloud.org/results/vbatts/shadow-utils-newxidmap/epel-7-ppc64le/00856388-shadow-utils46/
主机上必须安装 newuidmap newgidmap uidmap(大多数Linux发行版上都默认安装,未安装执行以下命令即可)
shadow-utils-4.6-12.1.el8.x86_64
创建用户
groupadd rootless
useradd rootlessUser -g rootless
passwd rootlessUser
文件/etc/subuid及/etc/subgid中至少应包含65536 个从属 UID/GID。
cat /etc/subuid
cat /etc/subgid
cat <<EOT >/etc/sysctl.conf
user.max_user_namespaces = 28633
EOT
sysctl --system
启动Docker
su rootlessUser
/usr/bin/dockerd-rootless-setuptool.sh install
根据提示添加用户环境变量:
vim ~/.bashrc
#添加以下内容
export XDG_RUNTIME_DIR=/home/rootlessUser/.docker/run
export PATH=/home/rootlessUser/bin:$PATH
export DOCKER_HOST=unix:///home/rootlessUser/.docker/run/docker.sock
#############end
source ~/.bashrc
启动dockerd
dockerd-rootless.sh --experimental --storage-driver vfs
因为socket指定在各用户的根目录下:
[fw@nydus-pull-178 run]$ pwd
/home/fw/.docker/run
[fw@nydus-pull-178 run]$ ls
docker docker.pid docker.sock
不同用户间dockerd彼此独立,类似于对dockerd做了usernamespace操作: