我为一家小型组织管理几台服务器,该组织为其成员提供类似 ISP 的服务(网站托管、多个域上的邮件地址和关联的 IMAP 帐户、Jabber 帐户),我想将所有帐户数据集中到 LDAP 中。我是 LDAP 新手,现在我需要设计和组织 LDAP 目录布局。
我面临的最大问题是如何将用户映射到不同的帐户,例如,单个用户当前拥有多个 IMAP 和 Jabber 帐户,这些帐户与不同域上的不同地址相关联,并且每个帐户都有不同的密码,我需要保留这些密码。
那么我该如何组织 LDAP 目录布局?
用户和各种帐户是否应位于不同的树中,然后通过公共 uid 链接,即 ou=people,dc=example,dc=net,其中 inetOrgPersons 描述用户,然后为帐户使用单独的树,例如 ou=imapAccounts,dc=example,dc=net、ou=jabberAccounts,dc=example,dc=net 等,并带有自定义架构?或者有没有更好的方法,因为这看起来太像使用关系数据库的解决方案了?
有没有推荐一些有用的资源/书籍/真实案例?我见过的大多数资源似乎都假设一个人只有一个邮件/jabber 帐户等,并希望为此使用一个密码。我不敢相信 ISP 允许其客户拥有多个帐户是如此罕见,例如,为了允许他们将私人邮件和工作邮件分开,或者鼓励为不同的服务使用不同的密码,以便保存的 Jabber 密码被泄露不会导致该客户的所有其他服务受到威胁等。
我将尝试更具体地说明我的用例并解释我当前的数据模型:
有一些唯一用户,我需要他们的一些联系数据,他们在网络托管机上有一个(单个)shell 帐户。这些唯一用户中的每一个可能都有多个 IMAP 和 Jabber 帐户。
回答设计问题:
- 用户可以被视为账户的容器,但它也代表必须具有与其关联的联系数据的人。
- 用户永远不会共享账户。
- 账户永远不会在用户之间转移。
- 这些盒子运行 RHEL6,我需要与 PAM、Postfix/Dovecot 和 ejabberd 集成,因此应该可以与 LDAP 和 RDB 集成。
答案1
你的做法是错误的,因为你已经选择了一种技术,现在正试图将你的数据模型强加到其中。设计你的数据模型首先,然后找到一种易于实现的技术。
从白板开始,写下你需要跟踪的内容,然后确定它们之间的关系。如果你最终得到了一个自然的层次结构/树,LDAP 是一个不错的选择。如果你最终得到了一个时髦的类似网络的东西,关系系统可能会更好用。
在进行设计时需要问的一些问题:
“用户” 是一个容器吗(包含账户)?
(如果是这种情况,则每个账户将指向一个用户。在 LDAP 用语中,用户将是一个 OU,并且账户将在该 OU 内创建。在关系用语中,账户将有一个指向用户的强制(非空)外键)用户会共享账户吗?
(关系建模在这里通常效果更好)账户会在用户之间转移吗(或者用户会在账户之间转移)?
什么样的系统需要与该数据存储集成?