系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)

第 5 章 设置和配置 NIS 服务

本章介绍网络信息服务 (Network Information Service, NIS) 的初始设置和配置。


注意 –

在一些上下文中,计算机名是指主机名或计算机名。本讨论使用“计算机”,但在一些屏幕消息或 NIS 映射名中可能使用主机计算机


本章包含以下主题:

配置 NIS-任务列表

任务 

有关说明,请转至 

为转换准备源文件。 

为将源文件转换为 NIS 映射做好准备

使用 ypinit 设置主服务器

ypinit 设置主服务器

在主服务器上启动 NIS。 

在主服务器上启动或停止 NIS 服务

设置从属服务器。 

设置从属服务器

设置 NIS 客户机。 

设置 NIS 客户机

配置 NIS 之前的准备工作

在配置 NIS 名称空间之前,必须执行以下操作。

NIS 和服务管理工具

NIS 服务由服务管理工具管理。有关 SMF 的概述,请参阅System Administration Guide: Basic Administration中的“Managing Services (Overview)”。另请参阅 svcadm(1M)svcs(1) 手册页以获取更多详细信息。

规划 NIS 域

在将计算机配置为 NIS 服务器或客户机之前,必须规划 NIS 域。

决定 NIS 域中要包括哪些计算机。NIS 域不必与您的网络完全一致。一个网络可以有多个 NIS 域,并且网络中的计算机可以位于 NIS 域之外。

选择一个 NIS 域名,域名的长度可为 256 个字符。比较好的做法是将域名长度限制在 32 个字符之内。域名区分大小写。为方便起见,可以根据 Internet 域名来命名 NIS 域名。例如,如果 Internet 域名为 doc.com,则可将 NIS 域命名为 doc.com。如果要将 doc.com 划分为两个 NIS 域,一个用于销售部门,另一个用于制造部门,则可将其中一个域命名为 sales.doc.com,将另一个域命名为 manf.doc.com

只有设置了正确的 NIS 域名和计算机名,计算机才能使用 NIS 服务。计算机名由计算机中的 /etc/nodename 文件设置,计算机的域名由该计算机的 /etc/defaultdomain 文件设置。在引导时将读取这些文件,其内容分别由 uname -S 命令和 domainname 命令使用。无盘计算机从其引导服务器中读取这些文件。

确定 NIS 服务器和客户机

选择要成为主服务器的计算机。决定哪些计算机(如果有)将成为从属服务器。

决定哪些计算机将成为 NIS 客户机。通常,域中的所有计算机都会被设置为 NIS 客户机,尽管这样做并不是必要的。

准备主服务器

以下各节介绍如何为主服务器准备源文件和 passwd 文件。

源文件目录

源文件应位于主服务器上的 /etc 目录或其他某个目录中。将源文件存储在 /etc 中并不合适,因为这样映射中的内容将与主服务器上的本地文件中的内容相同。对于 passwdshadow 文件而言,这一问题尤为突出,因为所有用户都可以访问主服务器映射,因而超级用户口令将通过 passwd 映射传递给所有 NIS 客户机。有关其他信息,请参见Passwd 文件和名称空间安全

但是,如果将源文件放在其他某个目录中,则必须通过将 DIR=/etc 行更改为 DIR=/your-choice 来修改 /var/yp 中的 Makefile,其中,your-choice 是将用来存储源文件的目录的名称。这样便可将服务器上的本地文件视为客户机上的本地文件进行处理。(最好先保存原始 Makefile 的副本。)

此外,如果要从缺省目录外的其他目录中获取 audit_userauth_attrexec_attrprof_attr,则必须将 RBACDIR =/etc/security 修改为 RBACDIR=/your-choice

Passwd 文件和名称空间安全

passwd 映射是一种特殊情况。除了早期的 Solaris 1 passwd 文件格式外,此 NIS 实现还接受 /etc/passwd/etc/shadow 文件格式作为生成 NIS 口令映射的输入。

