伺服器架設篇 - RedHat 9

第二十六章、簡易 NIS Server 架設

Network Information Service, NIS 伺服器

最近更新時間: 2003/09/16

本文資料主要針對 RedHat 9 的系統進行說明,要注意的是,RedHat 9 與 Red Hat Enterprise Linux (RHEL) 是完全不同的東西!RedHat 9 在 2003 年推出,在 2004 年就不再維護了!這部份網站更新到 2005 年,也沒有再維護過! 因此,建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 RedHat 9 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
有沒有想過,如果我有十部 Linux 主機,這十部主機僅負責不同的功能,事實上,所有的主機帳號與對應的密碼都相同!那麼我是將帳號與密碼分別設定置在十部電腦上面,還是可以透過一部主機做為帳號管理的功能,然後其他的主機只要當用戶用登入時,就必須要到管理帳號的主機上面確認其帳號與密碼呢?哪一個比較方便而且靈活?當然是找一個帳號管理的主機比較方便的多啦!如果有使用者要修改密碼,不必要去到十部主機修改密碼啦!只要到主要管理主機去修改,其他的主機根本就不需要更動!哈哈!輕鬆又愉快呢!這個功能的達成有很多的方式,在這裡,我們介紹一個很簡單的方式,那就是 Network Information Service 這個 NIS 伺服器的架設啦!

原理:

    在一個大型的網域當中,如果有多部 Linux 主機時,萬一要每部主機都設定相同的帳號與密碼的設定,還真是囉唆。所以,適時的使用一部主要主機 ( master server ) 管理網域中的所有帳號,其他的主機則使用這部主要主機提供的帳號與密碼來達成讓使用者『登入』的作用即可!這樣的功能有很多的伺服器軟體可以達成,這裡我們要介紹的則是 Network Information Services, NIS server 這個伺服器軟體喔!
     

    什麼是 NIS 與 NIS 的主要功能:
     
    通常我們都會建議,一部 Linux 主機的功能越簡單越好,也就是說,一部 Linux 就專門進行一項服務,這樣有許多的好處,這包含功能簡單所以系統資源得以完整運用,並且在發生入侵或者是系統產生狀況的時候,也比較容易追查問題所在。因此,一個公司內部常常會有好幾部 Linux 主機,有的專門負責 WWW 、有的專門負責 Mail 、有的專門負責 SAMBA 等等的服務。不過,這樣雖然有分散風險、容易追蹤問題的好處,不過,由於主機數量多了,然而因為是同一個公司裡面,所以,事實上所有的 Linux 主機的帳號與密碼都是一樣的!哇!如果公司裡面有 100 的人的話,那麼我們就需要針對這麼多部的主機去設定帳號密碼了!而且,如果未來還有新進員工的話,呵呵!那麼光是設定密碼就會使系統管理員抓狂了!
     
    這個時候,如果我們換一個角度來思考:如果我設計了一部專門管理帳號與密碼的主機,而其他的 Linux 主機當有用戶端要登入的時候,就必須要到這部管理密碼的主機來查尋使用者的帳號與密碼,如此一來,哈哈!我要管理所有的 Linux 主機的帳號與密碼,只要到那部主要主機上面去進行設定即可!包括新進人員的設定,反正其他的 Linux 主機都是向他查尋的嘛!沒錯!真是好~這個就是 Network Information Service, NIS 主機的主要功能啦!
     
    事實上, Network Information Service 最早應該是稱為 Sun Yellow Pages ( 簡稱 yp ),也就是 Sun 這家公司出的一個名為 Yellow Pages 的伺服器軟體,請注意, NIS 與 YP 是一模一樣的咚咚喔!這個 Yellow Pages 名字取的真是好!怎麼說呢?知道黃頁( Yellow Pages )是什麼嗎?沒錯!就是我們家裡的電話簿啦!今天如果你要查尋一家廠商的電話號碼,通常就是直接去查黃頁上面的紀錄來取得電話號碼啊!而這個 NIS 也一樣,當使用者要登入時, Linux 系統就會到 NIS 主機上面去找尋這個使用的帳號與密碼資訊來加以比對,以提供使用者登入之用的檢驗啊!很棒吧! ^_^
     
    那麼 NIS 主機提供了哪些資訊呢?還記得帳號與密碼放置在哪裡吧?!那麼 NIS 就是提供那些資料啦!有底下這些基本的資料提供給 Client 端喔:
     
    • 登入帳號/密碼/家目錄:就是 /etc/passwd 這個檔案
    • 群組資訊:就是 /etc/group 這個檔案
    • 相關主機名稱與IP:就是 /etc/hosts 這個檔案。
     

    NIS 的運作流程
     
    事實上, NIS 的運作流程一點也不困難。如果在一個不是很大的網域當中,那麼大約會有一部 NIS Server ,並且同時有很多部的 NIS Client 才對!這裡我們不談 NIS Server 的 Primary 與 Slave 架構,僅談 NIS Server 與 NIS Client 的架構,整體架構有點像底下的圖示:
     
     
    就如同上面圖示的模樣。我們已經曉得 NIS 提供的其實就是 /etc/passwd, /etc/group 以及 /etc/hosts 等 ASCII 格式檔案的資訊,而 NIS Server 會將前述幾個 ASCII 檔案內容複製成為 DBM 資料庫格式的檔案,當用戶藉由個人電腦連線到 NIS Client 主機嘗試登入時, NIS Client 將會到 NIS Server 去查尋該用戶的帳號與密碼,以做為用戶登入驗證的依據。
     
    • NIS Server 將自己系統內的 /etc/passwd, /etc/group, /etc/hosts 等製作成為 DBM 的資料庫格式檔案;
    • NIS Client 若有用戶登入的要求時,會前往 NIS Server 搜尋資料庫裡面的資料做為驗證之用。
    • 每次更動 NIS Server 上面的用戶資料時,則 NIS Server 需要重新製作 DBM 資料庫檔案才行!
     
    這樣可以瞭解嗎?!很簡單的啦!不過,需要特別留意的是,我們需要設定的有:
     
    • NIS Server 端;
    • NIS Client 端。
     
    設定方面需要兩者的設定喔!
     

    NIS 與 RPC 的關係
     
    還記得另一個 Sun 公司開發的伺服器軟體 NFS 嗎?他是由 RPC (Remote Procedure Call) 所統一管理的。呵呵!我們這個 NIS 也是使用 RPC 來管理的喔!所以囉!您最好回到前面 NFS 的章節去瞧一瞧 RPC 的一些相關說明比較好喔!那個 RPC 就是我們常常見到的 Portmapper 啦!也就是 sunrpc ( port 111 ) 囉!在 NIS 裡面,我們不但需要啟動 portmap ,還需要啟動另一個玩意兒,那就是由 super daemon 管理的 time 與 time-udp 這兩個寶貝蛋了!嗯!底下我們將會來探討一下各個套件囉!
     

    NIS Server 的 master 與 slave 架構
     
    剛剛我們僅提到只有一部 NIS Server 在整個網域之中,這是一般比較小型的網域常見的方法。萬一,如果我們的網域裡面有幾乎 100 部以上的主機呢?而且每一部的流量還真的很大的時候,這個時候,只有一部 NIS Server 可能無法提供快速的資料查尋與回應的狀態!這個時候就需要 NIS Sever 的 master 與 slave 的架構了。
     
    還記得在 DNS 主機架設當中,我們曾經提過關於 master 與 slave 的關係吧?!就是 slave 主要是藉由將來自 master 主機的資料加以更新到自己的資料庫當中,並且提供與 master 相同的查尋功能!這個 NIS 的 master 與 slave 架構則完全相同!
     
    • NIS Server 的 master 先將自己的帳號、密碼相關檔案製作成為資料庫檔案(database file);
    • NIS Server 的 master 將自己的資料庫檔案傳送到 slave 上面;
    • NIS Server 的 slave 接收來自『信任的 NIS Server master 主機』的資料後,更新自己的資料庫,使自己的資料庫與 master 主機的資料同步;
    • 網域當中的所有 NIS Client 查尋 NIS Server 時,會找尋『最先回應的那一部 NIS 主機的資料庫內容』。
     
    所以,我們可以知道的是,NIS 的 master 與 slave 架構主要在分散查尋 NIS 時候的主機負荷,因此,除非您的網域真的很大,否則是沒有必要架設 NIS Slave 與 master 的架構的啦!底下我們沒有架設 master 與 slave 喔!只有一部主要的 master 而已啦!

