作者:陳柏菁 E-mail:pachingko@ms96.url.com.tw
第十五章 架 設 NFS 及 NIS Server

索引:
15.1 架設 NFS Server
  15.1.1 NFS 概述
  15.1.2 安裝 NFS 套件及瀏覽套件內容
  15.1.3 設定 NFS --- /etc/exports 的設定格式 /etc/exports 的設定範例exportfs
  15.1.4 Client 掛載 NFS ---
showmountClient 端掛載 NFS使用一般帳號執行掛載 ( sudo )
設定開機時自動掛載
  15.1.5 對分享目錄做進一步的限定
15.2 架設 NIS Server
  15.2.1 NIS 的使用時機
  15.2.2 安裝 NIS Server 套件及瀏覽套件內容
  15.2.3 設定 NIS Server
  15.2.4 設定 NIS Client ---
Client 端測試NIS Client 查詢 NIS Server 相關資訊的指令
  15.2.5 NIS 與 NFS 的整合
  15.2.6 設定 Slave NIS Server


15.1 架設 NFS Server

15.1.1 NFS 概述


 NFS 全名為 Network File System ( 網路檔案系統 ),主要是讓 Unix-Like 主機之間,能透過掛載的方式來存取對方所分享出來的資源,也就是說,NFS Client 是將 NFS Server 所提供的分享目錄掛載至本地端,就好比是在本機操作般一樣。

 Windows 本身是不支援 NFS 檔案系統的,除非您額外的加裝一些軟體,不過這並不是本章所要探討的範圍,因此我們這裡的重心還是擺在 Unix-Like 上頭。

 NFS 早期是由 SUN 這間公司所發展,其主要是使用 RPC ( Remote Procedure Call:遠端程序呼叫 ) 機制來運作。所謂的 RPC,就是讓用戶端電腦上所執行的程式可以呼叫遠端電腦的程式來幫其執行相關服務,然後再將結果傳回給用戶端。

 負責 RPC 服務的一支關鍵 daemon 叫 portmap。當 NFS Server 啟動時需先向 portmap 註冊,接著 portmap 就會動態分配 port number 給那些提供 NFS 服務的相關 daemon,因此當 Client 端在對 NFS Server 提出服務請求時,必須先通過 portmap ( 監聽 111 port ) 這一關,讓 portmap 來將 NFS 服務相關 daemon 的 port 告知,然後 Client 才曉得要跟哪些 port 做溝通,爾後也才能順利與 NFS Server 做通訊。一般有使用到 RPC 機制的伺服器,就可稱之為 RPC Server。

NFS Server 的相關 daemon

  /usr/sbin/rpc.nfsd
    此 daemon 可以用來識別 NFS Client 端的登入身分 ID。
  /usr/sbin/rpc.mountd
    當接收到 Client 端的掛載請求時rpc.mountd 會依據 export list,來檢查此來源端是否允許掛載,及掛載後該使用者的相關權限為何。
 

/usr/sbin/rpc.rquotad

    如果 NFS Server 本身有限定 quota 限額時,才會使用到這個 daemon。另外此程式是存在於 quota 套件內。

15.1.2 安裝 NFS 套件及瀏覽套件內容

NFS 相關套件

套 件 名 稱
簡 單 描 述
nfs-utils
NFS Server 的主要套件。
portmap-5beta
當架設任何 RPC Server 時,都必須安裝此套件,因 portmap 這個 daemon 就存在於這個套件內。

查詢 nfs-utils 套件清單

suse:~ # rpm -ql nfs-utils
/etc/init.d/nfsserver → 管理 NFS 服務的 script。
/usr/sbin/exportfs → 維護 export list 的指令。
/usr/sbin/rcnfsserver → 連結至 /etc/init.d/nfsserver 的符號連結檔。
/usr/sbin/rpc.mountd → 參考上一小節的說明。
/usr/sbin/rpc.nfsd → 參考上一小節的說明。
/usr/sbin/showmount → 顯示 NFS Server 的掛載資訊。
/var/lib/nfs/etab → etab 就是 export table 之意。

 先針對 export list 做個解釋。架設 NFS Server 的目的,就是要提供一些分享目錄給特定的來源端掛載,而當您打算把這些目錄分享出來,以提供給 Client 端做存取的這個行為,就叫做 export (輸出)。因此 export list 簡單的說,就是指提供給 Client 端做存取的分享資源一覽表的意思。

 再來看看 NFS 的設定檔 /etc/exports 與 /var/lib/nfs/etab 的關聯性。當您第一次啟動 NFS 時,就會把 /etc/exports 的內容寫入 /var/lib/nfs/etab 之中,爾後 /etc/exports 做了修改並重新 export 時,也會同時更新 etab 的資料。要是哪天您發覺 exports 與 etab 這兩個檔案的內容有出入,那有可能您曾經修改過 /etc/exports,但忘了重新 export,或者是 NFS 啟動後,有使用 exportfs 指令來對 export table 做異動,這些原因都會造成兩個檔案內容的不一致。

TipsNFS 的主要設定檔為 /etc/exports,其不屬於 nfs-utils 套件,而是存放在 netcfg 套件中。

設定下次開機時啟動 NFS 服務

suse:~ # chkconfig nfsserver 35

15.1.3 設定 NFS

 以下我們會以兩台 Linux 來實做,一台做 NFS Server (192.168.1.111),一台做 NFS Client (192.168.1.197)。不過在還沒正式開始設定之前,先做個基本的檢查動作:

  1. NFS Server 及 NFS Client 先互 ping 看看,以確保雙方都能夠通訊。如果有一方不通時,請先找出問題來,看看是不是防火牆或其他網路因素所造成的,等解決了之後再進行下一步。

    Client:~ # ping 192.168.1.111
    PING 192.168.1.111 (192.168.1.111) 56(84) bytes of data.
    64 bytes from 192.168.1.111: icmp_seq=1 ttl=64 time=0.371 ms
    64 bytes from 192.168.1.111: icmp_seq=2 ttl=64 time=0.355 ms

    Server:~ # ping 192.168.1.197
    PING 192.168.1.197 (192.168.1.197) 56(84) bytes of data.
    64 bytes from 192.168.1.197: icmp_seq=1 ttl=64 time=3.52 ms
    64 bytes from 192.168.1.197: icmp_seq=2 ttl=64 time=0.342 ms

  2. NFS Server 及 NFS Client 雙方都要啟動 RPC 機制,可使用 rpcinfo 指令來做測試。
    至於 rpcinfo 的用法請參考以下說明:

    指令語法
    rpcinfo -p [Hostname|Address]
    rpcinfo -u [Hostname|Address] [program-name]

    參數說明

    -p 偵測主機的 portmapper,並列出有向 RPC 登記 (註冊) 的所有程式。
    -u,-t 使用 RPC 來呼叫特定主機上的程式,並回報是否有正確收到對方程式的回應。-u:UDP,-t:TCP。

    了解大致用法後,接著可以在 Client 或 Server 上作測試:

    Client:~ # rpcinfo -p localhost
       program  vers  proto  port
        100000    2
       tcp   111  portmapper
        100000    2   udp   111  portmapper

    # 測試本機的 portmapper,只要有出現 111 port 就 ok 的啦。

    Client:~ # rpcinfo -p 192.168.1.111 
       program  vers  proto  port
        100000    2
       tcp   111  portmapper
        100000    2   udp   111  portmapper

    # 測試 Server 端的 portmapper。

 確認以上執行都沒問題之後,就可以開始設定 NFS 了。

