本章介绍网络信息服务 (Network Information Service, NIS) 的初始设置和配置。
在一些上下文中,计算机名是指主机名或计算机名。本讨论使用“计算机”,但在一些屏幕消息或 NIS 映射名中可能使用主机或计算机。
本章包含以下主题:
任务 |
有关说明,请转至 |
---|---|
为转换准备源文件。 | |
使用 ypinit 设置主服务器 | |
在主服务器上启动 NIS。 | |
设置从属服务器。 | |
设置 NIS 客户机。 |
在配置 NIS 名称空间之前,必须执行以下操作。
在将要使用 NIS 的所有计算机上安装正确配置的 nsswitch.conf 文件。有关详细信息,请参见第 2 章,名称服务转换器(概述)。
规划 NIS 域。
NIS 服务由服务管理工具管理。有关 SMF 的概述,请参阅System Administration Guide: Basic Administration中的“Managing Services (Overview)”。另请参阅 svcadm(1M) 和 svcs(1) 手册页以获取更多详细信息。
可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。不过,也可以从命令行使用 ypstart 和 ypstop 来启动和停止 NIS。有关更多信息,请参见 ypstart(1M) 和 ypstop(1M) 手册页。
使用 -t 选项暂时禁用服务可为服务配置提供一些保护。如果禁用服务时使用了 -t 选项,则在重新引导后将恢复服务的初始设置。如果禁用服务时未使用 -t,则服务在重新引导后仍将保持禁用状态。
NIS 服务器的 NIS 故障管理资源标识符 (Fault Managed Resource Identifier, FMRI) 是 svc:/network/nis/server:<instance>,NIS 客户机的 NIS 故障管理资源标识符是 svc:/network/nis/client:<instance>。
可使用 svcs 命令查询 NIS 的状态。
svcs 命令和输出示例。
# svcs network/nis/server STATE STIME FMRI online Jan_10 svc:/network/nis/server:default |
# svcs \*nis\* STATE STIME FMRI disabled 12:39:18 svc:/network/rpc/nisplus:default disabled 12:39:18 svc:/network/nis/server:default disabled 12:39:20 svc:/network/nis/passwd:default disabled 12:39:20 svc:/network/nis/update:default disabled 12:39:20 svc:/network/nis/xfr:default online 12:42:16 svc:/network/nis/client:default |
svcs -l 命令和输出示例。
# svcs -l /network/nis/client fmri svc:/network/nis/client:default enabled true state online next_state none restarter svc:/system/svc/restarter:default contract_id 99 dependency exclude_all/none svc:/network/nis/server (offline) dependency require_all/none svc:/system/identity:domain (online) dependency require_all/restart svc:/network/rpc/bind (online) dependency require_all/none svc:/system/filesystem/minimal (online) |
可使用 svccfg 实用程序获取有关服务的更多详细信息。请参见 svccfg(1M) 手册页。
可使用 ps 命令检查守护进程是否存在。
# ps -e | grep rpcbind daemon 100806 1 0 Sep 01 ? 25:28 /usr/sbin/rpcbind |
不要将 -f 选项与 ps 结合使用,因为此选项会尝试将用户 ID 转换为名称,这将导致更多的名称服务查找可能不会成功。
在将计算机配置为 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 客户机,尽管这样做并不是必要的。
以下各节介绍如何为主服务器准备源文件和 passwd 文件。
源文件应位于主服务器上的 /etc 目录或其他某个目录中。将源文件存储在 /etc 中并不合适,因为这样映射中的内容将与主服务器上的本地文件中的内容相同。对于 passwd 和 shadow 文件而言,这一问题尤为突出,因为所有用户都可以访问主服务器映射,因而超级用户口令将通过 passwd 映射传递给所有 NIS 客户机。有关其他信息,请参见Passwd 文件和名称空间安全。
但是,如果将源文件放在其他某个目录中,则必须通过将 DIR=/etc 行更改为 DIR=/your-choice 来修改 /var/yp 中的 Makefile,其中,your-choice 是将用来存储源文件的目录的名称。这样便可将服务器上的本地文件视为客户机上的本地文件进行处理。(最好先保存原始 Makefile 的副本。)
此外,如果要从缺省目录外的其他目录中获取 audit_user、auth_attr、exec_attr 和 prof_attr,则必须将 RBACDIR =/etc/security 修改为 RBACDIR=/your-choice。
passwd 映射是一种特殊情况。除了早期的 Solaris 1 passwd 文件格式外,此 NIS 实现还接受 /etc/passwd 和 /etc/shadow 文件格式作为生成 NIS 口令映射的输入。
出于安全原因,用于生成 NIS 口令映射的文件不应包含 root 项,以防止未经授权的超级用户访问。因此,不应使用主服务器 /etc 目录中的文件生成口令映射。对于用于生成口令映射的口令文件,应删除其中的 root 项,并将它们放置在可免遭未经授权的访问的目录中。
例如,主服务器口令输入文件应存储在诸如 /var/yp 等目录或您选择的任何目录中,只要文件本身不是指向其他文件的链接,而且文件位置已在 Makefile 中指定。将根据 Makefile 中指定的配置自动设置正确的目录选项。
确保 PWDDIR
所指定的目录中的 passwd 文件不包含关于超级用户的项。
如果源文件所在的目录不是 /etc,则必须更改 Makefile 中的 PWDIR
口令宏,以指向 passwd 和 shadow 文件所在的目录,方法是将行 PWDIR=/etc 更改为 PWDIR/your-choice,其中 your-choice 是要用来存储 passwd 映射源文件的目录的名称。
为将源文件转换为 NIS 映射做好准备。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
检查主服务器上的源文件,确保它们可以反映系统的最新情况。
检查以下文件:
auto.home 或 auto_home
auto.master 或 auto_master
bootparams
ethers
group
hosts
ipnodes
netgroup
netmasks
networks
passwd
protocols
rpc
service
shadow
user_attr
将 passwd 文件复制到所选的 PWDIR 目录中。
将 audit_user、auth_attr、exec_attr 以及 prof_attr 复制到所选的 RBACDIR 目录中。
与其他源文件不同,不能将 /etc/mail/aliases 文件移至其他目录。该文件必须位于 /etc/mail 目录中。请确保 /etc/mail/aliases 源文件包含要在整个域中可用的所有邮件别名。有关更多信息,请参阅 aliases(4)。
从源文件中清除所有注释以及其他多余的行和信息。
可通过 sed 或 awk 脚本或使用文本编辑器来执行这些操作。Makefile 可自动执行一些文件清理,但最好在运行之前手动检查并清理这些文件。
确保所有源文件中的数据都具有正确的格式。
对于特定的源文件,必须正确设置该文件数据的格式。请检查各文件对应的手册页,以确保每个文件都具有正确格式。
在检查源文件并将其复制到源文件目录后,需要将这些源文件转换为 NIS 服务使用的 ndbm 格式映射。在主服务器上调用 ypinit 时,它会自动执行此操作,如用 ypinit 设置主服务器中所述。
ypinit 脚本将调用程序 make,该程序使用 /var/yp 目录中的 Makefile。缺省的 Makefile 包含在 /var/yp 目录中,该文件包含将源文件转换为期望的 ndbm 格式映射所需要的命令。
可以按原样使用缺省的 Makefile,如果需要,也可以对其进行修改。(如果确实要修改缺省的 Makefile,请确保先复制并存储原始的缺省 Makefile,以便将来需要时使用。)您可能需要对 Makefile 进行以下一项或多项修改:
非缺省映射
如果创建了自己的非缺省源文件并且要将其转换为 NIS 映射,则必须将这些源文件添加到 Makefile。
DIR
值
如果要让 Makefile 使用不在 /etc 目录中存储的源文件(如源文件目录中所述),则必须将 Makefile 中的 DIR
的值更改为要使用的目录。更改 Makefile 中的该值时,请勿使行缩进。
PWDIR
值
如果要让 Makefile 使用不在 /etc 目录中存储的 passwd、shadow 和/或 adjunct 源文件,则必须将 Makefile 中的 PWDIR
的值更改为要使用的目录。更改 Makefile 中的该值时,请勿使行缩进。
域名解析程序
如果要让 NIS 服务器对不在当前域中的计算机使用域名解析程序,请注释掉 Makefile 行 B=,并取消对行 B=-b 的注释(激活)。
Makefile 的功能是为 all 下列出的每个数据库创建适当的 NIS 映射。通过 makedbm 后,数据将收集到两个文件(mapname.dir 和 mapname.pag)中。这两个文件都位于主服务器上的 /var/yp/domainname 目录中。
Makefile 将使用相应的 /PWDIR/passwd、/PWDIR/shadow 和 /PWDIR/security/passwd.adjunct 文件生成 passwd 映射。
使用 ypinit 脚本设置要使用 NIS 的主服务器、从属服务器和客户机。它最初还运行 make,以在主服务器上创建映射。
要使用 ypinit 在主服务器上生成一组新的 NIS 映射,请执行以下操作。
在主服务器上,成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
将 nsswitch.files 文件的内容复制到 nsswitch.conf 文件中。
# cp /etc/nsswitch.files /etc/nsswitch.conf |
编辑 /etc/hosts 或 /etc/inet/ipnodes 文件,添加每台 NIS 服务器的名称和 IP 地址。
在主服务器上生成新映射。
# /usr/sbin/ypinit -m |
当 ypinit 提示输入要成为 NIS 从属服务器的其他计算机的列表时,键入正在使用的服务器的名称以及 NIS 从属服务器的名称。
当 ypinit 询问您希望该过程在第一次出现非致命错误时终止,还是不考虑非致命错误仍继续时,键入 y。
如果选择 y,ypinit 将在遇到第一个问题时退出,然后您可以修复问题并重新启动 ypinit。建议在初次运行 ypinit 时这样做。如果要继续,则可尝试手动修复出现的所有问题,然后重新启动 ypinit。
当某些映射文件不存在时,会出现非致命错误。此错误不会影响 NIS 的功能。如果未自动创建这些映射,则可能需要手动添加。有关所有缺省 NIS 映射的说明,请参阅缺省 NIS 映射。
ypinit 将询问是否可以销毁 /var/yp/domainname 目录中现有的文件。
仅当先前已安装 NIS 时,才会显示此消息。
ypinit 构造服务器列表后,它将调用 make。
此程序将使用 /var/yp 中的 Makefile(缺省或修改过的文件)所包含的说明。make 命令将从指定的文件中清除其余所有注释行。它还对这些文件运行 makedbm,以创建适当映射并为每个映射建立主服务器的名称。
如果 Makefile 推送的一个或多个映射所对应的域不是主服务器上的命令 domainname 所返回的域,则可按如下所示,在 ypinit shell 脚本中以变量 DOM
的正确标识启动 make,以确保将映射推送到正确域:
# make DOM=domainname password |
此命令会将 password 映射推送到目标域,而不是主服务器所属的域。
要启用 NIS 作为名称服务,键入以下命令。
# cp /etc/nsswitch.nis /etc/nsswitch.conf |
此命令将以缺省的面向 NIS 的转换文件替换当前的转换文件。可以根据需要编辑此文件。
通常,一台 NIS 主服务器只支持一个 NIS 域。但是,如果要使用一台主服务器来支持多个域,则在设置要为其他域提供服务的服务器时,必须对用 ypinit 设置主服务器中所述的步骤稍做修改。
在服务器上运行 domainname 命令。该命令返回的域名是服务器的缺省域名。可以使用用 ypinit 设置主服务器中所述的步骤为该域设置服务。要为其他任何域配置服务,必须按如下所示修改 ypinit shell 脚本。
# make DOM=correct-domain passwd |
correct-domain 是要为其设置服务的其他域的名称,passwd 是 make 目标。此命令会将 passwd 映射推送到目标域,而不是主服务器所属的域。
创建主服务器映射后,可以在主服务器上启动 NIS 守护进程,并开始服务。启用 NIS 服务时,将在服务器上启动 ypserv 和 ypbind。当客户机向服务器请求信息时,ypserv 守护进程将在 NIS 映射中进行查找,然后再回答来自客户机的信息请求。 ypserv 和 ypbind 守护进程作为一个单元来管理。
在服务器中启动或停止 NIS 服务有三种方法:
在引导过程中自动调用 /usr/lib/netsvc/yp/ypstart 脚本
从命令行使用服务管理工具 svcadm enable <fmri> 和 svcadm disable <fmri> 命令
有关 SMF 的更多信息,请参见 svcadm(1M)。
从命令行使用 ypstart(1M) 和 ypstop (1M)。
在通过运行 ypinit 配置 NIS 主服务器后,将自动调用 ypstart,以便在计算机引导时启动 ypserv。请参见用 ypinit 设置主服务器。
使用服务管理工具 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 服务的连续性。
实际运行 ypinit 以创建从属服务器之前,应对每个 NIS 从属服务器运行 domainname 命令,以确保域名与主服务器一致。
域名区分大小写。
配置 NIS 从属服务器之前,请确保网络工作正常。需要特别指出的是,应检查以确保可以使用 rcp 从主 NIS 服务器向 NIS 从属服务器发送文件。
以下过程说明了如何设置从属服务器。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
编辑从属服务器上的 /etc/hosts 或 /etc/inet/ipnodes 文件,添加所有其他 NIS 服务器的名称和 IP 地址。
必须先将新的从属服务器配置为 NIS 客户机,它才能首次从主服务器中获取 NIS 映射。有关详细信息,请参见设置 NIS 客户机。
将该从属服务器作为客户机进行初始化。
# /usr/sbin/ypinit -c |
ypinit 命令会提示输入 NIS 服务器的列表。请先输入您正在使用的本地从属服务器的名称,然后输入主服务器的名称,随后按照从物理上最近到最远(从网络角度看)的顺序输入域中其他 NIS 从属服务器的名称。
确定 NIS 客户机是否正在运行,然后根据需要启动客户机服务。
# svcs network/nis/client STATE STIME FMRI online 20:32:56 svc:/network/nis/client:default |
如果 svc:/network/nis/client 显示为 online 状态,则表明 NIS 正在运行。如果该服务的状态为已被禁用,则表明 NIS 未运行。
将此计算机作为从属服务器进行初始化。
# /usr/sbin/ypinit -s master |
其中,master 是现有的 NIS 主服务器的计算机名。
对要配置为 NIS 从属服务器的每台计算机重复本节所介绍的过程。
以下过程说明了如何在从属服务器中启动 NIS。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
停止客户机服务并启动所有 NIS 服务器进程。
# svcadm disable network/nis/client # svcadm enable network/nis/server |
下面介绍了配置客户机以使其将 NIS 用作名称服务的两种方法。
Solaris 操作系统不支持 NIS 客户机与本机 LDAP 客户机共存于同一台客户机上的配置。
ypinit。配置客户机以使其使用 NIS 的推荐方法是以 root 身份登录计算机并运行 ypinit -c。
# ypinit -c |
运行此命令时,将要求您列举出客户机要从中获取名称服务信息的 NIS 服务器。您可以列出尽量多的主服务器或从属服务器。列出的服务器可以位于域中的任意位置。最好先列出(从网络角度)离计算机最近的服务器,然后列出网络中处于更远距离的服务器。
广播方法。较早的配置客户机以使其使用 NIS 的方法是以 root 身份登录计算机,用 domainname 命令设置域名,然后运行 ypbind。
如果 /var/yp/binding/`domainname`/ypservers 文件不存在,ypstart 将自动以广播模式 (ypbind -broadcast) 调用 NIS 客户机。
# domainname doc.com # mv /var/yp/binding/`domainname`/ypservers /var/yp/binding/`domainname`\ /ypservers.bak # ypstart |
运行 ypbind 时,它将在本地子网中搜索 NIS 服务器。如果找到服务器,ypbind 将绑定到该服务器。此搜索方式称为广播。如果在客户机的本地子网中没有 NIS 服务器,ypbind 将无法绑定,客户机也无法通过 NIS 服务获取名称空间数据。