Tux 知道分享是好事,第 3 部分

作者:Marcel Gagné
让我为您查找一下。

欢迎大家回到系统管理员角的又一期节目,在这里我们讨论关于 Linux 的一切,深入到我们系统的表面之下,真正了解机器本身的灵魂。 <此处插入合适的背景音乐> 上次我们在这个角落相遇时,我们正在研究文件共享,特别是 NFS。正如大家所注意到的,NFS 在权限方面存在一些相当恼人的问题。关于 NFS 最令人恼火的事情是,它假设一台机器上的用户名和 UID 与另一台机器上的用户名和 UID 完全匹配,这意味着您要么必须在所有服务器上拥有匹配的密码和组文件,要么在某种程度上,匿名访问足以满足您的所有需求。

这个问题的答案是 NIS(好吧,一个答案,无论如何)。NIS 允许我们在我们的网络中共享关键系统信息的数据库,例如用户、组、电子邮件别名和其他内容,而无需在每个服务器上维护该信息。与 NFS 一样,NIS 也是 Sun Microsystems 的孩子,并且也像 NFS 一样,可以追溯到 1980 年代。那时,它被称为 Yellow Pages,但由于 Yellow Pages 恰好是注册商标,因此更名以避免法律纠纷。尽管如此,当我们处理 NIS 时,YP 时代的影子仍然伴随着我们。正如您将在本节中很快发现的那样,字母“yp”出现在配置文件和命令中。

免责声明 v 1.0:这是一个很大的主题,需要涵盖服务器端和客户端。因此,我将把它分成两个部分。下周,我们将讨论客户端配置。为了弥补您,我还将为您提供工具,以完全自动化远程系统例程的整个挂载和卸载过程。

NIS(以及最近的 NIS+)的功能远不止允许这两个文件在整个网络中保持一致。也可以维护其他文件。我们可以使用ypcat -x命令来获取系统已知的或管理的数据库列表。您需要运行 portmapper(正如我们在本系列第 1 部分 www.linuxjournal.com/article/4710 中讨论的那样)。在您的系统上尝试此命令

   [root@testsys /root]# ypcat -x Use "ethers"    for map
   "ethers.byname" Use "aliases"   for map "mail.aliases" Use
   "services"  for map "services.byname" Use "protocols" for map
   "protocols.bynumber" Use "hosts"     for map "hosts.byname" Use
   "networks"  for map "networks.byaddr" Use "group"     for map
   "group.byname" Use "passwd"    for map "passwd.byname"

现在,您已经了解了可以使用 NIS 分发哪些类型的信息,而且还有更多,您将会看到的。在我们讨论 NFS 上的权限时,特别感兴趣的是“group”和“password”数据库。请记住,NFS 期望一台机器上的用户在另一台机器上具有相同的 UID。在总是更新每台服务器以反映用户和组名称更改的情况下,NIS 是答案。

我们启动 NIS 的第一件事是 NIS 域名,它与您的互联网域名没有任何相似之处(尽管如果您选择,它可以相同)。让我们创建一个名为 mydomain.nis 的 NIS 域名。在我的 Red Hat 系统上,这是通过在 /etc/sysconfig/network 中设置 NIS_DOMAIN 变量来完成的,如下所示

   NIS_DOMAIN=mydomain.nis

在 Debian 系统上,域名是从 /etc/defaultdomain 中提取的。在这种情况下,添加一行包含 NIS 域名,仅此而已。

还有更多的事情要做,但在我们可以到达那里之前,我们需要启动 ypserver 进程。如果您正在运行 Red Hat,请尝试此命令

   /etc/rc.d/init.d/ypserv start

Debian 用户需要先编辑他们的 /etc/init.d/nis 文件。在文件顶部附近,您会找到一行内容NISSERVER=false。将“false”更改为“master”。现在,使用此命令启动 ypserver

   /etc/init.d/nis start

使用 NIS,您也可以设置备份服务器。目前,我们将专注于主服务器或主控服务器。我们已经定义了域名,现在我们将继续定义将共享哪些数据库。这是通过修改一个名为 /var/yp/Makefile 的文件来完成的。(它开始看起来非常像我们在编译程序,不是吗?)在您最喜欢的编辑器中打开该文件,您会看到类似这样的内容

   GROUP       = $(YPPWDDIR)/group
   PASSWD      = $(YPPWDDIR)/passwd
   SHADOW      = $(YPPWDDIR)/shadow
   GSHADOW     = $(YPPWDDIR)/gshadow
   ADJUNCT     = $(YPPWDDIR)/passwd.adjunct
   #ALIASES     = $(YPSRCDIR)/aliases  # aliases could be in /etc or /etc/mail
   ALIASES     = /etc/aliases
   ETHERS      = $(YPSRCDIR)/ethers     # ethernet addresses (for rarpd)
   BOOTPARAMS  = $(YPSRCDIR)/bootparams # for booting Sun boxes (bootparamd)
   HOSTS       = $(YPSRCDIR)/hosts
   NETWORKS    = $(YPSRCDIR)/networks
   PRINTCAP    = $(YPSRCDIR)/printcap
   PROTOCOLS   = $(YPSRCDIR)/protocols
   PUBLICKEYS  = $(YPSRCDIR)/publickey

