我在Docker组中有一些用户(A,B,...),基本上,每个用户都可以从映像启动容器,但当用户A在后台启动容器时(使用-d标志),问题就出现了。此时,用户B可以附加此容器。限制用户只能附加他们启动的容器的最佳解决方案是什么?我混淆了一些根访问,命名空间等,我不知道以及Docker。
px9o7tmv1#
我想说的是“为每个用户创建新组”,但这样你就必须为每个组配置Docker权限,这会让你回到原来的位置。做一点研究,组也不可能成为组的一部分。https://unix.stackexchange.com/questions/47645/group-within-group-file-permissions我不相信有一个可管理的方法来完成你想做的事情,除非把每个用户放在自己的机器/示例/虚拟机中。如果你想通了,我很有兴趣知道解决办法。祝你好运。
y0u0uwnf2#
任何可以运行任何Docker命令的用户都对主机具有无限制的根访问权限。
Docker没有任何内置的方式来限制你所建议的访问。任何人都可以docker stop; docker rm他们;任何人都可以docker run一个看起来相同但具有不同卷挂载的容器;任何人都可以docker run -v/:/host ...并以root身份对主机文件系统进行任意更改。您应该重新考虑是否可以在这样的多用户系统上使用Docker。将某人添加到docker组相当于授予他们不受限制的sudo访问权限(如果他们还没有docker run权限,那么给予他们自己一个简单的docker run命令就可以了)。
docker stop; docker rm
docker run
docker run -v/:/host ...
docker
sudo
q3qa4bjr3#
docker权限是个麻烦。任何docker用户都有root权限,太疯狂了!没有办法了?也许用一种危险性较小的办法(嗯,还是一种危险的办法):1.仅将管理员放入Docker组1.在container中设置ssh,并获取IP地址1.其他用户通过ssh访问container因此,损坏可能仅限于容器中,并且您的主机系统似乎更安全。
cigdeys34#
这是一个相当复杂的过程,但理论上,您可以在docker容器中运行docker守护进程。因此,您在主机上运行主Docker守护进程。对于您希望隔离的每个客户端,您创建一个Docker容器,该容器:1.运行Docker后台程序1.运行ssh守护程序(供客户端访问)1.接受客户端的凭据1.Map到主机上的另一组端口1.Map到磁盘的不同部分因此,客户端A的ssh指向端口A上的主机,端口A被重定向到Docker容器A的ssh守护进程。在该容器中,客户端A有一个Docker守护进程,他们可以使用该守护进程下载、运行容器,以及对容器执行任何其他操作......这些操作仅限于Docker容器A的资源。客户端B的ssh连接到端口B上的主机,该端口被重定向到Docker容器B的ssh守护进程。在该容器中,客户端B有一个Docker守护进程,他们可以使用该守护进程下载、运行容器,以及对容器执行任何其他操作......这些操作仅限于Docker容器B的资源。如果客户端A或客户端B对主机运行端口扫描,当然,他们能够判断出多个ssh服务器正在运行,但没有对方的凭据,他们无法进入。这上面有洞吗?
4条答案
按热度按时间px9o7tmv1#
我想说的是“为每个用户创建新组”,但这样你就必须为每个组配置Docker权限,这会让你回到原来的位置。做一点研究,组也不可能成为组的一部分。https://unix.stackexchange.com/questions/47645/group-within-group-file-permissions
我不相信有一个可管理的方法来完成你想做的事情,除非把每个用户放在自己的机器/示例/虚拟机中。
如果你想通了,我很有兴趣知道解决办法。祝你好运。
y0u0uwnf2#
任何可以运行任何Docker命令的用户都对主机具有无限制的根访问权限。
Docker没有任何内置的方式来限制你所建议的访问。任何人都可以
docker stop; docker rm
他们;任何人都可以docker run
一个看起来相同但具有不同卷挂载的容器;任何人都可以docker run -v/:/host ...
并以root身份对主机文件系统进行任意更改。您应该重新考虑是否可以在这样的多用户系统上使用Docker。将某人添加到
docker
组相当于授予他们不受限制的sudo
访问权限(如果他们还没有docker run
权限,那么给予他们自己一个简单的docker run
命令就可以了)。q3qa4bjr3#
docker权限是个麻烦。任何docker用户都有root权限,太疯狂了!
没有办法了?也许用一种危险性较小的办法(嗯,还是一种危险的办法):
1.仅将管理员放入Docker组
1.在container中设置ssh,并获取IP地址
1.其他用户通过ssh访问container
因此,损坏可能仅限于容器中,并且您的主机系统似乎更安全。
cigdeys34#
这是一个相当复杂的过程,但理论上,您可以在docker容器中运行docker守护进程。
因此,您在主机上运行主Docker守护进程。对于您希望隔离的每个客户端,您创建一个Docker容器,该容器:
1.运行Docker后台程序
1.运行ssh守护程序(供客户端访问)
1.接受客户端的凭据
1.Map到主机上的另一组端口
1.Map到磁盘的不同部分
因此,客户端A的ssh指向端口A上的主机,端口A被重定向到Docker容器A的ssh守护进程。在该容器中,客户端A有一个Docker守护进程,他们可以使用该守护进程下载、运行容器,以及对容器执行任何其他操作......这些操作仅限于Docker容器A的资源。
客户端B的ssh连接到端口B上的主机,该端口被重定向到Docker容器B的ssh守护进程。在该容器中,客户端B有一个Docker守护进程,他们可以使用该守护进程下载、运行容器,以及对容器执行任何其他操作......这些操作仅限于Docker容器B的资源。
如果客户端A或客户端B对主机运行端口扫描,当然,他们能够判断出多个ssh服务器正在运行,但没有对方的凭据,他们无法进入。
这上面有洞吗?