出于安全原因,用于生成 NIS 口令映射的文件不应包含 root 项,以防止未经授权的超级用户访问。因此,不应使用主服务器 /etc 目录中的文件生成口令映射。对于用于生成口令映射的口令文件,应删除其中的 root 项,并将它们放置在可免遭未经授权的访问的目录中。

例如,主服务器口令输入文件应存储在诸如 /var/yp 等目录或您选择的任何目录中,只要文件本身不是指向其他文件的链接,而且文件位置已在 Makefile 中指定。将根据 Makefile 中指定的配置自动设置正确的目录选项。


注意 – 注意 –

确保 PWDDIR 所指定的目录中的 passwd 文件不包含关于超级用户的项。


如果源文件所在的目录不是 /etc,则必须更改 Makefile 中的 PWDIR 口令宏,以指向 passwdshadow 文件所在的目录,方法是将行 PWDIR=/etc 更改为 PWDIR/your-choice,其中 your-choice 是要用来存储 passwd 映射源文件的目录的名称。

为将源文件转换为 NIS 映射做好准备

为将源文件转换为 NIS 映射做好准备。

如何为转换准备源文件
  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 检查主服务器上的源文件,确保它们可以反映系统的最新情况。

    检查以下文件:

    • auto.homeauto_home

    • auto.masterauto_master

    • bootparams

    • ethers

    • group

    • hosts

    • ipnodes

    • netgroup

    • netmasks

    • networks

    • passwd

    • protocols

    • rpc

    • service

    • shadow

    • user_attr

  3. 将上述除 passwd 外的所有源文件复制到所选的 DIR 目录中。

  4. passwd 文件复制到所选的 PWDIR 目录中。

  5. audit_userauth_attrexec_attr 以及 prof_attr 复制到所选的 RBACDIR 目录中。

  6. 检查 /etc/mail/aliases 文件。

    与其他源文件不同,不能将 /etc/mail/aliases 文件移至其他目录。该文件必须位于 /etc/mail 目录中。请确保 /etc/mail/aliases 源文件包含要在整个域中可用的所有邮件别名。有关更多信息,请参阅 aliases(4)

  7. 从源文件中清除所有注释以及其他多余的行和信息。

    可通过 sedawk 脚本或使用文本编辑器来执行这些操作。Makefile 可自动执行一些文件清理,但最好在运行之前手动检查并清理这些文件。

  8. 确保所有源文件中的数据都具有正确的格式。

    对于特定的源文件,必须正确设置该文件数据的格式。请检查各文件对应的手册页,以确保每个文件都具有正确格式。

准备 Makefile

在检查源文件并将其复制到源文件目录后,需要将这些源文件转换为 NIS 服务使用的 ndbm 格式映射。在主服务器上调用 ypinit 时,它会自动执行此操作,如ypinit 设置主服务器中所述。

ypinit 脚本将调用程序 make,该程序使用 /var/yp 目录中的 Makefile。缺省的 Makefile 包含在 /var/yp 目录中,该文件包含将源文件转换为期望的 ndbm 格式映射所需要的命令。

可以按原样使用缺省的 Makefile,如果需要,也可以对其进行修改。(如果确实要修改缺省的 Makefile,请确保先复制并存储原始的缺省 Makefile,以便将来需要时使用。)您可能需要对 Makefile 进行以下一项或多项修改:

Makefile 的功能是为 all 下列出的每个数据库创建适当的 NIS 映射。通过 makedbm 后,数据将收集到两个文件(mapname.dirmapname.pag)中。这两个文件都位于主服务器上的 /var/yp/domainname 目录中。

Makefile 将使用相应的 /PWDIR/passwd/PWDIR/shadow/PWDIR/security/passwd.adjunct 文件生成 passwd 映射。

ypinit 设置主服务器

使用 ypinit 脚本设置要使用 NIS 的主服务器、从属服务器和客户机。它最初还运行 make,以在主服务器上创建映射。