/etc/exports 的設定格式

 NFS 的設定內容跟其他 Server 比較起來,真是有夠少的,如果您只有分享一個目錄,那麼設定一行就可以搞定。底下先來了解其設定格式:

分享目錄 允許存取的來源端主機名稱或IP位址(權限參數 1, 權限參數 2,…) …

 首先是分享目錄,顧名思義就是打算分享給 Client 端掛載的目錄,請用絕對路徑來做設定。

 接著是允許存取的來源端,這部分可以使用主機名稱或 IP 位址來設定。以主機名稱來說,比如 *.paching.com.tw,是表示此 domain 內的主機皆允許存取。那要是以 IP 位址來設定的話,則可使用如 192.168.1.0/24 或 192.168.1.0/255.255.255.0 這類的表示法。另外如果設定成「*」,其代表的是允許所有來源端。

 緊接著在來源端之後是設定權限參數的部分,在來源端、權限參數及小括弧之間不需留有空白字元,而多個權限參數之間,使用「,」做區隔即可。權限設定是 NFS 最重要的地方,倘若這裡能搞定的話,那後面就沒有什麼了。

 對於同一個分享目錄來說,您可以針對不同的來源端而制定不同的權限參數,至於詳細的設定方式,可以參考稍後的範例說明。

 接著就來介紹一些重要的權限參數:

權限參數
代 表 意 義
ro 預設值。表示 client 端對此目錄的權限為 read-only。當設定成 ro 時,使用者縱使對該分享目錄擁有寫入權限亦無濟於事。
rw 允許 client 端對該目錄具有讀寫權限,不過前提是使用者原本就需對此目錄具有讀寫的權限才行。
root_squash 預設值。表示 client 端若以 root 身分來掛載分享目錄時,會將其身分 squash ( 壓制 ) 成 anonymous account ( ID 為 65534),也就是說使用者以 (UID,GID) = (0,0) 的身分來存取分享目錄時,其身分會被轉換成 (UID,GID) = (65534,65534),當然此時對該目錄所實際擁有的權限,就是以 Server 上 ID 65534 的權限為主囉 ! 系統以此作為預設,顯然是為了安全的考量,畢竟 root 的權限太大了。 
Tips
SuSE 裡頭,UID、GID 65534 所代表的分別是 nobody 及 nogroup。 
no_root_squash 不把 root 身分轉換成 anonymous,所以當 client 端以 root 來掛載分享目錄後,會真正擁有 root 的權限。
all_squash 不論任何人 (包含 root 在內) 在存取分享目錄時,其身分都會被轉換成 anonymous。當 no_root_squash 及 all_squash 都設定時,是會以 all_squash 為主的。
no_all_squash 預設值。不會把所有人的身分都壓制成 anonymous,所以當 client 端以一個 (UID,GID) = (1000,1200) 的使用者身分執行掛載後,對該目錄所擁有的權限是以 Sever 上 (UID,GID) = (1000,1200) 的權限為主。比如使用者 barry 在 Client 端主機的 UID 為 1000,而很巧的在 Server 端主機上也存在著 barry 帳號,但其 UID 為 1100,此時當 Client 端的 barry 掛載目錄後,對該目錄的權限,是以 Server 端 UID 為 1000 的使用者權限為主,而非以 barry 帳號為主。
anonuid 預設為 65534。當 Client 端的使用者被 squash 成 anonymous 時,此 anonymous 的 UID 要設定為何。
anongid 預設為 65534。與上面的意思一樣,只不過是針對 anonymous 的 GID 做設定罷了,不再贅述。
sync 預設值。同步 I/O,也就是在資料異動時,會同步寫入記憶體與磁碟之中。
async 非同步 I/O,也就是將異動的資料先暫存至 cache,再伺機回存磁碟。設定這個參數可以提昇效能,但容易造成資料的遺失。

 設定檔的格式就大致如此,應該不難吧。以下會舉幾個範例來做練習。

/etc/exports 的設定範例

範例一
# 建立分享目錄並修改權限:
Server:~ # mkdir /home/nfsdir 
Server:~ # chmod 777 /home/nfsdir 

# 設定 /etc/exports:
Server:~ # vi /etc/exports
# See the exports(5) manpage for a description of the syntax of this file.
# This file contains a list of all directories that are to be exported to
# other computers via NFS (Network File System).
# This file used by rpc.nfsd and rpc.mountd. See their manpages for details
# on how make changes in this file effective.

/home/nfsdir 192.168.1.0/24(rw,sync) *(all_squash,sync)
# 允許 192.168.1.0/24 這個網路段的主機掛載 /home/nfsdir,並對此目錄具有讀寫的權限 ;
# 另外如果是以 root 身分進行存取,則其身分會被轉換成 anonymous,其他人則不會。
# 至於其他來源端,不論以何種身分進行掛載,都會被轉換成 anonymous,且只具唯讀權限。

範例二
# 建立分享目錄並修改權限:
Server:~ # mkdir /tmp/sharedir
Server:~ # chmod 777 /tmp/sharedir

# 設定 /etc/exports:
Server:~ # vi /etc/exports
/tmp/sharedir *(rw,all_squash,anonuid=2000,anongid=1500,sync) 
# 允許所有來源端掛載 /tmp/sharedir,並對此掛載目錄具讀寫的權限,且無論任何人執行
# 掛載後,其身分皆會被轉換成 UID 2000 及 GID 1500。

範例三

