SMB 与 NFS 身份验证

SMB 与 NFS 身份验证

谁能简单描述一下 SMB 身份验证和 NFS v.3 身份验证之间最大的区别是什么?

我认为在 SMB 中它基于用户的登录名和密码,而在 NFS 中它基于主机身份验证。

答案1

您基本上已经拥有它了。

用户、机器和共享身份验证

SMB/CIFS 根据每个会话的某种用户凭据(无论是 KRB 令牌、用户/密码对还是其他)进行访问,其中每个会话都映射到一个用户。NFSv3 使用基于主机的身份验证,其中给定远程计算机的所有用户共享同一连接。如果您需要该功能,SMB/CIFS(特别是 Samba 实现)还允许基于主机的允许/拒绝;窗口文件服务器可能也这样做,如果不在文件服务器子系统中,防火墙将处理它。

SMB/CIFS 还实现基于共享的身份验证,其中共享有自己的密码。

NFSv4 可以配置为通过 kerberos 使用每个用户身份验证。

信任模型

NFSv3 强烈依赖远程机器来强制执行权限,希望远程机器在请求中发送真实的、跨机器一致的数字 ID,而 SMB/CIFS 根据连接(会话)验证的远程用户在本地磁盘上强制执行权限。

因此,在 NFSv3 中,如果用户在远程计算机上拥有 root 权限,他们通常(即默认情况下)拥有对整个 NFSv3 共享的只读 root 权限,并且可以模拟任何其他用户 ID。对于单用户计算机的共享,NFS 有 all_squash 作为解决方法,但这是针对每个 IP 的。

另一方面,大多数类 unix smb.mount 实现(linux pre-3.3、freebsd、solaris)不支持系统范围的多会话(多用户)挂载,因此在挂载远程 SMB 文件系统时,系统的会话仅与挂载时设置的用户相同,即所有用户都按照挂载时设置的用户名的权限行事。Linux 3.3 及更高版本具有 cifscreds 来缓解此问题,并且有 FUSE SMB/CIFS 实现可用。正如预期的那样,这在 Windows 客户端上从来都不是问题。

ID 映射

此外,在 NFSv3 中,您的数字 UID 必须准确映射:客户端计算机上的用户 1001 将被授予与服务器上的用户 1001 相同的权限;没有文本用户名映射。由于 SMB/CIFS 将 ID 绑定到会话,因此映射是自动的;您的共享 UID 与您的凭据相匹配。

NFSv4 有一个用于 ID 映射 GSS 域认证用户的守护进程,但如果您尚未部署 GSS 域,则同步您的 UID 可能会更容易。

ACL

NFSv3 及更早版本对 ACL 的支持可能有点不完善(xattrs 完全不行)。NFS 的“POSIX ACL”是在边带 RPC 中实现的(而不是在主协议中),因此可能会出现一些问题,而且并非所有操作系统都支持 NFS 的 POSIX ACL。

SMB/CIFS 通常不会遇到 ACL 问题。如果您需要修改它们,Windows 和类 Unix 客户端可以使用其标准机制(分别为 GUI 和 setfacl)修改 Samba 共享。我不确定类 Unix 客户端是否可以修改 Windows 文件服务器共享上的类 ACL 权限。

NFSv4 具有内置 ACL。

答案2

SMB 和 NFS 都只是用于在网络连接间移动数据的传输协议。协议本身不提供任何类型的身份验证。托管共享的服务器负责提供身份验证并允许/禁止连接请求。

相关内容