要使用 ypinit 在主服务器上生成一组新的 NIS 映射,请执行以下操作。

如何使用 ypinit 设置主服务器
  1. 在主服务器上,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. nsswitch.files 文件的内容复制到 nsswitch.conf 文件中。


    # cp /etc/nsswitch.files /etc/nsswitch.conf
    
  3. 编辑 /etc/hosts/etc/inet/ipnodes 文件,添加每台 NIS 服务器的名称和 IP 地址。

  4. 在主服务器上生成新映射。


    # /usr/sbin/ypinit -m
    
  5. ypinit 提示输入要成为 NIS 从属服务器的其他计算机的列表时,键入正在使用的服务器的名称以及 NIS 从属服务器的名称。

  6. ypinit 询问您希望该过程在第一次出现非致命错误时终止,还是不考虑非致命错误仍继续时,键入 y

    如果选择 yypinit 将在遇到第一个问题时退出,然后您可以修复问题并重新启动 ypinit。建议在初次运行 ypinit 时这样做。如果要继续,则可尝试手动修复出现的所有问题,然后重新启动 ypinit


    注意 –

    当某些映射文件不存在时,会出现非致命错误。此错误不会影响 NIS 的功能。如果未自动创建这些映射,则可能需要手动添加。有关所有缺省 NIS 映射的说明,请参阅缺省 NIS 映射


  7. ypinit 将询问是否可以销毁 /var/yp/domainname 目录中现有的文件。

    仅当先前已安装 NIS 时,才会显示此消息。

  8. ypinit 构造服务器列表后,它将调用 make

    此程序将使用 /var/yp 中的 Makefile(缺省或修改过的文件)所包含的说明。make 命令将从指定的文件中清除其余所有注释行。它还对这些文件运行 makedbm,以创建适当映射并为每个映射建立主服务器的名称。

    如果 Makefile 推送的一个或多个映射所对应的域不是主服务器上的命令 domainname 所返回的域,则可按如下所示,在 ypinit shell 脚本中以变量 DOM 的正确标识启动 make,以确保将映射推送到正确域:


    # make DOM=domainname password
    

    此命令会将 password 映射推送到目标域,而不是主服务器所属的域。

  9. 要启用 NIS 作为名称服务,键入以下命令。


    # cp /etc/nsswitch.nis /etc/nsswitch.conf
    

    此命令将以缺省的面向 NIS 的转换文件替换当前的转换文件。可以根据需要编辑此文件。

支持多个 NIS 域的主服务器

通常,一台 NIS 主服务器只支持一个 NIS 域。但是,如果要使用一台主服务器来支持多个域,则在设置要为其他域提供服务的服务器时,必须对ypinit 设置主服务器中所述的步骤稍做修改。

在服务器上运行 domainname 命令。该命令返回的域名是服务器的缺省域名。可以使用ypinit 设置主服务器中所述的步骤为该域设置服务。要为其他任何域配置服务,必须按如下所示修改 ypinit shell 脚本。


# make DOM=correct-domain passwd

correct-domain 是要为其设置服务的其他域的名称,passwdmake 目标。此命令会将 passwd 映射推送到目标域,而不是主服务器所属的域。

在主服务器上启动或停止 NIS 服务

创建主服务器映射后,可以在主服务器上启动 NIS 守护进程,并开始服务。启用 NIS 服务时,将在服务器上启动 ypservypbind。当客户机向服务器请求信息时,ypserv 守护进程将在 NIS 映射中进行查找,然后再回答来自客户机的信息请求。 ypservypbind 守护进程作为一个单元来管理。

在服务器中启动或停止 NIS 服务有三种方法:

自动启动 NIS 服务

在通过运行 ypinit 配置 NIS 主服务器后,将自动调用 ypstart,以便在计算机引导时启动 ypserv。请参见ypinit 设置主服务器

从命令行启动和停止 NIS

