NIS 伺服器端主要在於提供資料庫給用戶端作為驗證之用,並且伺服器端因為資料庫的來源又可分為
master/slave 兩大類。底下我們將會介紹這兩種伺服器的安裝方式哩!
由於 NIS 伺服器需要使用 RPC 協定,且 NIS 伺服器同時也可以當成用戶端,
因此他需要的套件就有底下這幾個:
- yp-tools :提供 NIS 相關的查尋指令功能
- ypbind :提供 NIS Client 端的設定套件
- ypserv :提供 NIS Server 端的設定套件
- portmap :就是 RPC 一定需要的資料啊!
如果你是使用 Red Hat 的系統,例如我們的 CentOS 4.x 的話,那你可以利用『 rpm -qa | grep '^yp' 』
來檢查是否有安裝上述的套件。一般來說 yp-tools, ypbind 都會主動的安裝,不過 ypserv 可能就不會安裝了。
此時建議你直接使用『
yum install
ypserv 』來安裝吧!立刻就裝好了。底下立刻來設定囉!
NIS 的設定真是很簡單,首先,你必須要在 NIS master 這部伺服器上面搞定你的帳號與密碼相關資料,
這包括 /etc/passwd, /etc/shadow, /etc/hosts, /etc/group .... 等等,都得要先搞定才行!
詳細的帳號相關資料請參考
基礎篇的帳號管理章節。
等到搞定之後你就可以繼續 NIS 伺服器的設定了:
設定 NIS 的網域名稱 (NIS domain name)
因為所有的 NIS server/client 都需要設定 NIS 領域名稱才行,所以就設定吧!設定的方式很簡單,
直接以 nisdomainname 這個指令來下達即可。(其實 nisdomainname 與 ypdomainname 及 domainname
都是一模一樣的指令啦!你只要記住一個指令名稱即可。請自行 man domainname 吧!)
[root@linux ~]# nisdomainname [NIS 領域名稱]
參數:
若沒有加上領域名稱,則會顯示出目前的 NIS 領域;
[root@linux ~]# nisdomainname vbirdnis
[root@linux ~]# nisdomainname
vbirdnis <==瞧!已經設定了 NIS 領域名稱囉!
|
如果確定每次開機時都需要啟動這個 NIS 領域名稱的話,直接寫到 /etc/rc.d/rc.local 去:
[root@linux ~]# vi /etc/rc.d/rc.local
# 加入底下這一行:
/bin/nisdomainname vbirdnis
|
若是想要在啟動 NIS 時就自動設定好 NIS 領域的話,可以利用 /etc/sysconfig/network
這個檔案,寫成如下所示的模樣:
[root@linux ~]# vi /etc/sysconfig/network
# 加入底下這一行:
NISDOMAIN=vbirdnis
|
如此一來,你的伺服器就會在開機時,或者是在啟動 NIS 相關服務時,就能夠自行設定好 NIS 領域囉!
主要設定檔 /etc/ypserv.conf
這個設定檔就是 NIS 伺服器最主要的設定檔啦!內容其實很簡單,你可以保留預設值即可。
不過,也可以作一些更動啦!
[root@linux ~]# vi /etc/ypserv.conf
dns: no
# NIS 伺服器的使用時機絕大部分都是在區域網路內而已,所以不需要 DNS 系統,
# 只要 /etc/hosts 設定正確即可!!
files: 30
# 預設會有 30 個資料庫被讀入記憶體當中,因為我們的帳號檔案其實不多,
# 30 個已經足夠使用了!
slp: no
slp_timeout: 3600
# 這兩個與 SLP 服務有關,因為我們僅使用單純的 NIS ,所以不需要啟動。
xfr_check_port: yes
# 這個與 master/slave 有關,將同步更新的資料庫比對所使用的埠口,
# 放置於小於 1024 的埠口內。
# 底下則是設定限制用戶端或 slave server 查詢的權限,利用冒號隔成四部分,分別為:
# [主機名稱/IP] : [NIS網域名稱] : [可用資料庫名稱] : [安全限制]
# [主機名稱/IP] :可以使用 network/netmask 如 192.168.1.0/255.255.255.0
# [NIS網域名稱] :例如本案例中的 vbirdnis
# [可用資料庫名稱]:就是由 NIS 製作出來的資料庫名稱;
# [安全限制] :包括沒有限制 (none)、僅能使用 <1024 (port) 及拒絕 (deny)
# 一般來說,你可以依照我們的網域來設定成為底下的模樣:
127.0.0.0/255.255.255.0 : * : * : none
192.168.1.0/255.255.255.0 : * : * : none
* : * : * : deny
# 星號 (*) 代表任何資料都接受的意思。上面三行的意思是,開放 lo 內部介面、
# 開放內部 LAN 網域,且杜絕所有其他來源的 NIS 要求的意思。
# 萬一上面這三行權限相關的設定無法讓你的 NIS 順利的生效時,
# 你可以先將上面三行註解,然後加入底下這一行:
* : * : * : none
# 這樣應該就能夠讓 NIS 順利的連線了。
|
設定主機名稱 (/etc/hosts) 與建立信任群組 (/etc/netgroup)
在 /etc/ypserv.conf 的設定當中我們談到 NIS 大部分是給區域網路內的主機使用的,
所以當然就不需要 DNS 的設定了。不過,由於 NIS 使用到很多的主機名稱,
所以你一定要設定好 /etc/hosts 對應,否則會無法成功連線 NIS !
這個很重要,絕大部分的朋友無法達成 NIS server/client 的連線都是這裡出問題而已。
依據
本案例的設定值,你應該這樣做:
[root@linux ~]# vi /etc/hosts
192.168.1.2 master.vbirdnis
192.168.1.10 slave.vbirdnis
192.168.1.100 client.vbirdnis
|
注意!如果你的主機名稱與 NIS 的主機名稱不一樣,那麼在這個檔案當中還是需要將你的主機名稱給他設定進來!
否則在後面資料庫的設定時,肯定會發生問題。當然啦,你也可以直接在 /etc/sysconfig/network
當中直接重新設定主機名稱,然後重新開機,或者是利用 hostname 這個指令重新設定你的主機名稱也可以。
除了這個設定之外,有時候你可能需要設定 /etc/netgroup ,雖然比較新的 distributions
都可以略過這個檔案的檢查了,不過建議您還是可以瞭解一下的啦!這個 /etc/netgroup
檔案可以記錄在我們網域裡面被信任的群,這個檔案的內容當中,每一行都有三個欄位,分別以逗號『,』隔開,意義為:
<host>,<user>,<domain>
主機,使用者帳號,領域名稱
|
事實上,如果這個檔案是『空的』的話,那麼代表著『全部的主機、帳號與領域名稱都接受』的意思,因為我們已經在
/etc/ypserv.conf 裡頭設定好了關於安全的項目了,所以這個檔案只要建立即可(本來是不存在的!):
[root@linux ~]# touch /etc/netgroup
|
啟動所有相關的服務
接下來當然是先啟動所有相關的服務囉,這包括 RPC, ypserv 以及 yppasswdd 囉!
不過,如果你的 RPC 本來就已經啟動的話,那就不要重新啟動 portmap 了!
[root@linux ~]# /etc/init.d/portmap start
[root@linux ~]# /etc/init.d/ypserv start
[root@linux ~]# /etc/init.d/yppasswdd start
|
注意,主要的 NIS 服務是 ypserv ,不過,如果要提供 NIS 用戶端的密碼修改功能的話,
最好還是得要啟動 yppasswdd 這個服務才好。在啟動完畢後,我們可以利用 rpcinfo 來檢查看看:
[root@linux ~]# rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100004 2 udp 942 ypserv
100004 1 udp 942 ypserv
100004 2 tcp 945 ypserv
100004 1 tcp 945 ypserv
100009 1 udp 950 yppasswdd
[root@linux ~]# rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
|
要出現上述的畫面才表示正確的啟動了 ypserv 喔!若有需要開機立即啟動 ypserv 的話,請使用
chkconfig 來處理吧!
建立資料庫
在完成了上面的所有步驟後,接下來我們得要開始將主機上面的帳號檔案轉成資料庫檔案啦!
轉換的動作直接透過 /usr/lib/yp/ypinit 這個指令來處理即可!整個步驟是這樣做的:
[root@linux ~]# /usr/lib/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. master.vbirdnis 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 <control D>.
next host to add: master.vbirdnis <==這個地方系統會主動捉到
next host to add: <==按下 [ctrl]-d
The current list of NIS servers looks like this:
master.vbirdnis
Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/vbirdnis/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/vbirdnis'
Updating passwd.byname...
....中間省略....
gmake[1]: Leaving directory `/var/yp/vbirdnis'
master.vbirdnis has been set up as a NIS master server.
Now you can run ypinit -s master.vbirdnis on all slave server.
|
要注意出現的資訊當中,在告知你可以直接輸入 [ctrl]-d 以結束的那個地方,
你的主機名稱會主動的被捉出來,注意!這個主機名稱務必需要在 /etc/hosts 可以被找到 IP 的對應,
否則會出現問題。另外,萬一在執行 ypinit -m 時,出現如下的錯誤,那肯定就是有些資料沒有被建立了!
gmake[1]: *** No rule to make target `/etc/aliases', needed by
`mail.aliases'. Stop.
gmake[1]: Leaving directory `/var/yp/vbirdnis'
make: *** [target] Error 2
Error running Makefile.
Please try it by hand.
[root@linux ~]# touch /etc/aliases
# 解決方法很簡單吶!缺少什麼檔案,就 touch 他就是了!
[root@linux ~]# /usr/lib/yp/ypinit -m
# 然後再重新執行一次即可!
|
如果是如下的錯誤,那可能是因為:
- 你的 ypserv 沒有順利啟動,請利用 rpcinfo 檢查看看;
- 你的主機名稱沒有對應好,請檢查 /etc/hosts
gmake[1]: Entering directory `/var/yp/vbirdnis'
Updating passwd.byname...
failed to send 'clear' to local ypserv: RPC: Program not
registeredUpdating passwd.byuid...
failed to send 'clear' to local ypserv: RPC: Program not
registeredUpdating group.byname...
....
|
建立了資料庫後,你必需要通知 ypserv 與 yppasswdd 這兩支服務,告知資料庫已經被更改了,
所以你可以這樣做:
[root@linux ~]# /etc/init.d/ypserv restart
[root@linux ~]# /etc/init.d/yppasswdd restart
|
要注意啊,如果你的使用者密碼有變動過,那麼你就得要重新製作資料庫,重新啟動 ypserv 及 yppasswdd 喔!
注意注意啊!
與 slave server 及資料庫有關的一些設定 (optional)
當我們執行了 ypinit -m 之後,所有的主機上面的帳號相關檔案會被轉成資料庫檔案,
這些資料庫會被放置到 /var/yp/"nisdomainname" 當中,我們的 nisdomainname 是 vbirdnis ,
所以被建立的資料庫通通被放置到 /var/yp/vbirdnis/ 目錄中囉!您可以自行去檢查看看。
事實上,我們的 ypinit 其實是透過 /var/yp/Makefile 來進行資料庫的建立的呢!
所以,我們當然也就可以藉由該檔案內的功能來處理某些特定檔案的更新囉!
舉例來說,若妳僅修改了一個使用者的帳號參數而已,所以僅有 /etc/passwd 有被變更過,
那麼如何僅針對這個檔案進行資料庫的更新呢?你可以這樣做:
[root@linux ~]# cd /var/yp
[root@linux yp]# make passwd
Updating passwd.byname...
Updating passwd.byuid...
|
這樣做就能夠更新了,只不過更新後的資料庫會被放置到 /var/yp 當中,而不是 /var/yp/vbirdnis 當中,
或許妳還得需要手動移動一下該檔案就是了。
再者,如果你有 slave 伺服器的話,總是需要進行 master/slave 的同步化吧?
那如何告知我們的 master 伺服器將資料庫提供給 slave 呢?這個時候就得要修改 /var/yp/Makefile 囉!
您可以自行進入該檔案內查閱一些資料,不過,基本上你只要改一個地方就好了:
[root@linux ~]# vi /var/yp/Makefile
# 找到底下這一行:
NOPUSH=true
# 將他改成這樣:
NOPUSH=false
|
這個設定值可以將資料庫給他『推 (push)』到其他的 slave 伺服器上頭!接下來,你必需要告知 master
要推出去的資料庫是給哪部伺服器?所以,你還得要修改這裡:
[root@linux ~]# vi /var/yp/ypservers
master.vbirdnis
slave.vbirdnis
# 增加上頭這一行!
|
你可以將所有的 slave 伺服器都加到 /var/yp/ypservers 檔案當中,只要記得該伺服器的 IP
必需要在 /etc/hosts 內可以找到對應才行喔!如果你要提供 master/slave 伺服器的資料庫檔案傳輸時,
那麼還需要啟動 ypxfrd 這個服務才行!這個服務可以讓 slave 伺服器主動連結上 ypxfrd 來更新資料庫,
可以免除系統管理原自己手動更新啦!啟動方式太簡單了吧!
[root@linux ~]# /etc/init.d/ypxfrd start
|
做到這裡就 OK 啦!您的 NIS Master 伺服器已經搞定囉!接下來,您就可以準備處理 slave 伺服器,或是直接處理
NIS client 端囉!此外,如果您的 master 機器想要直接將某些特定的資料庫直接傳給 slave 主機的話,
那麼可以使用 yppush 這個指令喔!例如下列範例:
[root@linux ~]# yppush -h slave.vbirdnis passwd.*
|
如果 master/slave 的資料庫不符合的話,那麼該 passwd.byname 及 passwd.byuid 就會同步更新了!
很簡單吧! ^_^!也就是說,您得先要製作資料庫,然後再利用 yppush 來處理資料庫的同步啊!
亦即是:
- 先以 useradd username 或 passwd username 等製作出 master 上面的實體用戶;
- 再以 make 或者直接以 /usr/lib/yp/ypinit -m 來製作出最新的資料庫;
- 利用 yppush 這個指令功能來進行資料庫的傳輸。
如此一來,您就不需要進行 slave 上面的其他資料庫處理啦!方便又簡單!
參考
圖一的 NIS 運作流程當中,我們知道由於
NIS 伺服器預設還是會先搜尋自己的 /etc/passwd, /etc/shadow 等資訊,因此你最好先將 NIS
slave 的帳號與密碼資料作個簡單的修訂,讓他保留在比較乾淨的帳號資料,例如僅有系統帳號 (UID 小於 500
內的系統帳號) 就是一個不錯的環境。這樣可以避免 UID 重複出現的問題 (在 /etc/passwd 及 NIS
的環境中都出現相同的 UID ,但其相關參數卻並相同時,可能有困擾)。
NIS slave 的設定要比 NIS master 簡單多了,事實上,很多設定都一樣!你甚至可以複製 NIS master
的很多設定檔哩!在你處理完 NIS slave 伺服器的帳號密碼相關檔案後,接下來你可以這樣設定喔:
設定網域
同樣的, NIS slave 也需要設定相同的網域,設定方式可以參考前一小節的介紹,我們這裡很快的介紹一遍:
1. 直接建立領域名稱
[root@linux ~]# nisdomainname vbirdnis
2. 開機立即啟動此一領域名稱
[root@linux ~]# vi /etc/rc.d/rc.local
# 加入底下這一行:
/bin/nisdomainname vbirdnis
3. 預設在啟動 ypserv 時,設定 NIS 領域名
[root@linux ~]# vi /etc/sysconfig/network
# 加入底下這一行:
NISDOMAIN=vbirdnis
|
主要設定檔 /etc/ypserv.conf
這個設定檔也是很簡單的啦!可以與前面的 NIS master 相同即可。在鳥哥的這個例子當中,
我是直接在該檔案加入這三行而已喔!
[root@linux ~]# vi /etc/ypserv.conf
127.0.0.0/255.255.255.0 : * : * : none
192.168.1.0/255.255.255.0 : * : * : none
* : * : * : deny
|
/etc/hosts 及 /etc/netgroup
這兩個檔案不陌生吧?直接設定他吧!
[root@linux ~]# touch /etc/netgroup
[root@linux ~]# vi /etc/hosts
192.168.1.2 master.vbirdnis
192.168.1.10 slave.vbirdnis
192.168.1.100 client.vbirdnis
|
啟動所有服務及建立資料庫
還記得吧?我們需要 portmap 與 ypserv 喔!至於 yppasswdd 這個功能主要是在修改主控伺服器 (master)
上面的帳號密碼,而 slave 只是在取得 master 的資料庫而已,本身並不具備修改資料庫的能力的,
所以 slave 當然就不需要這個東西啦!所以你可以這樣設定:
[root@linux ~]# /etc/init.d/portmap start
[root@linux ~]# /etc/init.d/ypserv start
|
那如何取得來自 master 伺服器的資料庫檔案呢?還是一樣得要透過 /usr/lib/yp/ypinit 這支程式啦!
只是他的指令下達會變成這樣喔:
[root@linux ~]# /usr/lib/yp/ypinit -s master.vbirdnis
參數:
-s :後面接預計取得的 master 主機名稱!
We will need a few minutes to copy the data from master.vbirdnis.
Transferring hosts.byname...
Trying ypxfrd ... not running
Transferring services.byname...
Trying ypxfrd ... not running
....中間省略....
|
雖然使用上頭的指令事實上會出現有錯誤的資訊,就是那個『Trying ypxfrd ... not running』的資訊,
但事實上資料庫的轉移還是成功的!不相信的話,你可以使用底下這個指令來測試一下資料庫是否正確:
[root@linux ~]# ypcat -h localhost passwd.byname
|
如果有正確的輸出帳號/密碼資料的話,呵呵!那就是 OK 的啦!如此一來,您的 NIS slave 就啟動 OK 啦!
不過,由於您的 master 伺服器可能隨時都會有帳號/密碼的改變,所以你其實是可以使用 ypxfrd
這個服務來幫助資料庫在 master/slave 間轉移的!如果你有在 master 伺服器啟動 ypxfrd 的話,
那麼你可以在 slave 的工作排程上這樣處理的:
[root@linux ~]# vi /etc/crontab
# 在最後加入以 ypxfr 傳輸資料的 script 喔!
20 * * * * root /usr/lib/yp/ypxfr_1perhour
40 6 * * * root /usr/lib/yp/ypxfr_2perday
55 6,18 * * * root /usr/lib/yp/ypxfr_2perday
# 事實上,這三支程式只是利用 /usr/lib/yp/ypxfr 來進行資料庫的更新,
# 不過鳥哥實際進行時,似乎有點小問題,或許需要修改一下上述三個檔案,
# 我們以 /usr/lib/yp/ypxfr_1perhour 為例來說明好了:
[root@linux ~]# vi /usr/lib/yp/ypxfr_1perhour
# 找到這一行:
$YPBINDIR/ypxfr $map
# 將他改成這樣:
$YPBINDIR/ypxfr $map -h master.vbirdnis
|
事實上,如果 master 伺服器有啟動 ypxfrd 的話,那麼下達 ypinit -s master.vbirdnis 時,
就不會有錯誤訊息囉! ^_^
如此一來,系統將會針對不同的資料庫來與 master 伺服器進行比對,若發現 master
的資料較新時,則會進行更新!很方便吧!當然啦,您也可以直接透過系統管理員執行
ypinit -s master.vbirdnis 來處理就是了。此外,直接利用 master 機器上的 yppush
也是個不錯的思考方向!
啟動 ypbind ,讓 slave 也可以查詢帳號/密碼
如果你的 slave 並沒有啟動 ypbind 的話,那麼 slave 將無法以 master 所提供的帳號來登入的!
所以接下來,
妳必須要啟動 ypbind
這個查詢的功能,好讓我們的 slave 伺服器也可以針對我們自己的 NIS 網域 (vbirdnis) 進行查詢。
至於
ypbind 的啟動方式則請參考下一小節的
NIS client 設定方式吧!
至此為止,你就已經具有一部 NIS master 及多部 NIS slave 的伺服器囉!接下來就來玩玩 NIS client 吧!