套件安裝

    基本上, NIS 建議直接使用原版光碟上面給我們的 RPM 來安裝即可!但是需要安裝哪些套件呢?您至少需要底下幾個套件才行:
     
    • yp-tools :提供 NIS 相關的查尋指令功能
    • ypbind   :提供 NIS Client 端的設定套件
    • ypserv   :提供 NIS Server 端的設定套件
    • portmap  :就是 RPC 一定需要的資料啊!
     
    我是在 Red Hat 系統上面使用的設定,所以檔名是這樣的一個模樣,你可以使用『 rpm -qa | grep yp 』來檢查一下是否真的有安裝這些個套件才行!不過,為什麼 NIS Server 的套件名稱會是 yp 呢?還記得我們在上面提到的資訊嗎? NIS 最早的名稱是 Sun Yellow Pages ,所以囉,套件名稱才會是 yp 啊! ^_^!這樣好記多了吧!閒話不多說,馬上來進行設定吧!

Server 端設定:

    終於來到了設定的地方了, NIS 的設定與 NFS 的設定有點小小的相同之處,就是他的設定『粉簡單!』的啦!架設他吧!
     

    NIS Server 的結構
     
    NIS Server 主要以 ypserv 這個套件提供的資料來進行設定的,他主要的內容有:
     
    • /etc/ypserv.conf       :就是主要的設定檔了
    • /usr/sbin/ypserv       :主要的服務(daemon)執行檔
    • /usr/sbin/rpc.yppasswdd:RPC 的服務囉!
    • /usr/sbin/rpc.ypxfrd   :同樣的, RPC 的服務囉!
    • /usr/lib/yp/ypinit     :建立 NIS 資料庫的執行程式
     
    所以,事實上我們最重要的就是設定 ypserv.conf 這個檔案而已啦!至於 RPC 的設定,就直接啟動他即可!另外,還有 yp-tools 會提供的相關資料喔:
     
    • /usr/bin/yppasswd :更改你在 NIS database (NIS Server 所製作的資料庫) 的密碼
    • /usr/bin/ypchsh   :同上,但是是更改 shell
    • /usr/bin/ypchfn   :同上,但是是更改一些使用者的訊息!
     

    NIS Server 設定流程
     
    開始設定吧!在我的系統當中,假定我的網路狀況如下:
     
    • 網域為 192.168.10.0/24
    • NIS Server 的 IP 為 192.168.10.30,對應的主機名稱為 server.cluster
    • NIS 的領域名稱設定為 cluster
     
    在 NIS Server 端以 root 身份登入後,進行下面的工作:
     
    1. 啟動 portmap 並設定開機時啟動:

    2. 這個應該不難吧!使用:
      [root@test root]# /etc/rc.d/init.d/portmap start
      [root@test root]# netstat -tl
      Active Internet connections (only servers)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      tcp        0      0 *:sunrpc                *:*                     LISTEN
      # 如果看到 sunrpc 的話,就表示啟動成功了!
      [root@test root]# chkconfig --level 35 portmap on
      # 上面這一行在設定 portmap 在 run-level 為 3, 5 的時候就開機時啟動!
      很簡單吧!這樣 portmap 就啟動了!
       
    3. 啟動 time 與 time-udp :

    4. 由於 time 與 time-upd 是在 NIS 運作時所需要的 daemon ,所以也必須要啟動他啦!啟動的方式也很簡單,就是利用 xinet 這個 super daemon 來進行即可!
      [root@test root]# vi /etc/xinetd.d/time
      # 找到底下這一行:
      disable = yes
      # 將他改成 
      disable = no
      # 儲存後離開
      [root@test root]# vi /etc/xinetd.d/time-udp
      # 同樣的將 disable = yes 改成 disable = no 即可!
       
      [root@test root]# /etc/rc.d/init.d/xinetd restart
      [root@test root]# netstat -utl
      Active Internet connections (only servers)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      tcp        0      0 *:time                  *:*                     LISTEN
      tcp        0      0 *:sunrpc                *:*                     LISTEN
      udp        0      0 *:time                  *:*
      udp        0      0 *:sunrpc                *:*
      注意喔!目前至少也要有上面四個 LISTEN 的 port 才行喔!分別是 UDP 與 TCP 封包的啦!
       
    5. 建立 NIS 的領域名稱 ( nisdomainname )

    6. 在 NIS 的系統當中,他的領域名稱 (domain name) 是與 DNS 沒有絕對關係的,由於這個領域名稱會常被使用到,因此我們需要將他建立起來!建立起來的方法很簡單,直接執行一個指令,並修改一個檔案即可!
      1. 建立 NIS 的領域名稱 (我這裡是設定為 cluster ):
      [root@test root]# nisdomainname cluster
      [root@test root]# vi /etc/rc.d/rc.local
      # 將底下這一行加入這個檔案的最後一行內:
       /bin/nisdomainname cluster
       
      2. 設定好網路參數:
      [root@test root]# vi /etc/sysconfig/network
      # 加入底下這一行:
      NISDOMAIN=cluster
       
    7. 設定 ypserv 的設定檔: ypserv.conf

    8. 這個設定檔的內容其實也是很簡單,大概只有幾行而已,設定的主要語法為:
      <設定項目>:<設定項目的值>
      我們先談一談他裡面的幾個設定細項:
      [root@test root]# vi /etc/ypserv.conf
      files: 30
      # 這說的是『有多少資料庫檔案(database file)會被先讀進快取記憶體當中』
      # 的意思,一般來說, 30 是已經很足夠的數值了,不需要更動他;
       
      trusted_master: your.master.servers.name
      xfr_check_port: yes
      # 上面這兩個都僅與 Master + Slave 架構有關的設定值,一般來說,
      # 只有一部主要 NIS Server 的系統中是用不到這兩個設定值的!
      # 如果你的 NIS 是 slave 的架構,那麼需要指定一部 master 做為資料庫內容的
      # 同步時候的主機,那就是 trusted_master 的設定內容囉!
      # 如果沒有 master/slave 架構時,那就不需要 trusted_master 這個設定了!
      # 至於 xfr_check_port 則是指定 master 與 slave 是否都要以 < 1024 
      # 以下的 port 來進行溝通的訊息!通常預設就是 yes ,不需要更動他!
       
      # <主機名稱/IP>:<網域名稱>:<資料庫類別>:<安全性>
      # 這個是這個檔案裡面最重要的部分了!主要在設定安全性的方面,
      # 可以設定多行,而是否能夠通過的規則是『一行一行檢查』的方式!
      # 所以這裡的設定應該是:先開放要開放的網域,然後全部都關閉!
      # 先談一談各個相關的項目:
      # 1. 主機名稱/IP:這裡可以這樣設定:192.168.1.0/255.255.255.0
      # 2. 網域名稱:通常都設定成為 * 即可!
      # 3. 資料庫類別:可以使用 * 來表示所有的資料庫!
      # 4. 安全性:主要有三種參數:
      #      none :無論如何就是可以無條件進入本機;
      #      port :僅允許 < 1024 以下的 port 進入;
      #      deny :無論如何就是關閉不讓人家登入主機!
      # 由於我是允許 127.0.0.0/255.0.0.0 以及 192.168.10.0/255.255.255.0 進入,
      # 其他的都關閉!所以我可以這樣設定:
      127.0.0.0/255.255.255.0   :  *  :  *  :  none
      192.168.10.0/255.255.255.0:  *  :  *  :  none
      *                         :  *  :  *  :  deny
      # 但是因為 /etc/shadow 裡面的檔案總不好讓人看到吧!而又由於 Linux 
      # 系統當中,只有 root 可以啟用 < 1024 以下的 port ,因此,更安全的設定,
      可以這樣做:
      127.0.0.0/255.255.255.0   :  *  :  *  :  port
      192.168.10.0/255.255.255.0:  *  :  *  :  port
      *                         :  *  :  *  :  deny
      # 三行也就夠了!
      # 無論如何,如果您想要讓您的 NIS Server 運作的較為快速,並且安全性上面
      # 沒有太多的考量(內部網域時!),那麼使用 none 是一個不錯的主意!
       
    9. 建立網路信任群組:

    10. 這個 /etc/netgroup 檔案可以記錄在我們網域裡面被信任的群,這個檔案的內容當中,每一行都有三個欄位,分別以逗號『,』隔開,意義為:
      <host>,<user>,<domain>
      主機,使用者帳號,領域名稱
      事實上,如果這個檔案是『空的』的話,那麼代表著『全部的主機、帳號與領域名稱都接受』的意思,因為我們已經在 /etc/ypserv.conf 裡頭設定好了關於安全的項目了,所以這個檔案只要建立即可(本來是不存在的!):
      [root@test root]# touch /etc/netgroup
       
    11. 啟動 ypserv 這個 daemon ,並且設定開機時啟動:

    12. 好了!都設定完成之後,在接下來自然就是要啟動了!啟動有兩個 daemons ,啟動的方式為:
      1. 啟動囉!
      [root@test root]# /etc/rc.d/init.d/ypserv    start
      [root@test root]# /etc/rc.d/init.d/yppasswdd start
       
      2. 觀察一下是否真的有動作?
      [root@test root]# rpcinfo -u localhost ypserv
      program 100004 version 1 ready and waiting
      program 100004 version 2 ready and waiting
      [root @test root]# rpcinfo -u localhost yppasswdd
      program 100009 version 1 ready and waiting
      # 這個 rpcinfo 就是在觀察與 RPC Server 有關的 program 目前的狀況!
      # 因此可以用他來觀察你的 ypserv 喔!
       
      3. 設定開機時啟動:
      # 你可以使用 ntsysv ,這裡我們使用 chkconfig 囉!
      [root@test root]# chkconfig --level 35 ypserv on
      [root@test root]# chkconfig --level 35 yppasswdd on
       
    13. 製作資料庫、並重新啟動 ypserv 與 yppasswd :

    14. 好了,既然 NIS Server 主要是要提供資料庫給大家參考用的,所以當然要製作資料庫囉!然後,我們又將這些資料庫讀入快取當中,所以資料庫製作完畢之後,一定要重新啟動 ypserv 與 yppasswdd 才行
      1. 製作資料庫:
      [root@test root]# /usr/lib/yp/ypinit -m
      At this point, we have to construct a list of the hosts which will run NIS
      servers.  server.cluster 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:  server.cluster
              next host to add: <==在這裡按下[ctrl + d]跳出
      The current list of NIS servers looks like this:

      server.cluster

      Is this correct?  [y/n: y]  y
      We need a few minutes to build the databases...
      Building /var/yp/cluster/ypservers...
      Running /var/yp/Makefile...
      gmake[1]: Entering directory `/var/yp/cluster'
      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 services.byservicename...
      Updating netid.byname...
      Updating protocols.bynumber...
      Updating protocols.byname...
      Updating mail.aliases...
      gmake[1]: Leaving directory `/var/yp/cluster'
      server.cluster has been set up as a NIS master server.
      Now you can run ypinit -s server.cluster on all slave server.

      # 這個動作是每次修改使用者資料後一定要做的動作!,就是重新製作資料庫,
      # 然後並且需要重新啟動 ypserv 與 yppasswdd 喔!
       
      2. 重新啟動服務:
      [root@test root]# /etc/rc.d/init.d/ypserv    restart
      [root@test root]# /etc/rc.d/init.d/yppasswdd restart

      這個動作的重點是在 /var/yp 這個目錄當中,製作了多個的等待 NIS Clients 查尋的資料庫!請注意的是,每次在 NIS server 上面更動使用者的資料時,一定需要重新做這個步驟喔!
       
    這樣 Server 的部分就設定妥當了!如果您還想要玩一玩 master 與 slave 的架構的話,那就請參考:
    NIS HOW-TO:http://www.linux-nis.org/nis-howto/HOWTO/index.html

