一、危害说明
宿主主机上能够操作docker的账号拥有很大的权限,具有如下两个明显安全隐患
1.可以随意进入宿主上的任意容器中
因为进出容器不可以加密,所以有docker权限的账号可以操控宿主机上全部容器中的系统和数据。
2.可以通过挂载目录的方式,来访问本身无权访问的目录
比如当前账号为dev。
如果有个属主非dev的文件目录例如(/home/dev1/test),访问权为700。
dev账号可以使用如下命令启动一个容器,并将上述目录挂载入容器。
docker run -it -d -v /home/dev1/test:/work -w /work ubuntu:20.04 bash
此时进入容器后,会发现test目录下的内容已经全部可以访问。
解决方案
可行的办法就是把开发使用的账号和拥有docker权限的账号分开,然后开发账号通过ssh的方式登录容器环境,这样可以控制账号对不同容器的访问权。
二、容器安装ssh
进入容器中
1.直接安装ssh
apt-get update
apt-get install openssh-server -y
如果安装ssh报如下错误:
E: Sub-process /usr/bin/dpkg returned an error code (1)
则执行下面步骤
cd /var/lib/dpkg
mv info info.baksudo
mkdir info
然后再重新安装
2.配置ssh
启动ssh
echo PermitRootLogin yes >> /etc/ssh/sshd_config
/etc/init.d/ssh restart
三、容器root账号设置密码
在容器中设置root账号
passwd
四、登录容器
在宿主主机中操作
1.找到对应容器的ip地址
docker ps #找到容器id
docker inspect [containerID] #查找容器的ip地址
找到其中NetworkSettings>Networks>IPAddress,例如为172.17.0.2
2.登录
ssh root@172.17.0.2
如果重启了容器宿主之间的登陆记录会报错,禁止登陆,提示如下
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
找到其中ssh-keygen -f****行,执行删除历史记录,然后再重新登陆。
五、注意
如果容器停止不了,执行下面代码
su root
aa-remove-unknown