我目前正在尝试配置具有受限访问权限的 NIS 服务器,以便仅将passwd
和group
映射导出到“受信任”主机。为此,我尝试创建一个/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 中有一个设置用于测试目的)。
首先,您需要安装ypserv
、ypbind
和yp-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。