设置受限 NIS 服务器

设置受限 NIS 服务器

我目前正在尝试配置具有受限访问权限的 NIS 服务器,以便仅将passwdgroup映射导出到“受信任”主机。为此,我尝试创建一个/etc/netgroup包含受信任主机名称的网络组(在适当命名的文件中),我想添加一条规则,例如

ALL:ALL EXCEPT @nis_netgroup

/etc/hosts.deny。这对我来说有双重好处:它限制对 NIS 映射和 NFS 共享的访问。然而,这种方法有几个问题需要帮助:

  • 这不是很安全,因为主机名很容易被欺骗
  • 无论我设置的搜索域如何,这些yp工具都坚持我所有主机的域名都是。.local因此,即使我设置了一个类似的域.my.domain,并且我的 NIS 服务器被命名server(因此它的 FQDN 为server.my.domain),在绑定到该服务器后,ypwhich也会返回server.local.所以这需要我在文件中设置“奇怪的”主机名netgroup
  • 即使我通过了上述两个步骤,它不起作用:NIS 服务器计算机不断尝试绑定到自身,但失败。

我发现的一条线索/var/log/syslog可能与这个问题有关:

named[<pid>]: bad zone transfer request 'local/IN'

这是什么意思?

我过去管理过类似的设置,只不过所有客户端都配置了静态 IP,因此/etc/hosts.allow只需列出这些 IP,同时/etc/hosts.deny会拒绝任何其他请求。我无法在当前设置中使用此方法的原因是我正在使用动态 DNS 以及为客户端分配 DHCP 的 IP。有没有办法让主机访问通过动态分配的 IP 进行控制(即使用动态 DNS 进行偏执的主机名地址查找)?该hosts_access(5)页面说我可以使用以 开头的字符串/来指定文件中的客户端,因此我认为我应该将该语法与我的 DNS 区域文件结合使用。没有喜悦!在这些情况下,NIS 服务器仍然无法与其自身绑定。我不确定这是否与.local域问题有关(DNS 区域文件显然.my.domain不使用域.local)。

有什么帮助吗?

答案1

你问了很多问题,所以这将是一个很难回答的问题。我想最简单的事情就是分享我的 NIS 设置(是的,尽管我告诉过你不要设置,但我在家里的 LAN 中有一个设置用于测试目的)。

首先,您需要安装ypservypbindyp-tools软件包。您没有说明您正在使用什么发行版,因此我将引导您完成 CentOS 5.x 上的设置。我的 NIS 域中有 Ubuntu 12.04 客户端,因此我们可以根据需要调整此答案。

为了简单起见,我将过滤掉配置文件中的注释,只向您显示实际执行任何操作的行。再次,如果您需要澄清,我可以在需要时发布它们。

伊普服务

该文件设置了我希望如何ypserv共享我拥有的各种 NIS 映射。下面我限制哪些IP子网可以访问各种地图。

# more /etc/ypserv.conf |egrep -v "^#|^$"
dns: no
files: 50
xfr_check_port: yes
192.168.1.  : *       : shadow.byname         : none
192.168.1.  : *       : passwd.adjunct.byname : none
192.168.1.  : *       : passwd.byuid          : none
192.168.1.  : *       : *                     : none
*           : *       : *                     : deny
*           : *       : *                     : none

我应该提到的是,我从 Sun/Solaris 的老家伙那里学会了如何设置 NIS/YP,所以我的方法可能有点偏离正轨。他们总是使用passwd.adjunct文件来保存实际密码,所以我在这里也这样做。

设置NIS域名

我的 NIS 域名为 nis.bubba.home。在 Red Hat 发行版中,您通常会在此文件中设置 NIS 域:/etc/sysconfig/network.这是我的:

$ more /etc/sysconfig/network
HOSTNAME="flanders.bubba.net"
NETWORKING="yes"
NISDOMAIN=nis.bubba.home

通过此条目,当您运行domainname命令时,您应该获得NISDOMAIN值:

# domainname
nis.bubba.home

很多人对这个命令感到困惑,它与主机的域名(bubba.net)无关,它是 NIS 域的实际名称。请参阅域名手册页更多细节。

/etc/yp.conf

这是客户端 ( ) 使用的文件,ypbind以便它们知道要连接到哪个服务器。

# more /etc/yp.conf |egrep -v "^#|^$"
domain nis.bubba.home server 192.168.1.101

/etc/nsswitch.conf

