dcsimg

NIS到LDAP:跨越式发展

如果是时候将老化的NIS安装换成LDAP,我们的路线图将指出您可以期望的空白。

考虑从NIS转换为LDAP?这可能比您计划的要困难。由Sun Microsystems设计的NIS(有时也称为黄页目录)是一种集中管理计算机配置数据的机制。由于许多原因,LDAP是更好的选择,但是将非重要的配置从NIS切换到LDAP并不容易。这不是LDAP教程。假设您具备基本的LDAP知识,我们将讨论NIS转换中遇到的一些常见问题。

NIS主机可以集中管理电子邮件别名,用户,密码,网络组,自动安装程序映射等。客户端“绑定”到NIS域,并且/etc/nsswitch.conf允许客户端访问信息。名为securenets的文件列出了“安全”的网络,因此受到信任,它控制对域信息的访问。这些网络上的任何人都可以连接到NIS服务器。 NIS +的发明是为了引入更多安全性,但是由于其完全重做和复杂的体系结构而被广泛回避。

那么,为什么我们不想再使用NIS?它不是很容易管理,也不是安全的。客户端计算机上的任何人都可以运行ypcat passwd并在NIS中获取所有用户的密码哈希。有一种称为c2secure的特殊模式,该模式可实现影子文件,以便对root用户以外的所有用户都隐藏密码哈希。这很棒,但是会破坏很多东西。如果程序无法访问密码哈希,则无法验证用户身份。例如,如果您使用的是Apache,以用户www的身份运行,并使用PAM身份验证,则该功能不适用于c2security。解决方法是存在的,但涉及调用setuid程序以root身份运行并执行身份验证。

在LDAP中,用户身份验证和计算机访问非常安全。对于计算机,可以将LDAP客户端配置为需要证书才能被允许访问。通过通过SSL绑定到LDAP服务器作为用户来完成用户认证。如果绑定成功,则用户的密码正确,并且已通过身份验证。好消息是,大多数应用程序都支持LDAP身份验证机制。

可管理性是切换的主要原因。在NIS中,如果您有多个域,则每次对文件进行更改时,更改都必须传播到每个域。这是通过Makefiles完成的,并且每次需要更改(例如,更改密码文件)时,它都会在每个域中重建,然后客户端很快就会看到更改。将新文件添加到NIS意味着您必须设计一种方法,以便每次进行更改时都可以复制文件。维护不断变化的NIS环境需要进行大量工作。除了在主服务器上创建合理的配置之外,您还必须担心从服务器的传播。 LDAP复制比NIS的映射传输机制更有效,更可靠。

在LDAP中,通过直接编辑数据库进行更改。如果将所有客户端配置为使用相同的密码信息,则更改永远不需要“传播”,而是可以简单地编辑条目并立即影响所有客户端计算机。

根据NIS客户端的数量和您的NIS域结构,转换为LDAP可能会很麻烦。许多环境将具有以下属性:

  • 全局用户帐户(即每个地方都有一个密码)
  • 仅某些用户可以登录的机器集
  • 具有“不同”信息的机器组,例如自动安装程序映射
  • 网络组用于限制NFS共享和用户访问

如果您的环境是平坦的,则所有计算机的配置都相同,那么转换就很简单。当您需要保留具有相似信息但有一些差异的机器组时,这在LDAP上并不容易。 NIS也不容易,除非您想完全隔离域而不共享任何信息。 LDAP中存在相同的问题。

需要考虑的一些方案
假设我们有一个Solaris和Linux混合环境,其中的主目录显然会有所不同。在NIS中,我们只需对auto.homedirs(或任何您称呼的)映射进行构建,就可以为Linux域的automounter映射生成不同的条目,以便主目录位于不同的位置。

在LDAP中,我们有几种方法可以解决此问题。客户端可以绑定到树中的其他位置,以便其搜索信息始于以Linux为中心的位置。为此,每个子树中还需要存在其他信息,例如People(密码信息)。因此,我们回到了必须设计一种方法来管理重复信息,并在发生更改时传播它。或者,我们可以实现树的Linux分支,以对所有“全局”信息使用引用。

简单来说,LDAP引用是指向另一个位置的指针。引用可用于使这种LDAP设计可行:Linux自动安装程序条目是唯一的,但是People引用的是全局的。

网络组和限制对某些计算机的访问会引起另一个问题。在Linux和Solaris中,可以通过在/ etc / passwd或shadow文件中使用“ + @ netgroup”来限制密码输入,而不是仅允许每个人在文件末尾都带有“ +”。默认情况下,OpenLDAP没有网络组的概念,但是Sun LDAP服务器确实具有对象类型:nisNetgroupTriple。如果使用netgroups,则需要将外部模式导入OpenLDAP,或者需要运行Sun的LDAP服务器。 Fedora目录服务器基于Sun的服务器,因此这是另一个可行的选择。

LDAP客户端配置文件实际上控制着所有内容。您将定义基本DN所在的LDAP服务器,SSL信息以及(可选)搜索过滤器。在我们给出的NIS示例中,单独的域具有不同的密码文件,这些密码文件是根据所有用户的全局密码文件构建(修剪)的。如果要避免重复信息,那么在LDAP中合并这种环境并不是一件容易的事。

ldap_client_file(Solaris)或ldap.conf(Linux)中的这一行指定如何找到nsswitch passwd条目:
NS_LDAP_SERVICE_SEARCH_DESC= passwd: ou=People,dc=example,dc=com?one

如果我们正在复制信息或在每个容器中有完全独立的People,则可以指定ou = People实际上在某些地方有所不同。但是,要使用全局“人员”条目,为所有类型的计算机使用一个密码,就必须进行其他操作。人们经常问这样的事情是怎么可能的,答案实际上很简单:向每个Person添加一个属性,并在客户端配置中将该属性作为搜索过滤器进行检查。

一个例子是公司或大学中的不同部门都使用Unix计算机,并且不允许跨部门登录。以大学为例,假设我们希望CS用户登录到一组计算机,而不是ECE用户。在People属性中,可以将模式扩展为具有“ dept”字段。 LDAP客户端文件的服务搜索描述使用搜索过滤器来检查用户是否具有以下属性:
NS_LDAP_SERVICE_SEARCH_DESC= passwd:ou=people,dc=xcat,dc=pdx,dc=edu?sub?dept=CS

如果尝试登录的用户没有属性dept = CS,则它们将不存在,因为搜索将失败。

这些是我个人将NIS转换为LDAP时遇到的一些主要的高级问题。总而言之,LDAP的工作取得了巨大的回报。 Linux客户端更快乐,更易于管理且安全。 LDAP身份验证可以直接从PHP,Ruby,Perl以及几乎所有其他语言和应用程序进行。 LDAP学习曲线不应起到威慑作用。

本文最初于2007年1月12日发布
通过网络更新新闻获取最新消息