# 建立分享目錄並修改權限:
Server:~ # mkdir /home/reportdir
Server:~ # chmod 1777 /home/reportdir

# 設定 /etc/exports:
Server:~ # vi /etc/exports
/home/reportdir 192.168.1.197(rw,no_root_squash,sync)
# 允許 192.168.1.197 的來源端掛載 /home/reportdir,而當執行掛載的身分為 root 時,
# 掛載後對 reportdir
所具有的權限就是 root 的權限,如是其他使用者進行掛載,則其
#
真正擁有的權限就看 Client 端使用者的 UID、GID 為何 ?
#
比如 Client 端若是以 UID、GID 皆為 1500 來進行掛載,則對於 reportdir 所擁有
# 的權限,便是以Server 上 UID、GID 為 1500 的權限為主。


範例四:將以上設定結合起來,再加上一個 CDROM 分享的設定。

# 先建立 cdrom 的掛載點,再執行掛載:
Server:~ # mkdir /mnt/cdrom 
Server:~ # mount /dev/cdrom /mnt/cdrom 

# 設定 /etc/exports:
Server:~ # vi /etc/exports
/home/nfsdir 192.168.1.0/24(rw,sync) *(all_squash,sync)
/tmp/sharedir *(rw,all_squash,anonuid=2000,anongid=1500,sync) 
/home/reportdir 192.168.1.197(rw,no_root_squash,sync)
/mnt/cdrom 192.168.1.0/24(ro,sync)
# 最後面那行 cdrom 的分享設定應該沒問題吧 !

 設定完成後請啟動 NFS:

Server:~ # rcnfsserver start
Starting kernel based NFS server        done

 接著您可使用 rpcinfo 或 netstat 指令,去確認 nfs 相關 daemon 的執行狀態:

Server:~ # rpcinfo -p localhost
Server:~ # netstat -anp

 將來要是修改了 /etc/exports 之後,可以不需重新啟動 NFS,而直接執行「exportfs -rv」即可。關於 exportfs 這個指令的用法,請接著參考以下的說明。

指令 exportfs

 用來維護 NFS Server 的 export table 的指令。

指令語法
exportfs [-o options,..] [client:/path ..]
exportfs [-aruv]
exportfs -u [client:/path ..]

參數說明

-a export 或 unexport 所有的分享目錄。當配合 -u 參數一起使用時,就會把所有的分享目錄做 unexport。
-r 根據 /etc/exports 來 reexport (重新輸出) 所有的分享目錄。
-u unexport 一個或多個分享目錄。
-v 顯示執行過程。
-o 指定在 export 分享目錄時,所使用的權限參數。

 補充 一下指令語法中的 [ client:/path . . ],client 是針對來源端做指派,可以是 IP 位址或主機名稱,而 path 是 NFS 所分享目錄的實際路徑。當您要對 /etc/exports 中沒設定到的分享目錄做 export,或對已設定的分享目錄做新增來源端或修改相同來源端的權限時,這個 exportfs 指令就很好用了,也就是說這個指令可以用來修改 export table ( /var/lib/nfs/etab ) 啦。以下的例子會以範例四做基礎,來看看如何使用 exportfs。

範例說明
Server:~ # cat /etc/exports
/home/nfsdir 192.168.1.0/24(rw,sync) *(all_squash,sync)
/tmp/sharedir *(rw,all_squash,anonuid=2000,anongid=1500,sync) 
/home/reportdir 192.168.1.197(rw,no_root_squash,sync)
/mnt/cdrom 192.168.1.0/24(ro,sync)


1.
修改 /tmp/sharedir:將所有來源端 (*) 的權限修改成唯讀:
Server:~ # exportfs -o ro *:/tmp/sharedir 
Server:~ # cat /var/lib/nfs/etab | grep sharedir 
/tmp/sharedir *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,
all_squash,subtree_check,secure_locks,acl,mapping=identity,anonuid=2000,
anongid=1500)

2. 修改 /home/reportdir:新增來源端 192.168.1.200,並將 all user 身分轉換成 anonymous:
Server:~ # exportfs -o ro,all_squash 192.168.1.200:/home/reportdir
Server:~ # cat /var/lib/nfs/etab | grep report
/home/reportdir 192.168.1.200(ro,sync,wdelay,hide,nocrossmnt,secure,
root_squash,all_squash,subtree_check,secure_locks,acl,mapping=identity,
anonuid=65534,anongid=65534)

/home/reportdir 192.168.1.197(rw,sync,wdelay,hide,nocrossmnt,secure,
no_root_squash,no_all_squash,subtree_check,secure_locks,acl,mapping
=identity,anonuid=65534,anongid=65534)

3. 新增分享目錄 /tmp/testdir:允許存取的來源端為 192.168.2.0/24,並採用預設的權限:
Server:~ # exportfs 192.168.2.0/24:/tmp/testdir
Server:~ # cat /var/lib/nfs/etab | grep testdir
/tmp/testdir 192.168.2.0/24(ro,sync,wdelay,hide,nocrossmnt,secure,
root_squash,no_all_squash,subtree_check,secure_locks,acl,
mapping=identity,anonuid=65534,anongid=65534)

4. 將分享給 192.168.2.0/24 的 /tmp/testdir 及 * 的 /home/nfsdir 做 unexport:
Server:~ # exportfs -uv 192.168.2.0/24:/tmp/testdir *:/home/nfsdir
unexporting 192.168.2.0/24:/tmp/testdir
unexporting *:/home/nfsdir

 以上是使用 exportfs 指令來修改 export table。接著下來您可嘗試執行以下的指令:

Server:~ # exportfs -rv

 這樣將會把 /etc/exports 的設定內容重新做一次輸出 (reexport),結果當然就是更新 /var/lib/nfs/etab 囉,所以剛剛使用 exportfs 指令去做的修改,都會從 /var/lib/nfs/etab 中消失。

 如果平常您只針對 /etc/exports 在做設定,並無額外使用 exportfs 指令來修改 export table 的話,那麼只要 /etc/exports 異動後,就可以執行「exportfs -rv」來讓新的設定值生效。

 一般人往往搞不清楚 exportfs 指令中 -a -r 參數的差別,簡單的說,使用 -r 能夠將 /etc/exports 與 export table 做同步更新,而 -a (未搭配 -u 使用時) 則是把 /etc/exports 所有設定的分享目錄輸出至 export table 而已,如果之前您有使用 exportfs 指令去新增幾筆資料的話,那這些資料紀錄還是會存在,所以 -a 參數並不能保證 export table 與 /etc/exports 的一致性。假使剛剛您不是執行「exportfs -rv」,而是執行「exportfs -av」的話,就可以很明顯的看出兩者之間的差異。