该列表相当长,并且可以添加其他内容。注释掉您不需要或不想要的内容。实际构建的内容在文件稍后部分决定。注意 YPPWDDIR 变量。它在文件的前面设置,默认情况下是 /etc,大多数这些文件都位于此处。请注意,因为这并不总是正确的。例如,后来的 Sendmail 版本将别名文件放在 /etc/mail 而不是 /etc 中。一旦您定义了您想要的数据库,请查找这个

   NOPUSH=true

由于我们在此示例中设置单个主 NIS 服务器,因此我们将其设置为 true。如果我们有辅助或“slave”服务器,我们会将其设置为 false。还要注意这两个设置

   MINUID=500
   MINGID=500

这是正在提供的默认 UID 和 GID 信息。您可能会猜到,这其中存在安全原因。我们不想在我们的网络中宣传管理 ID。如果您想更改此设置,请在此处进行更改。如果您在 Debian 系统上进行设置,您可能会发现这些已经设置为 100 而不是 Red Hat 的默认值 500。

好的。在我们准备完成服务器配置之前,还有两个非常重要的设置。在文件中查找这两个设置。

   MERGE_PASSWD=true
   MERGE_GROUP=true

在所有可能性中,您都在使用影子密码文件;如果您没有使用,请立即返回并实施影子密码。 <好吧,这很快>。NIS 会将来自您的 /etc/shadow 文件的信息合并到其共享的 /etc/passwd 副本中。这通常设置为 true,但您可以覆盖它。MERGE_GROUP 设置在某些系统上默认为 false(我的 Debian 测试系统就是其中之一),因此您可能会最终更改此设置。查找 /etc/gshadow 文件。如果您的系统正在使用它,也将其设置为 true。

现在,我们几乎准备好构建新的数据库了。我们做的最后一件事是确认我们想要(或不想要)构建什么。这是您真正决定什么从 NIS 门出去的地方。在 Makefile 中查找此文本。

   # If you don't want some of these maps built, feel free to comment
   # them out from this list.

   all:  passwd group hosts rpc services netid protocols netgrp mail
            # shadow publickey # networks ethers bootparams printcap
            # amd.home auto.master auto.home passwd.adjunct

再一次,它们存在的设置可能就是您想要的,但是您可以设置诸如自动挂载文件(auto.master 等),我们将在下次更详细地讨论。但现在...

准备好了吗?不,您不要输入make.

初始化所有这些数据库的命令称为 ypinit

   [root@testsys /root]# /usr/lib/yp/ypinit -m
   The local host's domain name hasn't been set.  Please set it.

这到底是怎么回事?如果您收到此消息,那不是因为您的系统讨厌您。很可能是域名在您的启动时间脚本中。下次系统启动时,您不必担心这个问题,因为它已经设置好了。由于我们现在不想重新启动,让我们使用此命令手动设置域名。

   domainname mydomain.nis

现在,我们再次运行 ypinit 命令。

   [root@scigate /root]# /usr/lib/yp/ypinit -m
   At this point, we have to construct a list of the hosts which will run NIS
   servers.  testsys.mydomain.nis is in the list of NIS server hosts.  Please continue
   to add the names for the other hosts, one per line.
   When you are done with the list, type a &lt;control D&gt;.

            next host to add:  testsys.domain.nis
            next host to add:

除非您想在此处设置辅助服务器,否则只需按 Ctrl+D,您就完成了。如果您想添加服务器,在事后添加很容易。这些被添加到一个名为/var/yp/ypservers的文件中。如果您更改到此目录,您会看到这是一个简单的文本文件。完成后,ypinit 进程将为您执行 make 并创建数据库。您应该看到如下所示的输出。

   The current list of NIS servers looks like this:

   testsys.mydomain.nis

   Is this correct?  [y/n: y]
   We need some  minutes to build the databases...
   Building /var/yp/mydomain.nis/ypservers...
   Running /var/yp/Makefile...
   gmake[1]: Entering directory `/var/yp/mydomain.nis'
   Updating passwd.byname...
   Updating passwd.byuid...
   Updating group.byname...
   Updating group.bygid...
   Updating hosts.byname...
   Updating hosts.byaddr...
   Updating rpc.byname...
   Updating rpc.bynumber...
   Updating services.byname...
   Updating netid.byname...
   Updating protocols.bynumber...
   Updating protocols.byname...
   Updating mail.aliases...
   gmake[1]: Leaving directory `/var/yp/mydomain.nis'

当您第一次运行它时,它可能无法如此干净地工作。此处发生故障的最可能情况是因为您告诉 Makefile 创建系统上不存在的数据库。注意消息,并相应地编辑 Makefile。然后,只需重新运行 ypinit 命令。此时,您也可以只键入 make。(如果您真的、真的想这样做。)

是的,还有更多,但我又一次填满了我的分配空间。关于共享文件和信息的整个过程有很多内容,但在 Linux 网络中,这就是我们所做的。然而,像 Linux 世界中的所有美好事物一样,艰苦的工作都在前期。一旦一切完成,您几乎可以预订去欧洲、多米尼加共和国或 <在此处插入您最喜欢的度假目的地> 的旅行了。所以,我在这里离开您。直到下一次,请记住您妈妈说过的话,“分享是好事。”

加载 Disqus 评论