该文件控制哪些设施将使用 NIS。

# more /etc/nsswitch.conf |grep nis |egrep -v "^#|^$"
passwd:     files nis
shadow:     files nis
group:      files nis
hosts:      files nis dns
networks:   files nis
protocols:  files nis
services:   files nis
netgroup:   files nis
automount:  files nis
aliases:    files nis

/etc/yp

为了尽量保持事情顺利,我设置了这个目录,并用最终构建我的 NIS 映射的文件填充它。这不是完整的列表,但这里是我在此目录中的几个文件:

auto.master、组、passwd、passwd.adjunct 和影子

# shadow
rhays:##rhays:11304::99999::::135545092
tracy:##tracy:12390:0:99999:7:::
tuber:##tuber:12390:0:99999:7:::

在使用 passwd.adjunct 时,密码存储在该文件中,并且有一个引用(参见上面,即 ##rhays)说明passwd.adjunct特定用户对应的行。

# passwd.adjunct
rhays:ZNiFOTwsw313B:11299:0:99999:7:::

/var/yp

此目录是 NIS 服务器ypserv共享数据的位置。当Makefile您编辑/etc/yp.

该目录如下所示:

# ls | column
binding     Makefile.orig    nicknames       RCS          ypservers
Makefile    Makefile.rpmnew  nis.bubba.home  securenets

在我们进入之前Makefile,我们感兴趣的其他文件是该securenets文件。这可以控制允许哪些 IP 地址和子网连接到该服务器。这是我的该文件的版本:

# securenets
host 127.0.0.1
255.255.255.0   192.168.1.0

生成文件

以下是我的一些摘录,Makefile以帮助展示事情是如何整合在一起的。对于初学者来说,这些变量指向我的地图文件。

YPSRCDIR = /etc/yp
YPPWDDIR = /etc/yp
YPBINDIR = /usr/lib/yp
YPSBINDIR = /usr/sbin
YPDIR = /var/yp
YPMAPDIR = $(YPDIR)/$(DOMAIN)
...
GROUP       = $(YPPWDDIR)/group
PASSWD      = $(YPPWDDIR)/passwd
SHADOW      = $(YPPWDDIR)/shadow
ADJUNCT     = $(YPPWDDIR)/passwd.adjunct
...
all: passwd group hosts rpc services netid protocols mail \
    netgrp auto.master auto.home auto.packages auto.data1 auto.data2 \
    auto.proj auto.vz_backups passwd.adjunct networks printcap

Makefile根据您的特定环境所包含的地图文件,需要进行其他修改。

将所有内容整合在一起

因此,当您设置了地图文件、配置文件并安装了所有必要的软件包后,您需要执行以下操作:

$ cd /var/yp && make
$ /etc/init.d/ypserv start
$ /etc/init.d/ypbind start

# who's my domain master?
$ ypwhich 
flanders.bubba.net

# what maps are available?
$ ypwhich -m
passwd.byname flanders.bubba.net
passwd.adjunct.byname flanders.bubba.net
hosts.byaddr flanders.bubba.net
...

那么我应该运行 NIS 吗?

我还是说不。这是古老的技术,安全性很差,而且极其复杂。我发布本教程更多是为了向您展示为什么不应该使用它,而不是鼓励您使用它。

如果您花时间学习 NIS 的详细信息,那么您最好学习如何部署 LDAP。

答案2

无论如何,我做了一些不同的事情。由于时间有点紧迫,我决定再试一次 NIS。我放弃了网络组方法,简单地配置hosts_access(5)如下:

/etc/hosts.allow

ALL: localhost,.my.domain

#Don't lock yourself out:
sshd: ALL 

/etc/hosts.deny

ALL: ALL

我控制了谁可以访问 NFS 挂载,类似如下/etc/exports

/my/nfs/share -rw *.my.domain

再加上修改即可/etc/nsswitch.conf

hosts: files dns

换句话说,我删除了 mDns,因为它可以识别我的本地bind9服务器无法识别的主机。

现在我的 DHCP 服务器只为具有已知 MAC 地址的客户端分配 IP 并更新bind9服务器记录;因此 DNS 只会解析以 结尾的主机(.my.domain如果它们是由 DHCP 分配的),因此只有受信任的主机才能看到 NIS 映射或挂载 NFS 共享。

我知道这可能会被 MAC 地址欺骗所欺骗,但这是我能找到的最好的解决方案,因为我没有时间升级 LDAP。

相关内容