15.1.4 Client 掛載 NFS

 在介紹如何掛載前,先學個叫 showmount 指令的用法,然後才教大家如何掛載。

指令 showmount

 此指令可用來顯示 NFS Server 上的掛載資訊。

指令語法
showmount -e [hostname|IP]

 -e 參數可使用 --exports 來代替,是用來輸出 NFS Server 上 export table 的簡要資訊,至於其後就是接 NFS Server 的主機名稱或 IP 位址。這對 Client 端想了解 Server 分享什麼目錄時,是非常好用的。

範例
Client:~ # showmount -e 192.168.1.111
Export list for 192.168.1.111:
/tmp/sharedir (everyone)
/mnt/cdrom 192.168.1.0/24
/home/nfsdir (everyone)
/home/reportdir 192.168.1.197

 了解了 Server 分享哪些目錄後,接著 NFS Client 就可以進行掛載囉。

Client 端掛載 NFS

掛載語法
mount [NFS Server 的主機名稱或 IP]:[分享目錄的路徑] [掛載點]

範例說明
# Server 端的設定內容:
Server:~ # cat /etc/exports

/home/nfsdir 192.168.1.0/24(rw,sync) *(all_squash,sync)
/tmp/sharedir *(rw,all_squash,anonuid=2000,anongid=1500,sync) 
/home/reportdir 192.168.1.197(rw,no_root_squash,sync)
/mnt/cdrom 192.168.1.0/24(ro,sync)


# 以下為 Client 端的掛載測試。

#
先建立掛載點
Client:~ # mkdir /mnt/nfs 

# 執行掛載:
Client:~ # mount 192.168.1.111:/home/nfsdir /mnt/nfs 
# 掛載成功後,可使用 df 或 mount 指令去做個確認。

# 接著馬上建立個檔案做實驗:
Client:~ # cd /mnt/nfs
Client:/mnt/nfs # touch file1
Client:/mnt/nfs # ls -l
-rw-r--r-- 1 nobody nogroup 0 Nov 12 2006 file1
#
雖然您是以 root 的身分執行掛載,但由於掛載之後,身分已被轉換成 anonymous,
# 因此所建立檔案的 owner 及 group id,皆為預設的 65534。

# 先切離掛載點後,再進行卸載:
Client:/mnt/nfs # cd 
Client:~ # umount /mnt/nfs

# 掛載 /tmp/sharedir 並作測試:
Client:~ # mount 192.168.1.111:/tmp/sharedir /mnt/nfs
Client:~ # cd /mnt/nfs
Client:/mnt/nfs # touch file2
Client:/mnt/nfs # ls -l file2
-rw-r--r-- 1 2000 1500 0 Nov 12 2006 file2
#
由於 /tmp/sharedir 這個分享目錄的設定中,有指定 anonuid=2000 及 anongid=1500,因此
#
在 owner 及 group 的欄位才會是那樣。至於為何是顯示 id number,理由很簡單,因為在
#
Client 端主機 上的 /etc/passwd 及 /etc/group 中,找不到這兩個 id number 所對應的名稱,
#
如果能夠找得到的話, 就會顯示 username 及 groupname 了。

# 進行卸載:
Client:/mnt/nfs # cd
Client:~ # umount /mnt/nfs

# 掛載 /home/reportdir 並作測試:
Client:~ # mount 192.168.1.111:/home/reportdir /mnt/nfs
Client:~ # cd /mnt/nfs
Client:/mnt/nfs # touch file3
Client:/mnt/nfs # ls -l file3
-rw-r--r-- 1 root root 0 Nov 12 2006 file3
#
注意到沒,file3 的 owner 及 group 皆為 root,這就是 no_root_squash 所發揮的效用啦。

使用一般帳號執行掛載

 剛剛在 Client 端的測試都是使用 root 來進行掛載,如果改成以一般使用者身分來執行的話又如何呢 ?

barry@Client:~> mkdir nfs
barry@Client:~> mount 192.168.1.111:/home/nfsdir nfs
mount: only root can do that

 糟糕,不給掛載,怎麼辦呢 ? 這時候可以考慮在 Client 端安裝 sudo 套件來解決這個問題:

Client:~ # rpm -qa | grep sudo
sudo-1.6.8p12-18.2
# 如查無此套件的話,採光碟安裝即可。

 安裝了這個套件並做好相關設定後,一般使用者只要在欲執行的指令之前加上 sudo,就能以 root ( 當然也可以是其他 user ) 的身分來執行指令,如此便可解決一般 user 無法 mount NFS 的問題。所以接著就先來認識一下 sudo 囉。

sudo 設定檔 (/etc/sudoers) 的內容
 

Client:~ # visudo ← 或者執行vi /etc/sudoers也行。

# Defaults specification
# In the default (unconfigured) configuration, sudo asks for the root password.
# This allows use of an ordinary user account for administration of a freshly
# installed system. When configuring sudo, delete the two
# following lines:
Defaults targetpw # ask for the password of the target user i.e. root
# 執行 sudo 指令時,會要求輸入目標使用者的密碼。也就是當您利用 sudo 變換成
# 另一個使用者來執行指令時,需輸入那個使用者的密碼才行 ( root 執行 sudo 時為例外
)。
# 但如果把此行註解起來,則只需
輸入本身的密碼。

ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
# 先了解一下基本設定格式:
# 可執行sudo指令者 登入的主機=(可變更的身份) 可執行的指令敘述
# 因此上一行設定是說,允許所有人,無論從何處登入,皆能藉著執行 sudo 來轉換成
# 任何使用者的身分,並可執行所有的指令。

# 如果您想讓 barry 這個帳號,能藉由 sudo 指令來轉換成 user01 及 user02 ,並可
# 執行所有指令,那麼可設定如下:
# barry ALL=(user01,user02) ALL
# 另外當未指定所要變更的身分時,則預設僅能變換成 root。

# User privilege specification
root ALL=(ALL) ALL

# 允許 root 能執行 sudo 來變換成任何一個 user 的身分,並可執行所有指令。

# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# 允許 wheel 群組成員
能執行 sudo 來變換成任何一個 user 的身分,並可執行所有指令。

# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# 讓 wheel 群組成員在執行 sudo 時,不需輸入密碼。