Client 端設定

    設定完了 Sever 之後, NIS Client 也需要設定喔!( 註:在 NIS clients 主機記錄的登入者的資訊中,僅記錄 UID 大於 500 以上的使用者喔!因為小於 500 以下的 UID 都是預設給系統使用的,因此是預設不開放給 NIS 來查尋,自然也就不會被寫入 NIS 資料庫檔案當中了! )
     

    NIS Client 的結構
     
    還記得上面提過的,NIS Client 需要的套件是:
     
    • ypbind
    • yp-tools
     
    至少也要這兩個套件才可以喔!至於相關的設定檔為:
     
    • /etc/yp.conf :設定 NIS Server 的主機名稱與領域名稱
    • /etc/hosts :至少需要設定 NIS server 主機 IP 對應的主機名稱喔!
    • /etc/passwd :指定需要查尋的是什麼;
    • /etc/nsswitch.conf :指定要使用什麼 daemon 查尋帳號與密碼。
     
    大致上就是如此啦!我們要設定的資訊也就是如同上面的檔案囉!好!設定吧!
     

    NIS Client 的設定流程
     
    請留意的是,底下的設定都是在 Client 端喔!不要在主機端作這些設定了!^_^
     
    1. 啟動 portmap 並設定開機時啟動:

    2. 不論是 RPC Server 還是 RPC Client ,反正只要是 RPC 的相關服務要應用,就一定要有 portmap 的輔助才行!所以,啟動並設定開機時啟動吧!
      [root@client root]# /etc/rc.d/init.d/portmap start
      [root@client root]# netstat -tl
      Active Internet connections (only servers)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      tcp        0      0 *:sunrpc                *:*                     LISTEN
      如果看到 sunrpc 的話,就表示啟動成功了!
      [root@test root]# chkconfig --level 35 portmap on
      上面這一行在設定 portmap 在 run-level 為 3, 5 的時候就開機時啟動!
      很簡單吧!這樣 portmap 就啟動了!
       
    3. 設定 NIS Server 的 IP 對應主機名稱:

    4. 請看上面 Server 設定之前的假設,我的 NIS Server 的 IP 與主機名稱記錄在 Client 端的 /etc/hosts 上面:
      [root@client root]# vi /etc/hosts
      # 要有底下這一行喔!
      192.168.10.30 server.cluster
       
    5. 設定 NIS 的 domain 與 NIS 的主機:

    6. NIS Server 與 Client 的 NIS domain 一定要相同,所以我們必須要花一點時間來將這個咚咚搞定:
      1. 建立 NIS domain name:
      [root@client root]# nisdomainname cluster
      [root@client root]# vi /etc/rc.d/rc.local
      # 加入底下這一行:
      /bin/nisdomainname cluster
      [root@client root]# vi /etc/sysconfig/network
      # 加入底下這一行:
      NISDOMAIN=cluster
       
      2. 建立 NIS 查尋的主機名稱
      [root@client root]# vi /etc/yp.conf
      # 加入這兩行:
      domain cluster
      ypserver server.cluster
      # 還是要記得,那個 cluster 是你的 NIS 的 domain ,至於 server.cluster 
      # 則是 NIS Server 的主機名稱,我這裡是使用內部私有 IP ,所以名稱可以隨便
      # 我喜歡來選擇的喔!
       
    7. 修改密碼驗證的方式:

    8. 密碼驗證的方式是一定要修改的,不然你的系統怎麼知道要去哪裡使用什麼方式查尋帳號、密碼資料呢?!所以您至少需要更改兩個檔案喔!
      1. 密碼檔的修改:
      [root@client root]# vi /etc/passwd
      # 還記得這個檔案嗎?這個檔案總共有七個欄位,而每個欄位都以分號『:』隔開,
      # 相關的資訊請參考基礎學習篇裡面的帳號管理章節。由於我們要將資料
      # 設定以 NIS Server 的資料庫來驗證,因此,
      # 在這個檔案的最後面加入這一行:
      +::::::
      # 注意喔!在 + 之後連續加六個『 : 』,並且中間沒有空白字元!
       
      2. 查尋密碼的程序:
      # 因為我們有很多方式來查尋密碼,需要修改 /etc/nsswitch.conf 這個檔案才行
      [root@client root]# vi /etc/nsswitch.conf
      # 找到相關的參數,並改成底下這樣:
      passwd:     files nis nisplus
      shadow:     files nis nisplus
      group:      files nis nisplus
      hosts:      files nis dns
      # 這個檔案在設定一些資訊的查尋程序!那個 files 指的是本機的相關檔案,
      # 至於 nis 則是透過 NIS 來進行查尋,至於 nisplus 則是 NIS+ 這是比較新
      # 版的 NIS 啦!不過,官方網站上面說,目前這個發展的計畫已經暫停了!
      # 1. passwd: 就是使用者相關資訊查尋,分別為 /etc/passwd, nis 與 nisplus
      # 2. shadow: 就是使用者密碼的查尋, /etc/shadow, nis 及 nisplus
      # 3. group:  就是使用者的群組資訊查尋, /etc/group, nis 及 nisplus
      # 4. hosts:  就是主機名稱與IP對應的查尋,/etc/hosts, nis 及 /etc/resolv.conf
       
    9. 啟動 ypbind 與設定開機啟動:

    10. 這樣幾乎就設定完成了!而我們前面說過, NIS Client 也需要啟動 ypbind 這個 daemon 的,所以就給他啟動吧!
      1. 直接手動啟動 ypbind 吧:
      [root@client root]# /etc/rc.d/init.d/ypbind start
      [root@client root]# rpcinfo -p localhost
         program vers proto   port
          100000    2   tcp    111  portmapper
          100000    2   udp    111  portmapper
          100007    2   udp    735  ypbind
          100007    1   udp    735  ypbind
          100007    2   tcp    738  ypbind
          100007    1   tcp    738  ypbind
      # 至少要有上面幾個資訊才是對的喔!不過,需要記得的是,那個 port number
      # 是系統隨機啟動的,所以 port number 每次都會不太一樣啊!
      # 記得要經常用 rpcinfo 去檢查一下 RPC Server 相關的服務才行!
       
      2. 設定開機時啟動:
      [root@client root]# chkconfig --level 35 ypbind on
       
    基本上,上面的動作就已經設定好了一部 NIS Client 主機了!而且已經可以跑囉!不過,我們畢竟不知道到底目前我們的 NIS Client 主機使用的 NIS Server 主機裡面的哪些資料,並且如何去確認我們的資料庫與設定值都沒有問題呢?!呵呵!所以底下我們就來談一談那個 yp-tools 提供的相關好用的工具程式來檢驗囉!
     

    NIC Client 端檢驗 NIS 設定:yptest, ypwhich, ypcat
     
    設定好了 NIS Client 之後,先以 netstat 與 rpcinfo 檢驗一下是否成功的啟動之後,接下來就是要測試到底我們的 NIS Client 與 NIS Server 之間溝通的情況如何了!此時就需要使用到 NIS 提供的 yp-tools 這個套件,裡面的幾個小小的執行程式來動作了:
     
    • yptest :主要在測試 yp 的設定內容、資料庫內容等等所有 NIS 相關的資料測試;
    • ypwhich:主要在測試 NIS Client 與 Server 之間溝通的資料庫 (database) 到底是哪幾個檔案;
    • ypcat  :主要在取得 NIS Server 上面的使用者密碼資訊!
     
    分別談一談每個程式的用途與說明吧!
     

      yptest
      [root@client root]# yptest
      Test 1: domainname
      Configured domainname is "cluster"

      Test 2: ypbind
      Used NIS server: server.cluster
      ....
      ....
      Test 8: yp_maplist
      rpc.bynumber
      rpc.byname
      hosts.byaddr
      hosts.byname
      group.byname
      passwd.byname
      ypservers
      passwd.byuid

      Test 9: yp_all
      test test:dkoUW2XHV30sEV5gLM4NapyuhBcpVs.:500:500::/home/test:/bin/bash

      看到了嗎?會有很多的資料一項一項的去測試,測試的結果都會顯示在螢幕上面,最好都沒有問題之後再開始 NIS Client 的服務吧! ^_^
       

      ypwhich
      [root@client root]# ypwhich
      server.cluster
      [root@clent root]# ypwhich -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"
      單純使用 ypwhich 的時候顯示的是『NIS Client 的 domain』名稱,而當加入 -x 這個參數時,則是顯示『NIS Client 與 Server 之間溝通的資料庫有哪些?』由上面我們可以很清楚的就看到相關的檔案啦!這些資料庫檔案則是放置在我的 NIS Server 的 /var/yp/cluster/* 裡面囉!
       

      ypcat
      [root@client 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"
      # 主要的功能就是『列出資料庫』囉!與 ypwhich -x 相同功能!
      # 所以我們有 ethers, aliases......passwd 等資料庫名稱與檔名!
       
      [root@client root]# ypcat [資料庫名稱或功能]
      # 這個指令可以用來取得 NIS Server 上面各個資料庫的內容!
      # 舉例來說,我們想要知道 passwd ( 密碼資料 ) 的所有使用者內容,就需要:
      [root@client root]# ypcat passwd  (或 ypcat passwd.byname )
      test:dkoUW2XHV30sEV5gLM4NapyuhBcpVs.:500:500::/home/test:/bin/bash
      # 如果是想要知道 hosts 的內容 (NIS Server 主機上面 /etc/hosts 的內容):
      [root@client root]# ypcat hosts
      127.0.0.1       localhost       localhost.localdomain
      192.168.10.30   server.cluster
      # 反正就是加上資料庫,你就可以取得 NIS server 主機上面的資料庫內容啦!
       
    這三個指令在進行 NIS Client 端的檢驗時,是相當有用的喔!不要忽略了他的存在啊!尤其是剛架設好 NIS Client 時,一定要使用 yptest 去檢查看看有沒有設定錯誤喔!根據螢幕顯示的訊息去一個一個校正錯誤才行啊!
     

    修改使用者密碼 ( 需要有 root 身份 ): yppasswd, ypchfn, ypchsh
     
    好了,既然 NIS Client 已經可以正式的來 run 了,那麼還可能有什麼大問題呢!?最大的問題在於....我能不能在 NIS Client 端修改各個帳號的密碼呢?答案是『能!』但是不怎麼方便~因為,我們要修改的是 NIS Server 端的資料庫喔!也就是說,我們在 NIS Client 端登入之後,要修改自己這個帳號的密碼,其實改到的是 NIS Server 的資料庫密碼啊!而要修改資料庫密碼時,需要使用 root 的身份,所以一定需要 root 的密碼~如此一來,實在是不太方便~如果真的要修改的話,那麼可以使用底下三個小指令來進行修改,不過,不怎麼建議這樣做就是了!
     
    • yppasswd :與 passwd 指令相同功能;
    • ypchfn   :與 chfn 相同功能;
    • ypchsh   :與 chsh 相同功能。
     
    無論如何,我是不太建議大家使用這些指令去修改資料庫的內容啦!比較建議這樣做:
     
    1. 登入到 NIS Server 主機裡面去,進行 useradd 或者是 passwd 修改帳號與密碼等等的更動;
    2. 使用 /usr/lib/yp/ypinit -m 重新製作資料庫檔案!
     
    這樣就 OK 啦!比較簡單啦我想~至於上面三個指令,請使用 Linux 的好朋友 man 來查看一下吧! ^_^

主機進階設定

  • NIS 與 NFS 的結合設定:

  •  
    不曉得您有沒有發現一件事情啊!那就是:我們的 NIS Server 設定的使用者家目錄是在 /home 底下,例如 test 這個人的家目錄在 /home/test (這個目錄在 server.cluster 這部主機上面才有),問題是,當我們登入 NIS Client 主機時,那麼我們取得的家目錄資料還是在 /home/test ,問題是,NIS Client 主機並沒有 /home/test 這個目錄啊:
     
    • test 這個 User 是在 server 上面建立的,所以有 /home/test 這個目錄;
    • 在 NIS Client 上面沒有真正的 test 這個帳號,因為他是由 NIS server 上面取得的,所以自然也就沒有 /home/test 這個目錄在 NIS client 上面。
     
    這樣會造成什麼問題呢?呵呵!就是你的 test 這個使用者,登入 NIS client 的時候,『會找不到自己的家目錄』!啊!真是糟糕~而且,因為我們的 NIS client 可能有很多部,要是每次登入 NIS Clients 主機的時候,所擁有的家目錄都是個別 NIS client 上面的目錄,那麼就沒有達到 NIS 的功能啦!您說是吧!所以,如果你需要『登入的每個 NIS Client 所擁有的家目錄都是相同的!』的一個情況,呵呵!就可以使用 NFS 來加以設定啦!詳細的 NFS 設定我們之前已經提過了,這裡不在贅言,單純談一下簡單的設定技巧:
     
    • 在 NIS Server 上面開放 /home 這個目錄出來;
    • 在 NIS Client 上面, mount NIS 主機的 /home 到自己的 /home 裡面去!
    • 如此一來,不論登入哪一部 NIS Server 或 client ,使用者都是進入到 NIS Server 的 /home 裡面的家目錄囉!
     
    設定的方法也不難,我們就簡單的談一談吧!
     
    1. 設定 NIS Server 主機的 NFS 開放目錄:
    [root@test root]# vi /etc/exports
    /home  192.168.10.0/24(rw,async,no_root_squash)
     
    [root@test root]# exportfs -rv
    exporting 192.168.10.0/24:/home
     
    [root@test root]# /etc/rc.d/init.d/nfs start
    Starting NFS services:                                     [  OK  ]
    Starting NFS quotas:                                       [  OK  ]
    Starting NFS daemon:                                       [  OK  ]
    Starting NFS mountd:                                       [  OK  ]
     
    [root@test root]# chkconfig --level 35 nfs on
     
    2. 設定 NIS Client 的 mount 資料!
    # 先以 root 的身份登入到 NIS Client 主機上面:
    [root@client root]# mount -t nfs 192.168.10.30:/home /home
    # 如果沒有問題了,就將上面這一行加入 /etc/rc.d/rc.local 當中吧!
     
    這樣一來,您的 NIS Clients 就具有和 NIS Server 主機一模一樣的家目錄了!現在您可以立刻登入看看喔!
     
    • 不過,很可惜的是,目前安裝妥當的系統當中, NIS 並沒有辦法讓 SSH 順利的登入的!這牽涉到整個 key pair 的問題,比較麻煩,或許可以藉由 NIS+ (nisplus) 來克服這個問題,網路上目前有相當多的討論在討論這個情況,由於 NIS plus 與 NIS 功能差不多,實在不想再 NIS 上面又架設一部 NIS+,因此目前傾向於不要管 ssh 這種登入的方法,反正做了 NIS 在內部網路當中,最主要的功能其實是在於 R shell 這個比較危險等級的 shell 說!
     

    防火牆的規劃
     
    又來到了防火牆的規劃了!要注意的是,我們的 NIS 與 NFS 都是使用 RPC Server 的,所以囉,都可以直接管制 111 這個 port 即可!能夠直接以 iptables 管理 111 這個 port ,例如僅允許 192.168.10.0/24 這個網域進來的話,可以在你的防火牆規則上面加上:
     
    /sbin/iptables -A -s 192.168.10.0/24 --dport 111 -j ACCEPT
    /sbin/iptables -A --dport 111 -j DROP
     
    此外,你也可以使用 TCP_Wrappers 來掌管喔:
     
    [root @test root]# vi /etc/hosts.allow
    portmap: 192.168.10.0/255.255.255.0

    [root @test root]# vi /etc/hosts.deny
    portmap: ALL

     
    至於其他的管理,嘿嘿!就得靠您自己發揮創意囉! ^_^

重點回顧

  • Network Information Service ( NIS ) 也可以稱為 Sun Yellow Pages (yp) 主要是負責在網域當中幫忙 NIS Client 端查尋帳號與密碼以及其他相關網路參數的服務,只是在 Linux 上面稱為 NIS 而在 Sun Unix 上面稱為 Yellow Pages 而已~
  • 網域當中有很多 linux 主機時,可以讓一台 Linux 主機做為 NIS Server 主機,負責整個網域當中帳號與密碼的資料庫檔案製作;至於其他的 Linux 主機則設定為 NIS client 端,當有用戶要進行登入的行為時, NIS client 會前往 NIS server 搜尋資料庫裡面記錄的內容,以做為用戶登入的驗證資訊。
  • 不論是 NIS 或者是 NFS 都是藉由 RPC Server 所啟用的,因此,都可以使用 rpcinfo 來查尋 NIS 是否已經啟動,以及該 daemon 是否已經向 portmapper ( RPC server ) 註冊了!
  • NIS 使用的套件就是 yp 這個套件,主要分為兩部份, ypserv 用在 NIS Server,至於 ypbind 與 yp-tools 則用在 NIS Client 上面。
  • NIS server 其實就是提供本身的 /etc/passwd, /etc/shadow, /etc/group, /etc/hosts 等帳號密碼資料,以及相關的網路參數等,以提供網域當中 NIS Client 的搜尋之用;
  • 在 NIS Server 的設定當中,最重要的一個步驟就是將帳號、密碼、網路參數等 ASCII 格式檔案轉成資料庫檔案( database file ),以提供 NIS client 的查尋!而啟動 ASCII 轉成 database 的程式可以使用 /usr/lib/yp/ypinit -m 或者到 /var/yp 底下執行 make 均可。
  • NIS client 端的設定當中,最重要的為 /etc/passwd 裡面的設定,需要讓 NIS Server 的資料加在 /etc/passwd 後面;
  • NIS client 端的設定當中,另一個重要的設定檔為 /etc/nsswitch.conf ,裡頭設定了相當多的資料查尋程序。

參考資源


本章習題練習

  • 請簡單說明 NIS server 的功能與工作流程
  • 請簡單說明 NIS Server/client 的架構
  • NIS 啟動之前需要先啟動那個服務,否則就無法啟動成功 ( 提示:RPC Server )
  • 我的 NIS 網域名稱為 bird ,另外,我主機的 IP 與主機名稱為 192.168.5.1/bird.nis.org ,請問要這些資訊需要設定在 NIS Server 的哪些檔案之內?
  • /etc/nsswitch.conf 的功能為何?如果我想要讓密碼查尋先本地的密碼檔,再查尋 NIS ,需要如何設定?
  • NIS Server 將密碼等檔案做成資料庫以提供 NIS client 來查尋,那麼請問使用什麼動作後,可以將密碼檔案轉成 NIS 的資料庫格式檔案?
  • 如果我想要增加網域當中一個新的帳號:newaccount,並且這個 newaccount 可以讓 NIS Client 查尋到他的帳號與密碼,需要進行哪些步驟?
  • 實作範例題:底下是我的網域參數特徵:

  • network/netmask:192.168.1.0/255.255.255.0
    NIS server : 192.168.1.100 (hostname: server.nis.test )
    NIS cient: 192.168.1.200 (hostname: client1.nis.test )
    NIS domain name: nis.test
    利用上面的參數來設定 NIS 架構,請一步一步的寫下你的設定。
  • 承上題:如果我的網域太大了,所以有一部 NIS slave 主機,這部主機的 IP 為 192.168.1.50 ,請問這部主機該如何設定?

  • 前往參考用解答
修改歷史:
2003/05/06:第一次完成日期!
2003/09/16:稍微加入一些資訊與微幅修改版面!
其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計