从容器挂载CIFS/SMB共享的安全方式,没有特权标志或SYS_ADMIN功能



我想从docker容器访问Windows文件共享共享(SMB3),但我不想危及主机的安全性。我读过的所有指南都指出,我需要使用--privileged标志或--cap-add SYS_ADMIN能力。

下面是我使用的命令:

mount -t cifs -o用户名="some_account@mydomain.internal",密码="some_password"//192.168.123.123/MyShare/mnt/MyShare

结果是消息:

无法应用新的功能集。

当我应用--cap-add SYS_ADMIN功能时,mount命令工作正常,但我理解这使主机暴露于明显的安全漏洞。

我也读了这个StackOverflow问题中的建议(在Docker容器内挂载SMB/CIFS共享)在运行Docker的服务器上本地挂载卷。这是不可取的,有两个原因,首先,容器是由Rancher Kubernetes集群编排的,我不知道如何使用Rancher实现nPcomp所描述的内容,其次,这意味着卷可以被docker主机访问。我宁愿只容器访问这个共享通过凭证给它通过秘密。

我的问题是:有没有办法在docker容器(在Kubernetes内)中挂载CIFS/SMB3共享,而不会将主机暴露于特权升级漏洞和保护凭据?多谢。

经过更多的研究,我已经找到了如何做到这一点。SMB有一个容器存储接口(CSI)驱动程序,名为SMB CSI driver for Kubernetes(https://github.com/kubernetes-csi/csi-driver-smb) .

使用helm (https://github.com/kubernetes-csi/csi-driver-smb/tree/master/charts)安装CSI驱动程序后,您可以在https://github.com/kubernetes-csi/csi-driver-smb/blob/master/deploy/example/e2e_usage.md (选项#2创建PV/PVC)来创建挂载SMB3共享的持久卷(PV)和持久卷声明(PVC)。

然后你创建你的容器,并给它相应的持久卷声明,指定你想挂载它作为/mnt/myshare等。

我对此进行了测试,它被自动部署到多个工作节点并且工作良好,而不需要将privileged标志或--cap-add SYS_ADMIN给予容器。

支持SMB3甚至身份验证&加密。要启用加密,请转到Windows服务器>文件和存储服务,选择共享,属性>设置在加密数据访问。

Wireshark显示所有SMB流量都是加密的。我唯一不记得的是,如果你必须首先手动安装cifs-utils,因为我已经在我所有的节点上这样做了,我无法测试。

希望这能帮助到一些人。

最新更新