使用服务管理工具 svcadm 命令或 ypstart/ypstop 命令可从命令行启动和停止 NIS。使用 svcadm 时,仅当运行服务的多个实例时才需要使用实例名。有关更多信息,请参见NIS 和服务管理工具,或参见 svcadm(1M)ypstart(1M)ypstop(1M) 手册页。

要从命令行启动 NIS 服务,请运行 svcadm enable 命令或 ypstart 命令。


# svcadm enable network/nis/server:<instance>

# svcadm enable network/nis/client:<instance>

or

# ypstart


注意 –

由于 ypserv 在启动之后需要经过短暂延迟才能够对调用做出响应,因此在从程序或脚本内部调用 svcadm 时,应在该命令之后发出三到五秒的休眠。


要停止 NIS 服务,可运行 svcadm disable 命令或 ypstop 命令。


# svcadm disable network/nis/server:<instance>

# svcadm disable network/nis/client:<instance>

or

# ypstop

要停止并立即重新启动 NIS 服务,可使用 svcadm restart 命令。


# svcadm restart network/nis/server:<instance>

# svcadm restart network/nis/client:<instance>

设置 NIS 从属服务器

网络可以有一台或多台从属服务器。使用从属服务器可在主服务器不可用时确保 NIS 服务的连续性。

准备从属服务器

实际运行 ypinit 以创建从属服务器之前,应对每个 NIS 从属服务器运行 domainname 命令,以确保域名与主服务器一致。


注意 –

域名区分大小写。


配置 NIS 从属服务器之前,请确保网络工作正常。需要特别指出的是,应检查以确保可以使用 rcp 从主 NIS 服务器向 NIS 从属服务器发送文件。

设置从属服务器

以下过程说明了如何设置从属服务器。

如何设置从属服务器
  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 编辑从属服务器上的 /etc/hosts/etc/inet/ipnodes 文件,添加所有其他 NIS 服务器的名称和 IP 地址。

  3. 转到从属服务器上的 /var/yp 目录。


    注意 –

    必须先将新的从属服务器配置为 NIS 客户机,它才能首次从主服务器中获取 NIS 映射。有关详细信息,请参见设置 NIS 客户机


  4. 将该从属服务器作为客户机进行初始化。


    # /usr/sbin/ypinit -c
    

    ypinit 命令会提示输入 NIS 服务器的列表。请先输入您正在使用的本地从属服务器的名称,然后输入主服务器的名称,随后按照从物理上最近到最远(从网络角度看)的顺序输入域中其他 NIS 从属服务器的名称。

  5. 确定 NIS 客户机是否正在运行,然后根据需要启动客户机服务。


    # svcs network/nis/client
    
    STATE          STIME     FMRI
    
    online         20:32:56  svc:/network/nis/client:default

    如果 svc:/network/nis/client 显示为 online 状态,则表明 NIS 正在运行。如果该服务的状态为已被禁用,则表明 NIS 未运行。

    1. 如果 NFS 客户机正在运行,请重新启动客户机服务。


      # svcadm restart network/nis/client
      
    2. 如果 NFS 客户机未运行,请启动客户机服务。


      # svcadm enable network/nis/client
      
  6. 将此计算机作为从属服务器进行初始化。


    # /usr/sbin/ypinit -s master
    

    其中,master 是现有的 NIS 主服务器的计算机名。

    对要配置为 NIS 从属服务器的每台计算机重复本节所介绍的过程。

如何在从属服务器中启动 NIS

以下过程说明了如何在从属服务器中启动 NIS。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 停止客户机服务并启动所有 NIS 服务器进程。


    # svcadm disable network/nis/client
    
    # svcadm enable network/nis/server
    

设置 NIS 客户机

下面介绍了配置客户机以使其将 NIS 用作名称服务的两种方法。


注意 –

Solaris 操作系统不支持 NIS 客户机与本机 LDAP 客户机共存于同一台客户机上的配置。