让UNIX和Linux一起工作
时间:2006-10-30 来源:zhangzijian
级别: 中级
Martin Brown ([email protected]), 自由撰稿人, 顾问
2006 年 5 月 25 日
了解如何使用网络信息服务(Network Information Service,NIS)来在 Linux® 和 UNIX® 间共享核心数据库,以及如何使用网络文件系统(Network File System,NFS)来通过直接链接或自动加载器共享文件系统。尽管 UNIX 和 Linux 相似,但二者之间仍然存在一些差异,可能会导致集成这两个系统的过程复杂化。例如,这两类系统均采用相同的身份验证系统,但大部分系统都是彼此独立的。通过共享此身份验证信息,可以为网络中的任何服务器提供单点登录(single sign-on,SSO)功能。网络信息访问 (NIS) 是由 Sun Microsystems 开发的,也称为黄页 (Yellow Pages) 服务。该系统的机制非常简单——将标准系统数据库(如 /etc/hosts 和 /etc/passwd)转换为通用数据库格式(使用 DBM 格式,DBM 是一个早已失去其含义的缩写)。
这些数据库保存在 NIS 服务器上(也称为 NIS 主服务器)。所有数据库均放置在一个指定的域中,然后从使用远程过程调用(Remote Procedure Call,RPC)接口的主服务器共享。支持一系列不同的文件,包括:
- passwd(如果支持,还包括 /etc/shadow 文件)
- groups
- hosts
- netmask
- netgroup
- automount
- services
- protocols
- ethers
- aliases(对于邮件)
从服务器(例如希望提供 NIS 主服务器数据库备份的计算机)将从服务器复制已发布的数据库。NIS 客户端在需要查找信息时(例如用登录时)将查询 NIS 服务器。NIS 客户端永远不会存储信息,因为客户端绑定到 NIS 服务器(通过 ypbind 工具)。所得到的结构如下面的图 1 中所示。
图 1. NIS 主服务器或从服务器结构
只要进行了更改,对 NIS 数据库的更改将传播到从服务器,或通过使用 yppush 命令以手动方式传播。
由用户驱动的对 NIS 数据库的直接更改(例如,当用户更改其密码时)将直接发送到 NIS 主服务器,从而更新数据库,并将更改传播给任何从服务器。
![]() ![]() |
![]() |
NIS 和 NIS+ 间的主要区别在于,后者支持 NIS 主计算机和从计算机间的身份验证和数据交换加密。不过,由于安全方面的要求,NIS+ 的设置和正常运行较为困难,更为复杂。NIS+ 还对命名系统进行了扩展,因此数据库将放入树形结构中(而不是单个域中),以便允许更为复杂、范围更广的分布。
NIS 通常适合在任何标准环境中使用,而且在配置正确的网络中,如果此网络附加到 Internet,并不会带来任何安全威胁。在私有网络更为开放的环境中(如在通过公共网络交换 NIS 数据的大学或多站点安装中),应该仅使用 NIS+。
![]() ![]() |
![]()
|
Solaris、AIX® 和 HP-UX 安装在缺省情况下都包含对 NIS 系统的支持。Linux® 分发通常都包含 NIS 作为标准配置,glibc 库提供了对 NIS 的支持。不过,您可能需要安装配置和管理 NIS 安装所需的工具包。对于 Linux 下的 NIS 服务器,需要以下程序包:
- ypserver
- makedbm
安装了这些程序包后,需要对所提供的 makefile 进行编辑,该文件通常位于 /var/yp/Makefile 中。该文件中包含将用于构建初始 YP 数据库的配置参数。您需要编辑 all 的定义,以包含希望通过 NIS 支持的文件类型。在缺省情况下,该规则包括所有文件,如清单 1 中所示。
清单 1. all 的定义
all: passwd group hosts ipnodes ethers networks rpc services protocols \ netgroup bootparams aliases publickey netid netmasks c2secure \ timezone auto.master auto.home ageing \ auth.attr exec.attr prof.attr user.attr audit.user |
可以将任何不需要的文件类型删除;例如,可能会只想共享 passwd、group 和 hosts 文件。
现在已经准备好,可以对数据库进行填充了。首先,设置 NIS 域名:
$ domainname mcslp.nis |
在 Linux 服务器上,编辑 /var/yp/securenets 和 /etc/ypserv.conf 文件,以与本地网络的情况匹配。这些文件控制哪些计算机可以共享和访问 NIS 域中的信息。
现在对数据库进行初始化:
$ ypinit -m |
ypinit 命令将为您完成使用 makefile 将源文件(例如,/etc/passwd)转换为 NIS 格式的剩余任务。
如果在任何时间更改了源文件的内容,请转到 /var/yp 目录并再次运行 make 来重新构建数据库:
$ cd /var/yp $ make |
如果希望允许各个用户以远程方式更新登录密码,请确保 rpc.yppasswdd 后台程序在运行;它可直接接受客户端要求更新 NIS 数据库的请求,以便更改通过主服务器和从服务器传播,并由任何客户端正确拾取。
![]() ![]() |
![]()
|
要设置 NIS 客户端,需要定义 NIS 域名,启动本地 NIS 访问,然后初始化这些服务,以从 NIS 主服务器或从服务器查找其信息。该过程的关键在于 ypbind,该工具可将客户端计算机附加到 NIS 服务器。
在 UNIX 下,将在调用 ypbind 时自动确定 NIS 服务器。在大多数 Linux 版本下,必须在 /etc/yp.conf 文件中设置有效 NIS 服务器列表,例如:
ypserver 192.168.0.22 |
将客户端连接到 NIS 服务器的基本过程如下:
- 设置 NIS 域: $ domainname mcslp.nis.
- 启动 portmap——RPC 映射器后台程序(如果尚未运行): $/sbin/portmap.
- 创建 /var/yp 目录,该目录将用于保存一些 NIS 信息。
- 启动 ypbind: $ /usr/sbin/ypbind.
现在通过使用 ypcat 直接查询数据库,以确定 NIS 连接为活动状态。例如,为了获得按名称排序的 NIS passwd 文件的转储,您将使用以下命令:
$ ypcat passwd.byname |
这将转储整个 passwd 数据库。在系统实际使用 NIS 数据库信息前,必须对系统用于查找信息的数据源进行重新配置。
![]() ![]() |
|
Linux 和 UNIX 上的 nsswitch.conf 文件通常用于确定系统在何处查找有关不同数据的信息。例如,可以将 nsswitch.conf 文件配置为在文件中查找主机信息、查询 DNS 或使用 NIS 系统查找该信息。
该文件不仅对用于查找信息的源进行配置,而且也用于配置不同源的查询顺序。选择正确的顺序可以影响是否能查询正确的数据源以及在出现故障时网络的恢复能力。
该文件的格式如下:首先是简单的系统数据库列表,后跟按照所需顺序排列的数据源列表,每行一个服务。例如,清单 2 显示了为 NIS、DNS 和本地文件解析设置的简单 nsswitch.conf 文件的前几行数据。
清单 2. 简单 nsswitch.conf 文件的前几行数据
passwd: nis files shadow: nis files group: nis files hosts: nis dns files networks: nis dns files |
在清单 2 中,可以看到 passwd 的定义为首先使用 NIS 数据库(如果可用)。当用户登录时,将首先构造 NIS 表。如果服务返回用户无法找到的错误,则系统将查询列表中的第二项——在本例中为本地文件。
正确设置和使用 nsswitch.conf 文件的几点提示:
- 始终将文件指定为最后一个选项,特别对于 passwd、shadow 和 hosts 数据更要如此。未能这样做将可能导致计算机不能使用,因为如果 NIS 系统失败,甚至会拒绝 root 用户。
- 请确保文件数据包含关键的登录、主机和其他信息。
- 对于连接到 Internet 的计算机,通常使用 DNS 进行基于 Internet 的解析比依赖于 NIS 中的转发系统更为高效。
通过遵从这些提示,应该能确保不会出现无法登录到自己系统的情况。
![]() ![]() |
![]()
|
网络文件系统 (NFS) 也是由 Sun Microsystems 开发的,作为在计算机间共享文件的一种方法使用。当使用 NFS 共享目录时,可以像本地磁盘一样从另一个计算机加载目录。将会在 NFS 客户端和 NFS 服务器之间复制相同的安全设置、文件权限和其他数据。这就是应通过 NIS 共享用户数据的原因,因为用户 ID、组 ID 和其他信息都将应用到 NFS 共享文件。
通常,在启动 NFS 服务器前,应首先将目录配置为共享。在 Linux 内,可以通过 /etc/exports 文件进行此操作,该文件将定义共享目录的相关目录和选项(如安全限制)。例如,如果要将 /export/data 仅共享给您的网络中的计算机,则可以使用与以下类似的配置行:
/export/data *.mcslp.pri(rw,sync) *(sync) |
rw 选项设置您网络中的所有客户端的共享读取或写入权限,而对所有其他主机将缺省设置为只读。sync 选项可确保远程加载会与服务器同步其文件系统。
在 Solaris 内,可以使用 /etc/dfs/dfstab 文件来指定运行共享命令,以便通过 NFS 导出给定目录。例如,可以使用以下配置行共享相同的目录,以便允许进行读取或写入:
share -F nfs -o rw /export/data |
在 AIX 上,可使用 smit 工具来共享特定目录,或在 HP-UX 上使用 SAM 工具。
在所有情况下,只要创建了文件和配置,就应该启动 NFS 服务器进程。
在客户端上,只需要启动 NFS 客户端进程。然后可以使用 mount 命令加载 NFS 文件系统。应指定服务器名,后跟一个英文冒号和远程目录的完整路径,如下所示:
$ mount bear:/export/data /mnt/data |
还可以使用相同的基本格式来自动加载 NFS 目录,方法是使用 /etc/fstab 或 /etc/vfstab 文件在启动时加载 NFS 目录。还有一种更好的办法,即使用自动加载系统简化加载过程,并同时获得服务器的最佳性能。
![]() ![]() |
![]() |
作为对 NFS 的扩展,应当考虑使用自动加载系统。此组件将在引用目录时自动加载这些目录。例如,通过使用为 /mnt/data 配置的 NFS 共享,与 /mnt/data 关联的 NFS 共享将在键入以下内容时自动加载和提供:
$ cd /mnt/data |
目录停止了频繁使用后,该目录将会被卸载。自动加载器在共享用户目录时尤为有用——个人可以登录到任何计算机并自动从远程 NFS 服务器加载其主目录并向其提供。
使用自动加载器,不仅可以简化从 NFS 服务器加载远程目录的方式,还可以帮助减少使用 NFS 共享向不活动的客户端提供统计数据和检测信号 通信带来的负载。
各个 UNIX 变体均包括自动加载功能。在 Linux 内,必须在内核中配置自动加载功能,并在配置自动加载配置和启动自动加载器前重新启动计算机。为了配置自动加载器,必须首先编辑 /etc/auto.master 或 /etc/autofs/auto.master 文件。这将定义顶级共享设置,将顶级目录映射到另一个映射文件。例如,以下文件会将 /home 和 /mnt 映射到其他两个映射:
/home /etc/autofs/auto.home /mnt /etc/autofs/auto.mnt |
可以随后在 /mnt directory 和对应的映射内配置其映射到的子目录和 NFS 目录。例如,清单 3 就是 mnt 映射中的一个片段。
清单 3. mnt 映射中的片段
applications atuin:/Volumes/Shared1/Applications archiveprepare atuin:/Volumes/Shared1/ArchivePrepare backupprepare atuin:/Volumes/Shared1/BackupPrepare build atuin:/Volumes/Shared1/Build correspondence atuin:/Volumes/Shared1/Correspondence devprojects atuin:/Volumes/Shared1/DevProjects docarchive atuin:/Volumes/Shared1/DocArchive incoming atuin:/Volumes/Shared1/Incoming information atuin:/Volumes/Shared1/Information |
由于清单 3 中所示的片段位于 /mnt 映射中,因此,当用户访问 /mnt/applications 时,自动加载器将运行相关命令加载映射的 NFS 共享,在本例中为 atuin:/Volumes/Shared1/Applications。
在 UNIX 上,您将需要随后启动自动加载后台程序。该程序在大部分 UNIX 变体上都称为 automount 或 automountd,而在很多 Linux 变体中,称为 autofs 且使用以下命令启动:
/etc/init.d/autofs start |
![]() ![]() |
![]()
|
当将 NIS 或 NIS+ 与 NFS 一起使用时,最好确定服务器之间的时间得到了正确的同步。这对 NIS 或 NIS+ 至关重要,因为将在信息分布期间使用时间来确保数据库保持最新。如果计算机没有同步,则从服务器可能会停止从主服务器下载信息,或可能会拒绝对主服务器的更新。
实现时间同步的最简单方法是使用网络时间协议(Network Time Protocol,NTP),这是大部分 Linux 上的标准组件或可安装组件,在各个 UNIX 变体中也变得越来越普遍。
下载并编译或独立安装了相应程序包后,就可以得到关键组件 ntpd 后台程序。ntpd 后台程序在后台执行,可以配置为提供时间同步信息和根据服务器自动更新本地计算机的时间。
如果使用 NIS,请设置 NIS 主服务器为网络的其他计算机提供同步信息。将服务器配置为使用其内置时钟,或者,如果连接到 Internet,则使其从一个公共服务器获取其时间同步信息。例如,我的 ISP 就提供 NTP 服务。/etc/ntp.conf 配置文件中保存着我的 ISP 的 NTP 服务器的名称,如下所示:
server ntp0.zen.co.uk minpoll 12 maxpoll 17 |
网络中的每个 NIS 服务器和客户端都将配置为使用相同的 /etc/ntp.conf 文件来与 NIS 主服务器通信,以获取时间信息:
server atuin.mcslp.pri minpoll 12 maxpoll 17 |
配置了两个系统后,使用以下命令在 NIS 主服务器上启动 NTP 后台程序:
/etc/init.d/ntp start |
然后在每个 NIS 从服务器和客户端上重复该过程。
![]() ![]() |
![]()
|
通过传递和共享信息,可更为方便地将 UNIX 和 Linux 系统集成到一起。共享了登录和其他信息后,您的用户便可连接并使用您的 UNIX 和 Linux 计算机,而不需要考虑为其各自使用单独的密码。如果将此系统与 NFS 共享结合使用,还可以共享文件;而且,如果使用自动加载器处理用户个人的主目录,则他们可以继续使用自己的文件和资源以及那些通过文件系统共享的内容,而不受其当前所在的操作系统和计算机的限制。
![]() ![]() |
![]()
|
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文
- IBM Redbook AIX and Linux Interoperability 讨论了用于提高 AIX 和 Linux 之间的协作的 NIS、NFS 和其他技术。
-
Using the Network File System in AIX 介绍了 NFS 系统的基本知识。
- Understanding the automounter(摘自《Solaris Advanced System Administrator's Guide》)提供了几乎所有 Linux 和 UNIX 系统所支持的自动加载系统的帮助和设置说明。
-
Managing NFS and NIS 是一个非常不错的指南,提供了有关在各种平台上使用这两个系统的信息。
- 了解关于 developerWorks 技术活动和网络广播的最新消息。
- 想要了解更多内容?developerWorks AIX and UNIX 专区提供数百篇关于 AIX 和 UNIX 的文章以及入门级、中级和高级教程,将让您大开眼界。
讨论
- 参与 developerWorks 博客,从而参加到 developerWorks 社区中来。
![]() ![]() |
![]()
|
![]() |
||
![]() |
Martin Brown 成为职业作家已经超过 7 个年头。他所撰写的书籍和文章涵盖了各种各样的主题。他所擅长的领域包括大量开发语言和平台——Perl、Python、Java™、JavaScript、Basic、Pascal、Modula-2、C、C++、Rebol、Gawk、Shellscript、Windows™、Solaris、Linux、BeOS、Mac OS/X 等等——和 Web 编程、系统管理与集成。他是 Microsoft 的主题专家(Subject Matter Expert,SME),并长期为 ServerWatch.com、LinuxToday.com 和 IBM developerWorks 供稿。他也是 Computerworld、The Apple Blog 及其他站点的博客。您可以通过他的网站与他联系。 |