当前位置: 首页 > 知识库问答 >
问题:

从容器装载CIFS/SMB共享的安全方法,无需特权标志或SYS_ADMIN功能

韦知
2023-03-14

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

下面是我使用的命令:

-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容器(库伯内特斯内)中挂载CIFS/SMB3共享,而不会使主机暴露于提权漏洞并保护凭据?非常感谢。

共有1个答案

许博
2023-03-14

经过更多的研究,我想出了如何做到这一点。有一个面向中小企业的容器存储接口(CSI)驱动程序,称为面向库伯内特斯(https://github.com/kubernetes-csi/csi-driver-smb)的中小企业CSI驱动程序。

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

然后创建容器并向其提供相关的持久卷声明,指定要将其装载为/mnt/myshare等。

我对此进行了测试,它可以自动部署到多个工作节点,并且运行良好,无需为容器提供特权标志或--cap add SYS_ADMIN

这支持SMB3甚至身份验证

Wireshark显示所有SMB流量都已加密。我唯一不记得的是,如果您必须首先手动安装cifs utils,因为我已经在所有节点上完成了这项操作,所以无法进行测试。

希望这能帮助别人。

 类似资料:
  • 问题内容: 我有一个在Docker容器中运行的Web应用程序。此应用程序需要访问我们公司文件服务器(带有Active Directory域控制器的Windows Server)上的某些文件。我尝试访问的文件是为我们的客户创建的图像文件,Web应用程序将它们显示为客户产品组合的一部分。 在我的开发机器上,我通过条目安装了适当的文件夹,并且通过参数将主机安装点安装在Docker容器中。这很完美。 现在

  • 我必须更新一个旧的文件共享软件,该软件使用JCIFS for Windows Server 2012。出于安全目的,我们必须禁用SMB 1.0/CIFS兼容性。有人知道可以在Java中使用的变通方法或修复程序或JCIFS的替代方案吗?

  • 我正在寻找从连接到共享的Windows计算机导出SMB/CIFS共享的ACL(不要与NTFS ACL混淆)的方法。到目前为止,我可以在共享的高级安全属性中看到权限,但除了AutoIT怪物之外,无法导出或解析它们。 我想以我可以解析的格式获取这些信息,无论是CSV、JSON、XML等。 我已经检查了这个问题,该问题建议使用Powershell的:使用Powershell检索远程文件共享“共享权限”,

  • 问题内容: 如果我以特权模式运行容器,它是否具有所有内核功能,还是需要单独添加它们? 问题答案: 实际上,以特权模式运行确实为容器提供了所有功能。但是,最好始终给容器提供所需的最低要求。 如果您查看Docker文档,它们也会引用此标志: 完整的容器功能(特权) --privileged标志为容器提供了所有功能,并且还解除了设备cgroup控制器强制执行的所有限制。换句话说,容器可以完成主机可以做的

  • 我在/mnt/SMB/下挂载了一个SMB共享文件夹,我可以访问这些文件。当我使用命令卸载此共享文件夹时:

  • 问题内容: 我不是通过gdxsetup.jar创建项目的,只是包含了gdx.jar和gdx-backend-android.jar。我将libgdx.so添加到libs / x86,但是它仍然引发异常。我该如何解决? Logcat: 如果有帮助,我正在运行32位Linux。 问题答案: 我发现这很简单:添加