使用用户名/密码使用 nfs 挂载网络共享
Posted
技术标签:
【中文标题】使用用户名/密码使用 nfs 挂载网络共享【英文标题】:Mount network share with nfs with username / password 【发布时间】:2018-12-04 02:08:12 【问题描述】:我正在尝试使用 nfs 为应用程序安装 NAS。 存储团队已将其导出到主机服务器,我可以通过 /nas/data 访问它。
我正在使用容器化应用程序,此文件系统导出到主机将是一个安全问题,因为主机上运行的任何容器都可以使用共享。所以这个 linux 到 linux 的挂载对我不起作用。
所以我唯一的替代解决方案是在容器启动期间使用用户名/密码挂载这个 nas 文件夹。
以下命令在支持 Unix/Windows 的共享上运行良好。我可以在容器启动时挂载
mount -t cifs -osec=ntlmv2,domain=mydomain,username=svc_account,password=password,noserverino //nsnetworkshare.domain.company/share/folder /opt/testnas
有人告诉我,我们应该使用 nfs 选项而不是 cifs。 所以只是尝试找出使用 nfs 或 cifs 是否会有所作为。
指定 nfs 选项会出现以下错误。
mount -t nfs -o nfsvers=3,domain=mydomain,username=svc_account,password=password,noserverino //nsnetworkshare.domain.company/share/folder /opt/testnas
mount.nfs: remote share not in 'host:dir' format
下面的命令似乎也不起作用。
mount -t nfs -o nfsvers=3,domain=mydomain,username=svc_account,password=password,noserverino nsnetworkshare.domain.company:/share/folder /opt/testnas
mount.nfs: an incorrect mount option was specified
我找不到带有用户名/密码的 mount -t nfs 选项示例。所以我认为我们不能将 mount -t nfs 与凭据一起使用。
请提出想法。
谢谢, 毗湿奴
【问题讨论】:
【参考方案1】:CIFS 是一种文件共享协议。 NFS 是一种卷共享协议。两者之间的区别最初可能并不明显。
NFS 本质上是直接共享 /dev/sda1 的一小步。客户端实际上接收到文件系统共享子集的裸视图,包括(至少在 NFSv4 中)哪些用户可以访问哪些文件的描述。由客户端实际管理允许哪个用户访问哪些文件的权限。
另一方面,CIFS 在服务器端管理用户,并且可以提供每个用户的文件视图和访问权限。在这方面,它类似于 FTP 或 WebDAV,但具有读取/写入文件的任意子集的能力,以及与锁定相关的一些其他功能。
这听起来像是 NFS 明显不如 CIFS,但它们实际上是为了不同的目的。 NFS 对于通过以太网连接的外部硬盘驱动器和虚拟云存储最有用。在这种情况下,打算与机器共享驱动器本身,但只是通过以太网而不是 SATA 来完成。对于该用例,NFS 提供了更大的简单性和速度。您正在使用的 NAS 实际上就是一个完美的例子。它并不是为了管理访问权限,而是为了不暴露给不应该访问它的系统,首先。
如果您绝对必须使用 NFS,有几种方法可以保护它。 NFSv4 有一个基于 Kerberos 的可选安全模型。祝你好运。更好的选择是不允许从主机直接连接到 NFS 服务,而是需要通过一些安全隧道,例如 SSH 端口转发。然后安全性归结为建立隧道。但是,其中任何一个都需要主机的合作,这对于您的 NAS 来说可能是不可能的。
请注意,如果您已经在使用 CIFS 并且它运行良好,并且它为您提供了良好的访问控制,则没有充分的理由切换(尽管为了安全起见,您必须关闭 NFS)。但是,如果您有一个 docker 风格的主机,那么在 docker-host 上使用 iptables(或您选择的防火墙)可能是值得的,以防止其他容器首先访问 NAS。与其将安全性委托给 NAS,不如在 docker-host 级别完成。
【讨论】:
【参考方案2】:好吧,我会说 CIFS 作为 NFS(旧)很少有 linux/Unix 小酒馆甚至停止支持它。
NFS 是专门用于 Unix 和 Linux 操作系统的“网络文件系统”。它允许在服务器和最终用户机器(如台式机和笔记本电脑)之间透明地进行文件通信。 NFS 使用客户端-服务器方法允许用户查看计算机系统上的读写文件。用户可以通过 NFS 挂载文件系统的全部或部分。
CIFS 是 Windows 操作系统用于文件共享的“Common Internet File System”的缩写。 CIFS 还使用客户端-服务器方法,其中客户端向服务器程序发出请求以访问文件。服务器采取请求的操作并返回响应。 CIFS 是 Microsoft 开发和使用的服务器消息块协议 (SMB) 的开放标准版本,它使用 TCP/IP 协议。
如果我有 Linux Linux 我会选择 nfs,但如果是 Windows Linux cifs 将是最好的选择。
【讨论】:
我有一个 linux->linux,但是正如我所提到的,如果我在主机级别将 nas 挂载为 NFS,那么在主机上运行的任何应用程序都可以使用它。在 linux->linux 上使用 CIFS 有什么问题吗?还是证明 nfs 的性能优于 cifs? 关于它们的争论已经有 2 多年的历史了。在这里使用 linux 工作了几年,我想我可以用简单而脆的方式说; 如果您的文件服务器是基于 Windows 的并且您的客户端是混合的,那么 CIFS 将倾向于为您的 Windows 客户端提供比 NFS 更好的性能(Microsoft 会执行一些 Samba 没有的幕后任务) t - IIRC,英特尔发布了关于 Windows 客户端与 Windows 共享服务器和 Windows 客户端与 Samba 共享服务器之间的性能差异的性能研究)。 如果您的客户端主要是 Linux,那么您的更便携和性能更佳的赌注可能是 NFSv4 - 在 Linux 或 Windows 2012+ 上。请注意,为了获得更无缝的跨平台属性传播,您的 RHEL 客户端将需要运行 EL7,因为 EL6 NFSv4 和 IDMAP 服务有点“损坏”。如果使用 Windows 2012 NFSv4 服务器,您会希望一切都使用 NFS 4.1(有各种 Google 可用资源解释“为什么”的细节)以上是关于使用用户名/密码使用 nfs 挂载网络共享的主要内容,如果未能解决你的问题,请参考以下文章