設置受限 NIS 伺服器
我目前正在嘗試配置具有受限訪問權限的 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
會拒絕任何其他請求。我不能在目前設置中使用這種方法的原因是我正在為客戶端使用帶有 DHCP 分配 IP 的動態 DNS。有沒有辦法通過動態分配的 IP 來控制主機訪問(即使用動態 DNS 進行偏執的主機名地址查找)?該hosts_access(5)
頁面說我可以使用以開頭的字元串/
從文件中指定客戶端,所以我想我會將該語法與我的 DNS 區域文件結合使用。沒有歡樂!在這些情況下,NIS 伺服器仍然無法綁定到自身。我不確定這是否與.local
域問題(DNS 區域文件顯然.my.domain
不使用域.local
)。有什麼幫助嗎?
你問了很多問題,所以這將是一個很難回答的問題。我想最簡單的做法是分享我的 NIS 設置(是的,即使我告訴過你不要設置,我在家裡的 LAN 中有一個設置用於測試目的)。
要開始,您需要安裝
ypserv
、ypbind
和yp-tools
包。你沒有說你使用的是什麼發行版,所以我將引導你完成我在 CentOS 5.x 上的設置。我的 NIS 域中有 Ubuntu 12.04 客戶端,因此我們可以根據需要調整此答案。為了簡單起見,我將過濾掉我的配置文件中的註釋,只向您展示實際執行任何操作的行。同樣,如果您需要澄清,我可以在需要時發布它們。
ypserv
該文件設置了我希望我
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
/等/是的
為了盡量保持直截了當,我設置了這個目錄,並用最終建構我的 NIS 映射的文件填充它。這不是一個完整的列表,但這裡有幾個我在這個目錄中的文件:
auto.master、組、passwd、passwd.adjunct & shadow
# 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 會更好。