# %users ALL=(ALL) ALL
# %users ALL=/bin/cat /var/log/warn
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now


範例

barry@Client:~> cat /var/log/messages
cat: /var/log/messages : Permission denied
# 一般使用者不具有瀏覽 /var/log/messages 的權限,使用長格式觀察一下就知了。

barry@Client:~> ls -l /var/log/messages
-rw-r----- 1 root root 471056 Nov 12 15:13 /var/log/messages

barry@Client:~> sudo cat /var/log/messages 
# 在執行程式之前,加上個 sudo 指令 (不加參數),就表示要以 root 的身分來執行。

root's password: ← 請輸入目標使用者 root 的密碼。 
Nov 11 12:08:12 suse kernel: eth0: no IPv6 routers present
Nov 12 11:08:38 suse SuSEfirewall2: Warning: ip6tables does not support state matching.
Nov 12 11:08:38 suse syslog-ng[2621]: STATS: dropped 0
Nov 12 11:08:38 suse SuSEfirewall2: Firewall rules unloaded.
            :略

# 如想要以指定的 user 身分執行 command,請加上 -u 參數:
barry@Client:~> sudo -u mary touch ~mary/maryfile
mary's password: ← 請輸入目標使用者 mary 的密碼。

barry@Client:~> ls -l ~mary/maryfile
-rw-r--r-- 1 mary users 0 Nov 12 15:26 /home/mary/maryfile


有些時候,您會希望只授權給少數使用者能以 root 的身分執行一些工作,但又不希望這些使用者能知道 root 的密碼,這時候就得調整一下 sudoers :

Client:~ # visudo

# Defaults targetpw
# ALL ALL=(ALL) ALL  
# 以上兩行請先註解起來。

%authgrp ALL=(root) ALL
barry ALL=(root) ALL
# 這樣一來,就只有authgrp 群組成員及使用者 barry ,可以執行 sudo 來變換成 root 身分
# 執行指令,且輸入的是自己的密碼。

 了解了 sudo 的用法後,再來就直接以一般使用者的身分進行掛載及卸載 NFS:

barry@Client:~> sudo mount 192.168.1.111:/home/reportdir nfs
barry's password: 
barry@Client:~> touch nfs/barryfile
barry@Client:~> ls -l nfs/barryfile
-rw-r--r-- 1 barry users 0 Nov 12 21:34 nfs/barryfile

# 現在請回到 Server 上,觀察一下 barryfile 的長格式:
Server:~ # ls -l /home/reportdir/barryfile
-rw-r--r-- 1 3000 users 0 Nov 12 22:12 /home/reportdir/barryfile
#
咦,奇怪,怎麼在 Server 端所看到 barryfile,其擁有者為 3000 ? 因為這個 id 在 Server 上
#
的 /etc/passwd 檔案內,找不到其所對應的 username 啦。

# 最後 Client 端要卸載時,也請加上 sudo 指令:
barry@Client:~> sudo umount nfs

設定開機時自動掛載


 若要系統於開機時自動掛載 nfs 的檔案系統,可於 Client 端的 /etc/fstab 做如下設定:

Client:~ # vi /etc/fstab

192.168.1.111:/home/reportdir   /mnt/nfs nfs defaults 0 0


15.1.5 對分享目錄做進一步的限定

 直接以範例來說明比較快。首先在 NFS Server 上建立一分享目錄 /secretdir,並做以下的規劃:

  1. 設定允許存取的來源端為 192.168.1.197。
  2. 新增一 UID 為 5000 的使用者 admin ,並讓 admin 對此目錄擁有最大權限。
  3. 新增一 GID 為 5000 的群組 secretgrp,並讓該群組成員 (barry 及 mary) 對此分享目錄具有唯讀權限,其他人 (包括 root) 則不具任何權限。

 下面就針對以上的要求事項做相關設定:

Server 端的設定

1. 建立分享目錄:
Server:~ # mkdir /secretdir
Server:~ # cat > /secretdir/secretfile ← 建立此檔是為了方便等會兒實驗用。
It is a secret file.

2. 新增帳號及群組:
Server:~ # useradd -u 5000 -m admin 

Server:~ # passwd admin
Changing password for admin.
New password:
Re-enter new password:
Password changed.
Server:~ # groupadd -g 5000 secretgrp 


3. 修改檔案目錄相關屬性:
Server:~ # chown -R admin:secretgrp /secretdir
Server:~ # chmod 750 /secretdir ; chmod 640 /secretdir/secretfile
Server:~ # ls -ld /secretdir /secretdir/secretfile
drwxr-x--- 2 admin secretgrp 80 Nov 12 23:39 /secretdir
-rw-r----- 1 admin secretgrp 21 Nov 12 23:39 /secretdir/secretfile

4. 設定 /etc/exports:
Server:~ # vi /etc/exports
/secretdir 192.168.1.197(rw,root_squash,sync)
Server:~ # exportfs -rv

Client 端的設定及掛載

1. 新增 id 皆為 5000 的使用者及群組:
Client:~ # useradd -u 5000 -m admin
Client:~ # passwd admin
Changing password for admin.
New password:
Re-enter new password:
Password changed.
Client:~ # groupadd -g 5000 secretgrp

2. 將使用者 barry 及 mary 加入 secretgrp 群組:
Client:~ # vi /etc/group
secretgrp:!:5000:barry,mary
# client 端在掛載後,對於掛載目錄的權限,會根據 server 上這個使用者的 uid 及其
# 所屬群組
的 gid,來決定對此目錄擁有什麼權限。而這裡我們把 barry 及 mary 加入
# gid 5000 的群組後,將來他們對於掛載目錄的權限,就依 sever 上 gid 5000 的群組對此
#
目錄有何權限而定。

