9. 设置 NIS 服务器

9.1. 服务器程序 ypserv

本文档仅描述如何设置 "ypserv" NIS 服务器。

NIS 服务器软件可以在以下位置找到:

  Site               Directory                    File Name

  ftp.kernel.org     /pub/linux/utils/net/NIS     ypserv-2.9.tar.gz
  ftp.kernel.org     /pub/linux/utils/net/NIS     ypserv-2.9.tar.bz2

您也可以查看 http://www.linux-nis.org/nis/ 以获取更多信息。

传统的 NIS 和 NYS 的服务器设置是相同的。

编译该软件以生成 ypservmakedbm 程序。ypserv-2.x 仅支持 securenets 文件进行访问限制。

如果您将服务器作为主服务器运行,请确定您需要通过 NIS 提供哪些文件,然后在/var/yp/Makefile中的 "all" 规则中添加或删除相应的条目。您应该始终查看 Makefile 并编辑文件开头的选项。

ypserv 1.1 和 ypserv 1.2 之间有一个很大的变化。自 1.2 版本以来,文件句柄被缓存。这意味着如果您创建新映射,则必须始终使用 -c 选项调用 makedbm。请确保您使用的是新的/var/yp/Makefile来自 ypserv 1.2 或更高版本,或者在 Makefile 中为 makedbm 添加 -c 标志。如果您不这样做,ypserv 将继续使用旧映射,而不是更新后的映射。

现在编辑/var/yp/securenets/etc/ypserv.conf。有关更多信息,请阅读 ypserv(8) 和 ypserv.conf(5) 手册页。

确保端口映射器 (portmap(8)) 正在运行,并启动服务器 ypserv。命令

    % rpcinfo -u localhost ypserv

应该输出类似以下内容:

    program 100004 version 1 ready and waiting
    program 100004 version 2 ready and waiting

“version 1” 行可能会缺失,具体取决于您使用的 ypserv 版本和配置。如果您有旧的 SunOS 4.x 客户端,则这是必要的。

现在生成 NIS (YP) 数据库。在主服务器上,运行

    % /usr/lib/yp/ypinit -m

在从服务器上,确保 ypwhich -m 工作正常。这意味着,您的从服务器必须配置为 NIS 客户端,然后才能运行
    % /usr/lib/yp/ypinit -s masterhost
以将主机安装为 NIS 从服务器。

就这样,您的服务器已启动并运行。

如果您遇到更大的问题,您可以分别在不同的 xterm 终端中以调试模式启动 ypservypbind。调试输出应该会显示出错的地方。

如果您需要更新映射,请在/var/yp目录中的 NIS 主服务器上运行 make。如果源文件较新,这将更新映射,并将文件推送到从服务器。请不要使用 ypinit 更新映射。

您可能需要在*从*服务器上编辑 root 用户的 crontab,并添加以下行

      20 *    * * *    /usr/lib/yp/ypxfr_1perhour
      40 6    * * *    /usr/lib/yp/ypxfr_1perday
      55 6,18 * * *    /usr/lib/yp/ypxfr_2perday
这将确保大多数 NIS 映射保持最新,即使由于从服务器在主服务器上完成更新时关闭而错过了更新。

您可以随时稍后添加从服务器。首先,确保新的从服务器具有联系 NIS 主服务器的权限。然后在新的从服务器上运行
    % /usr/lib/yp/ypinit -s masterhost
在主服务器上,将新的从服务器名称添加到/var/yp/ypservers并在/var/yp中运行 make 以更新映射。

