设置 SSO:openldap、kerberos、nfs(truenas):

设置 SSO:openldap、kerberos、nfs(truenas):

目前,我能够使用 openldap ldap 服务器和 Truenas NFS 服务器(配置了 LDAP 访问)设置 SSO NFS 设置。ubuntu 客户端能够使用 pam-mount 挂载 nfs 主共享。目的是让每个 LDAP 用户使用 pam-ldap 和 nss-ldap 进行身份验证,然后挂载适当的 nfs 主共享。设置正在运行。

据我所知,有四种可能的方法。

方法 - 1:

a) 在 nfs-server 导出中使用 no_root_squash 和 sec=sys(这具有严重的安全隐患),并通过 ubuntu 客户端中的 pam_ldap 为每个使用 ldap 进行身份验证的用户挂载 /home。这将使 pam_mkdir 能够为新用户自动创建主文件夹,并根据权限设置访问其他用户主文件夹。

b) 但这似乎非常不安全,因为客户端可以伪造 uid/gid 来访问未经授权的共享,包括 root。但如果没有 no_root_squash,在 /home 中自动创建主文件夹似乎是不可能的。

方法 - 2

a) 在 nfs 导出中使用 sec=sys、root_squash。Nfs(truenas)服务器已配置 ldap 访问权限。不要挂载 /home。而是使用 pam_mount 或 autofs 仅挂载经过客户端身份验证的用户主文件夹。这是我当前的工作设置。但客户端仍然可以伪造 uid/gid 来获得未经授权的访问权限。但在这种情况下,自动创建主目录不起作用,必须手动完成。

方法 - 3

a) 在 nfs 导出中使用 sec=ldap 、root_squash。在 nfs 服务器中也设置 ldap_pam 身份验证。这种方法是否提供了额外的安全性?据我了解,nfs_client 为 nfs_server 提供了 uid/gid(也可能是伪造的),即使 nfs_server 使用这些信息查询 ldap 服务器,我也看不出可以提供安全性的任何方式。有人可以评论这种方法吗?我没有尝试过,因为我真的不明白它是如何工作的。

方法 - 4

a) 使用 kerberos。nfs_server 中的 sec=krb5。为 kerberos 设置 ldap_backend。使用带有 ldap 后端的 kerberos 对客户端用户进行身份验证。现在,一旦我们开始使用 kerberos 对用户进行身份验证,LDAP 的传统 userPassword 字段就变得毫无用处。因此,使用 ldap 进行身份验证的其他应用程序(如 gitea、gogs 等)无法进一步使用 ldap,因为 ldap 服务器中的 userPassword 字段与 kerberos 密钥存储字段不同步。使用此方法的正确方法是什么?这似乎是最好的方法,前提是它确实同步了传统 ldap 方法和 kerberos ldap 后端的密码。

方法 - 5

a) 仅使用 kerberos 来验证客户端机器和 nfs 服务器。使用传统的 ldap 身份验证来处理所有用途,包括登录/ssh 和其他应用程序(如 gogs 等)。这可能吗?

我的经验有限。请提供宝贵的建议。理想情况下,我希望使用 nfs home 共享的 SSO,并具有一定的安全性,并以 openldap 作为所有后端。如果可能的话,它应该尽可能无缝,就像不是 nfs 共享一样,如果权限允许,每个用户都可以访问其他用户文件夹。

一个能够提供合理安全性的更简单的解决方案就足够了。

-感谢 tachionic

答案1

a) 在 nfs 导出中使用 sec=ldap 、root_squash。在 nfs 服务器中也设置 ldap_pam 身份验证。这种方法是否提供了额外的安全性?据我了解,nfs_client 为 nfs_server 提供了 uid/gid(也可能是伪造的),即使 nfs_server 使用这些信息查询 ldap 服务器,我也看不出可以提供安全性的任何方式。有人可以评论这种方法吗?我没有尝试过,因为我真的不明白它是如何工作的。

事实并非如此,因为 NFS 根本不使用 PAM。

NFS(特别是 v4)可能涉及 LDAP 进行用户⇆uid 查找,因为它在 stat() 结果中通过网络发送用户名,但这 a) 对 sec=sys 没有影响,并且 b) 不是通过 PAM 完成的。

a) 在 nfs 导出中使用 sec=ldap 、root_squash。在 nfs 服务器中也设置 ldap_pam 身份验证。这种方法是否提供了额外的安全性?据我了解,nfs_client 为 nfs_server 提供了 uid/gid(也可能是伪造的),即使 nfs_server 使用这些信息查询 ldap 服务器,我也看不出可以提供安全性的任何方式。有人可以评论这种方法吗?我没有尝试过,因为我真的不明白它是如何工作的。

sec=ldap 不存在。(如果存在,则应该是 sec=password 而不是 sec=ldap,就像 SSH 没有“ldap”身份验证机制一样,因为客户端和服务器之间没有传输任何与 LDAP 相关的内容。但是,NFS 没有任何首先基于密码的身份验证机制。

a) 使用 kerberos。nfs_server 中的 sec=krb5。为 kerberos 设置 ldap_backend。使用带有 ldap 后端的 kerberos 对客户端用户进行身份验证。现在,一旦我们开始使用 kerberos 对用户进行身份验证,LDAP 的传统 userPassword 字段就变得毫无用处了。因此,使用 ldap 进行身份验证的其他应用程序(如 gitea、gogs 等)无法进一步使用 ldap,因为 ldap 服务器中的 userPassword 字段与 kerberos 密钥存储字段不同步。

对于 OpenLDAP,可以将 userPassword 字段设置{SASL}user@REALM为对服务器上运行的 Cyrus 守护进程执行“简单绑定”的传递身份验证saslauthd,该守护进程能够根据 Kerberos KDC(使用模式-a kerberos5)验证密码。

请记住,Kerberos 无法根据 LDAP 服务器对用户进行身份验证;“LDAP 后端”纯粹用于 KDC 的数据存储。

相关内容