3. Client 掛載測試:
# 使用 barry 帳號掛載測試:
barry@Client:~> sudo mount 192.168.1.111:/secretdir nfs 
barry@Client:~> cd nfs
barry@Client:~/nfs> cat secretfile
It is a secret file.
barry@Client:~/nfs> touch barryfile
touch: cannot touch `barryfile': Permission denied
# 使用 admin 帳號掛載測試:
admin@Client:~> mkdir nfs
admin@Client:~> sudo mount 192.168.1.111:/secretdir nfs
admin@Client:~> touch nfs/adminfile
admin@Client:~> ls -l nfs
-rw-r--r-- 1 admin users 0 Nov 13 21:55 adminfile
# 使用 root 帳號掛載測試:
Client:~ # mount 192.168.1.111:/secretdir /mnt/nfs
Client:~ # cd /mnt/nfs
-bash: cd: /mnt/nfs: Permission denied


15.2 架設 NIS Server

15.2.1 NIS 的使用時機

 假使您是個系統管理員,平常手邊所管理的 Linux 主機有好幾部,這時候可能會希望每一台主機上的帳號密碼都是相同的,因為這樣就能夠使用同一組帳號密碼來分別登入不同的主機。此時所直接想到的處理方式可能就是土法煉鋼法,也就是到每一部 Linux 主機上去設定帳號密碼,當然如果主機只有兩三部且帳號數也不多時,只要您願多花一點時間,相信是一定可以搞定的 ﹔那萬一管理的主機有個十來部,且使用者帳號有上百個甚至更多,難道還是想一部部來做設定嗎 ? 當然不想啊,是吧 ! 所以這時候您可能會有個想法,看看能不能把所有的帳號密碼都集中在一部 Linux 主機上就好,而其他主機的使用者在登入時,則透過這台主機來做認證的工作。真是個 good idea,但是想歸想,要怎麼實現呢 ? 架設 NIS Server 就能滿足您的要求啦。

 NIS 全名為 Network Information System,顧名思義就是提供網路資訊的一個服務,也是 SUN 這家公司所發展的一套軟體,一樣是運用 RPC 機制來管理。在 NIS 網域裡,可以存在著一台以上的 NIS 伺服器,而這些 Server 就專門負責使用者在登入 NIS Client 端時的認證工作。

 由以上說明不難發現 NIS Server 的重要性。如果您網域裡只存在一台 NIS Server,那萬一這台 Server 出狀況,則其他靠 NIS 做認證的使用者,會全部無法登入 NIS Client,因此最好還是存在著至少一台的 Slave NIS。至於其架構圖請參考以下:

 針對這個架構圖稍微做個說明。首先在 NIS Domain 裡,存在著兩部 NIS Server,一部做 Master,提供給四台的 NIS Client 做登入時的認證,另外一部做 Slave,提供給兩台的 NIS Client 做認證。如果 Master NIS 出問題時,那四部 NIS Client 會轉而向 Slave NIS 做認證,反過來說,如果 Slave 出問題時,則那兩部 NIS Client 會轉而向 Master 做認證。當然在所有 NIS Client 的主機上,必須要把這兩部 NIS Server 都設定進去,這樣當其中一台出問題時,才有辦法向另一台做查詢。

Tips:實際上當 NIS Client 啟動 ypbind 服務時,並非依照您所設定的 NIS Server 順序來查詢,而是以最先做出回應的那台 NIS Server 為主。以上圖來說,右邊那兩台 NIS Client 在啟動 ypbind 服務時,剛好先接收到 Slave NIS 的回應,所以當然就以 Slave NIS 作為主要的認證伺服器了。

 因為 NIS 與 NFS 相同,都是使用 RPC 來管理,所以等一下在設定 NIS 之前,請先將 Server 與 Client 端的 portmap 啟動。這部分在以下的範例中就不再提了。

15.2.2 安裝 NIS Server 套件及瀏覽套件內容

 NIS Server 及 NIS Client 端,各有其所需安裝的套件,所以在實做的過程,您需要分別對扮演著不同角色的主機做個別的設定。而這一小節主要是針對 NIS Server 來做說明。

NIS Server 相關套件

套 件 名 稱
簡 單 描 述
ypserv
NIS Server 的主要套件。
yp-tools
非 Server 端的必要套件,不過裡頭有個 nisdomainname 指令,可用來協助設定 nis domain name。

檢視套件清單

Server:~ # rpm -ql ypserv

/etc/ypserv.conf NIS Server 的主要設定檔。
/usr/sbin/ypserv 提供 NIS 服務的 daemon。
/usr/sbin/rpc.yppasswdd 當 NIS Client 端的使用者,執行 yppasswd 指令來變更密碼時,就是靠這個 daemon 先去比對 client 所輸入的舊密碼是否相符,符合後才允許更新密碼。
/usr/sbin/rpc.ypxfrd 啟動這個 daemon,可以加速 NIS Slave 在大量複製 NIS Master 資料庫時的執行效率。
/etc/init.d/ypserv 管理 NIS 服務的 script。
/etc/init.d/yppasswdd 管理 yppasswd 服務的 script。
/usr/sbin/rcypserv 連結至 /etc/init.d/ypserv 的符號連結檔。
/usr/sbin/rcyppasswdd 連結至 /etc/init.d/yppasswdd 的符號連結檔。
/usr/lib/yp/ypinit 安裝及建立 NIS 資料庫的 script。
/var/yp NIS 的資料庫就是放在這個目錄下。
/var/yp/securenets 如想要對存取 NIS Server 的來源端做限制,就可以設定在這個檔案內。

Tips:yp 就是 yellow page 之意,也就是所謂的黃頁。黃頁其實指的是一些工商名錄,如地址簿與電話簿之類的,因此透過 yellow page 的查詢,可以讓我們很快速的找到所需的資訊。NIS 就是類似 yp 這樣的一個功能,所以您會注意到 NIS 的相關套件、檔案、程式名稱之前,幾乎都會加上 yp,這樣應該能夠理解吧 !

設定開機時啟動 NIS 服務

Server:~ # chkconfig ypserv 35
Server:~ # chkconfig yppasswdd 35


15.2.3 設定 NIS Server

 請您參考以下的步驟做相關的設定:

  1. 在 /etc/hosts 檔內,將 NIS Server 的主機名稱與 IP 位址設定進去

    Server:~ # vi /etc/hosts
    192.168.1.111 Server.paching.com.tw Server
     
  2. 設定 NIS domain name

    Server:~ # nisdomainname paching
    #
    也可使用 ypdomainname 這個指令來做設定,而這兩個指令都是屬於 yp-tools
    #
    套件。 如單純的執行 nisdomainname 指令,則會顯示目前 NIS 的 domain name 為何。

    Server:~ # vi /etc/defaultdomain
    paching
    #
    這裡的設定,主要是讓系統在下次開機時,能自動幫我們指定好 NIS Domain Name。   

  3. 設定 ypserv.conf

    Server:~ # vi /etc/ypserv.conf

    # Host      : Domain  : Map          : Security
    # 限定的來源端    開放的網域  對應的資料庫類型        安全性
    *         : *     : shadow.byname     : port
    *         : *     : passwd.adjunct.byname : port

    Security 的部分,可設定成 deny (全部拒絕存取)、none (無任何限制,表示皆可存取)、port (允許小於 1024 port 的來源端作存取)。若無特殊考量,這個地方採用系統預設值即可。但如您考慮到安全性的話,則可做如下的修改:

    Server:~ # vi /etc/ypserv.conf

    127.0.0.0/255.0.0.0  : *    : *    : port
    192.168.1.       : *    : *    : port
    *           : *    : *    : deny

    來源端「192.168.1.」,代表的就是 192.168.1.0/255.255.255.0。也就是說除了這個來源端允許存取外,拒絕其他所有的來源端做存取。

  4. 設定 /etc/netgroup

    這個檔案主要是用來設定信任的網路群組,其設定格式如下:

    netgroup (host,user,domain) (host,user,domain) ..

    netgroup 是您的群組名稱,而緊接著在 ( ) 內的 host 表示來源端主機,user 表示 username,domain 就是 NIS 網域名稱。筆者在這個地方是沒做任何的設定,這就表示信任所有的主機、使用者及網域的意思。

  5. 初次啟動 ypserv 及 yppasswdd

    Server:~ # rcypserv start
    Starting ypserv              done
                        
    Server:~ # rcyppasswdd start
    Starting rpc.yppasswdd             done

  6. 確認 RPC 有收到程式正確的回應

    Server:~ # rpcinfo -u localhost ypserv
    program 100004 version 1 ready and waiting
    program 100004 version 2 ready and waiting

    Server:~ # rpcinfo -u localhost yppasswdd
    program 100009 version 1 ready and waiting

    如果您執行的結果不是輸出這樣的訊息,表示 RPC 收不到程式的回應。請您務必要看到正確的回應訊息後,再繼續進行下個步驟。

  7. 建立 NIS 資料庫

    Server:~ # /usr/lib/yp/ypinit -m

    At this point, we have to construct a list of the hosts which will run NIS servers.
    Server.paching.com.tw 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.paching.com.tw
      next host to add:  ← 這個地方請按下 Ctrl - D。
    The current list of NIS servers looks like this:

    Server.paching.com.tw

    Is this correct? [y/n: y] y ← 沒問題的話,就輸入 y 囉 !
    We need a few minutes to build the databases...
    Building /var/yp/paching/ypservers...
    Running /var/yp/Makefile...
    gmake[1]: Entering directory `/var/yp/paching'
    Updating passwd.byname...
    Updating passwd.byuid...
    Updating group.byname...
    Updating group.bygid...
    Updating rpc.byname...
    Updating rpc.bynumber...
    Updating services.byname...
    Updating services.byservicename...
    Updating netid.byname...
    gmake[1]: Leaving directory `/var/yp/paching'

    Server.paching.com.tw has been set up as a NIS master server.

    Now you can run ypinit -s Server.paching.com.tw on all slave server.


    這樣就很輕鬆的建立起 NIS 資料庫了。您可至 /var/yp 目錄裡,找到一個 paching 目錄及 ypservers 檔案,paching 目錄就是存放資料庫檔案之處,至於 ypservers 檔案則是記載著這台 NIS 的主機名稱。

    另外在剛剛那輸出內容的最後兩行,是告知您 Server.paching.com.tw 這台主機,已經被設定成 NIS Master Server 了,如還要設定 NIS Slave,就在 Slave 主機上執行:「ypinit -s Server.paching.com.tw」。

    將來您要是在 NIS Server 上去新增帳號或修改帳號密碼相關資訊後,請記得更新資料庫:

    Server:~ # make -C /var/yp

 Server 部分的設定,就介紹到這裡。


15.2.4 設定 NIS Client


 按照慣例,先了解需安裝套件及套件內容,然後再對 NIS Client 的相關設定及測試做說明。

NIS Client 相關套件

套 件 名 稱
簡 單 描 述
ypbind
NIS Client 的主要套件。
yp-tools
NIS Client 查詢 NIS Server 相關資訊時所使用的指令,都在這個套件內。

檢視套件清單

Client:~ # rpm -ql ypbind

/etc/yp.conf ypbind 的主要設定檔。
/usr/sbin/ypbind NIS Client 執行的主程式 (daemon),他會找尋 domain 裡的 NIS Server,並取得其相關資訊。
/etc/init.d/ypbind 管理 ypbind 的 script。
/usr/sbin/rcypbind 連結至 /etc/init.d/ypbind 的符號連結檔。

Client:~ # rpm -ql yp-tools

/bin/nisdomainname 設定或顯示 NIS Domain Name 的指令。
/bin/ypdomainname 同上。
/usr/bin/ypcat 瀏覽 NIS Server 上頭,資料庫檔案內容的指令。
/usr/bin/ypmatch 此指令可用來顯示資料庫檔案中的部分內容。
/usr/bin/yppasswd 使用者可執行這個指令來修改 NIS Server 上的密碼。
/usr/bin/ypwhich 顯示 NIS Server 的主機名稱或資料庫檔案名稱。

設定開機時啟動 ypbind 服務

Client:~ # chkconfig ypbind 35

NIS Client 的設定步驟

  1. 於 hosts 檔內,將 NIS Server 的資料設定進去

    Client:~ # vi /etc/hosts
    192.168.1.111 Server.paching.com.tw Server

  2. 設定 NIS domain name

    Client:~ # nisdomainname paching
    Client:~ # vi /etc/defaultdomain
    paching

  3. 設定 yp.conf

    Client:~ # vi /etc/yp.conf
    # 指定 NIS Domain Name。
    domain paching

    # 指定所要查詢的 NIS Server。
    ypserver Server.paching.com.tw

    # 這個地方,您也可以這麼設定:
    # domain paching server Server.paching.com.tw
    # 另外如果設定成:
    # domain paching broadcast
    # 這表示會透過廣播的方式,去尋找 domain 裡的 NIS Server。


  4. 設定 Client 端查詢的順序

    Client:~ # vi /etc/nsswitch.conf
    passwd :  files nis
    shadow :  files nis
    group :   files nis
    hosts :   files nis dns

    針對這四行設定稍微做個解說:

      ˙passwd: 有關帳號資訊的查詢,是先查本機的 /etc/passwd,查詢不到再向 NIS Server 查詢。
      ˙shadow: 有關密碼的查詢,是先查詢本機的 /etc/shadow,查詢不到再向 NIS Server 查詢。
      ˙group: 有關群組的查詢,是先查本機的 /etc/group,查詢不到再向 NIS Server 查詢。
      ˙hosts: 有關主機名稱的查詢,是先查詢本機的 /etc/hosts 檔,查詢不到再向 NIS Server 查詢,若連 NIS 也查詢不到,再根據本機 /etc/resolv.conf 的設定,向預設的名稱伺服器做查詢。

  5. 修改 /etc/passwd

    Client:~ # vi /etc/passwd
          :略
    mysql:x:60:103:MySQL database admin:/var/lib/mysql:/bin/bash
    dhcpd:x:102:65534:DHCP server daemon:/var/lib/dhcp:/bin/false
    pop:x:67:100:POP admin:/var/lib/pop:/bin/false
    +:::::: ← 加上這行。
    # 補上這一行的用意,是表示相關資訊在本機查不到時,可以引導 process 到 NIS 去查詢。
    # 請注意此行設定中,"+" 及其後的六個 ":" 中間無任何空白字元。

  6. 初次啟動 ypbind 及確認 RPC 有收到程式回應
Client:~ # rcypbind start
Starting ypbind           done

Client:~ # rpcinfo -u localhost ypbind
program 100007 version 1 ready and waiting
program 100007 version 2 ready and waiting

 NIS Client 端的設定大致如此。沒問題的話,再來就可以開始進行測試了。

Client 端測試

 請使用一個 Server 上存在,但 Client 端不存在的帳號,來看看能否順利從 Client 端透過 Server 的認證而成功登入:

Client login : vivian
Password: ← 請輸入 Server 上使用者 vivian 的密碼。
Last login: Sat Nov 12 14:29:53 2006
No directory /home/vivian !
Logging in with home= " / "
vivian@Client: / >

 目前雖已成功登入,但卻無家目錄可用,這是因為 Client 端主機根本就不存在 vivian 這個帳號,那當然也就沒家目錄囉。要解決這個問題很容易,只要把 NIS 與 NFS 做個整合即可,這部分等一下馬上會說明。

NIS Client 查詢 NIS Server 相關資訊的指令

 以下要介紹的這些指令,請參考 15.2.2 小節的說明,這裡直接以範例來介紹:

Client:~ # ypwhich -x
Client:~ # ypcat -x
Client:~ # ypmatch -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"

# 以上三個指令的執行結果是相同的,都是用來顯示 NIS Server 上的資料庫檔案。
#
 若單純的執行 ypwhich 指令,不加任何參數,則會顯示 NIS Server 的主機名稱:
Client:~ # ypwhich
Server.paching.com.tw

Client:~ # ypcat passwd.byname
# 列出 UID 1000 以上的使用者帳號資訊。亦可使用 passwd 來代替 passwd.byname: 
Client:~ # ypcat passwd
nobody:*:65534:65533:nobody:/var/lib/nobody:/bin/bash
vivian:$1$Qyzzh301$:1002:100::/home/vivian:/bin/bash
barry:jeI0Y8SUVE0vE:1001:100::/home/barry:/bin/bash
mary:KJchA1.8PjUAg:1000:100::/home/mary:/bin/bash


Client:~ # ypmatch vivian barry passwd 
vivian:$1$Qyzzh301$:1002:100::/home/vivian:/bin/bash
barry:jeI0Y8SUVE0vE:1001:100::/home/barry:/bin/bash

# 顯示 vivian 及 barry 的帳號資訊。

Client:~ # ypmatch 1001 passwd.byuid 
barry:jeI0Y8SUVE0vE:1001:100::/home/barry:/bin/bash
# 顯示 UID 1001 的帳號資訊。


15.2.5 NIS 與 NFS 的整合


 剛剛在 Client 端做測試時,雖可經由 NIS 認證而成功登入,但美中不足之處,就是使用者沒家目錄可用,這時候您只要在 NIS Server 上再去架設 NFS,並將 /home 分享出來,然後 Client 端再把 /home 掛載進來就行了:

NIS Server 上的設定


Server:~ # vi /etc/exports
/home 192.168.1.0/24(rw,sync)

Server:~ # rcnfsserver start 
# 如果 NFS 已是啟動狀態,則執行 " exportfs -rv " 即可。

NIS Client 端的測試

Client:~ # mount 192.168.1.111:/home /home

Client:~ # df | grep home 
192.168.1.111:/home 514048 33280 480768 7% /home

# 如要設定 Client 端在下次開機時能自動掛載家目錄,請至 /etc/fstab 做設定:

Client:~ # vi /etc/fstab
192.168.1.111:/home  /home  nfs  defaults  0 0

 NIS Client 成功掛載後,您可以用剛剛那個 vivian 帳號再登入一次,這回應該就有家目錄可用了。

 另外也可嘗試從另一台主機對 NIS Client 做遠端連線,並輸入 NIS Server 上存在,但 NIS Client 端不存在的帳號做認證,看看能否成功登入。

15.2.6 設定 Slave NIS Server

 NIS Server 所扮演的角色非常重要,萬一掛點了,那平常透過 NIS 作認證來存取相關服務的功能就全部停擺,其影響可說是非同小可,所以為了防止有這種事情發生,架設一台以上的 Salve NIS 就有其必要性。


 目前我們的 Master NIS 為 Sever.paching.com.tw,那 Slave NIS 就假設為 Slave.paching.com.tw。首先請把 Master 的主機資訊紀錄於 Slave 的 /etc/hosts 檔:

Slave:~ # vi /etc/hosts
192.168.1.111 Server.paching.com.tw Server

 再來重複 15.2.3 小節的 2 ~ 6 步驟。如果都沒問題的話,就可以開始與 Master 做資料同步了:

Slave:~ # /usr/lib/yp/ypinit -s Server.paching.com.tw

 完成後,請檢查您的 /var/yp 目錄下,有沒有多一個 paching 的目錄,如果有的話,那代表 Master 的資料庫已經成功傳送至您 Slave 主機了。

 目前在我的環境裡,已經存在一台 Master 與一台 Slave NIS,不過先前的
NIS Client 尚未將 Slave 設定進去,那就趕快補上去吧:

Client:~ # vi /etc/hosts
192.168.1.111 Server.paching.com.tw Server
192.168.1.112 Slave.paching.com.tw  Slave

Client:~ # vi /etc/yp.conf
domain paching
ypserver Server.paching.com.tw
ypserver Slave.paching.com.tw ← 補上這筆設定即可。

 最後再重新啟動 ypbind :

Client:~ # rcypbind restart

 剩下的測試工作就留給各位囉 !

 

copyright © 2006 by barry ( 柏青哥 )