如果您想限制用户对 NIS 服务器的访问,您还需要通过运行 ypbind 并将加号条目添加到/etc/passwd密码文件的*中间*,将 NIS 服务器设置为客户端。库函数将忽略第一个 NIS 条目之后的所有普通条目,并将通过 NIS 获取其余信息。这样,NIS 访问规则就得以维护。一个例子

     root:x:0:0:root:/root:/bin/bash
     daemon:*:1:1:daemon:/usr/sbin:
     bin:*:2:2:bin:/bin:
     sys:*:3:3:sys:/dev:
     sync:*:4:100:sync:/bin:/bin/sync
     games:*:5:100:games:/usr/games:
     man:*:6:100:man:/var/catman:
     lp:*:7:7:lp:/var/spool/lpd:
     mail:*:8:8:mail:/var/spool/mail:
     news:*:9:9:news:/var/spool/news:
     uucp:*:10:50:uucp:/var/spool/uucp:
     nobody:*:65534:65534:noone at all,,,,:/dev/null:
     +miquels::::::
     +:*:::::/etc/NoShell
     [ All normal users AFTER this line! ]
     tester:*:299:10:Just a test account:/tmp:
     miquels:1234567890123:101:10:Miquel van Smoorenburg:/home/miquels:/bin/zsh

因此,用户 "tester" 将存在,但 shell 为 /etc/NoShell。miquels 将具有正常访问权限。

或者,您可以编辑/var/yp/Makefile文件,并将 NIS 设置为使用另一个源密码文件。在大型系统中,NIS 密码和组文件通常存储在/etc/yp/中。如果您这样做,则用于管理密码文件的常用工具,例如passwd, chfn, adduser将不再起作用,您需要为此使用特殊的自制工具。

但是,yppasswd, ypchshypchfn当然会起作用。

9.2. 服务器程序 yps

要设置 "yps" NIS 服务器,请参考上一段。“yps”服务器的设置类似,*但*并非完全相同,因此如果您尝试将“ypserv”指令应用于“yps”,请注意!“yps”不受任何作者支持,并且包含一些安全漏洞。您真的不应该使用它!

“yps” NIS 服务器软件可以在以下位置找到:

  Site                  Directory                   File Name

  ftp.lysator.liu.se    /pub/NYS/servers            yps-0.21.tar.gz
  ftp.kernel.org        /pub/linux/utils/net/NIS    yps-0.21.tar.gz

9.3. 程序 rpc.ypxfrd

rpc.ypxfrd 用于加速从 NIS 主服务器到 NIS 从服务器传输非常大的 NIS 映射。如果 NIS 从服务器收到消息,表明有新的映射,它将启动 ypxfr 来传输新的映射。ypxfr 将使用 yp_all() 函数从主服务器读取映射的内容。当有非常大的映射必须由数据库库存储时,此过程可能需要几分钟。

rpc.ypxfrd 服务器通过允许 NIS 从服务器简单地复制主服务器的映射文件,而不是从头开始构建自己的映射文件,从而加快了传输过程。rpc.ypxfrd 使用基于 RPC 的文件传输协议,因此无需构建新映射。

rpc.ypxfrd 可以由 inetd 启动。但由于它启动非常慢,因此应与 ypserv 一起启动。您只需要在 NIS 主服务器上启动 rpc.ypxfrd。

9.4. 程序 rpc.yppasswdd

每当用户更改密码时,应更新 NIS 密码数据库以及可能依赖于 NIS 密码数据库的其他 NIS 数据库。“rpc.yppasswdd”程序是一个处理密码更改并确保 NIS 信息将相应更新的服务器。rpc.yppasswdd 现在已集成到 ypserv 中。您不再需要较旧的独立 yppasswd-0.9.tar.gz 或 yppasswd-0.10.tar.gz,也不应再使用它们。

您只需要在 NIS 主服务器上启动 rpc.yppasswdd。默认情况下,不允许用户更改其全名或登录 shell。您可以使用 -e chfn 或 -e chsh 选项允许这样做。

如果您的 passwd 和 shadow 文件不在另一个目录(不是 /etc)中,则需要添加 -D 选项。例如,如果您已将所有源文件放在 /etc/yp 中,并希望允许用户更改其 shell,则需要使用以下参数启动 rpc.yppasswdd

   rpc.yppasswdd -D /etc/yp -e chsh

   rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh

无需执行更多操作。您只需要确保rpc.yppasswdd使用与/var/yp/Makefile相同的文件。错误将使用 syslog 记录。