歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

NFS和NIS

使用Te .net 之後您就無需再要在熒幕和鍵盤之間跑來跑去了。不過通過Telnet連接所使用的檔案系統都是遠端系統如果您要將資料回存在本地 電腦 上面就不那麽方便了。您有否想過將遠端的資料mount進本地的檔案系統中呢那麽NFS(NetworkFileSystem)就可以幫到你了 使用 Te.net 之後您就無需再要在熒幕和鍵盤之間跑來跑去了。不過通過 Telnet 連接所使用的檔案系統都是遠端系統如果您要將資料回存在本地電腦上面就不那麽方便了。您有否想過將遠端的資料 mount 進本地的檔案系統中呢那麽NFS(Network File System) 就可以幫到你了。 

另外使用 telnet 的時候您有否發覺到一個麻煩現在的 telnet 已經禁止使用 root 進行登錄了您如果要使用到 root 的權限您得使用其他帳號登錄然後用 su 切換到 root 的身份去。這樣在使用 telnet 之前您就必須為每一個使用者在每一台Linux機器上建立獨立的帳號。您是否希望好像 NT 那樣有一個中央的 DOMAIN 登錄資料庫呢有此念頭完全正確而好消息是您也可以在 Linux 上面使用 NIS (Network Information Service) 來做到 

我們只需指定某一台 Linux 機器做 NIS 伺服器而其他則可以做為 NIS 客戶使用。如果您的網路較大也可以考慮安裝 Slave NIS 伺服器來分擔 Master NIS 的工作。這裡我只說說 NIS Server 和 Client 的設定Slave NIS 則留給您自己去研究了。 

設定NFS

要設定 NFS關鍵是在 server 那端/etc/exports 這個檔案。在下建議您先輸入 man exports  


看一下如何設定這個檔案。如果這個檔案設定錯誤了以後重新開機的時候您可等得非常不耐煩了。下面是我這裡的設定 /tmp (rw,no_root_squash)
/home/public/sw *.siyongc.domain(ro,insecure)
/home/public/upload 192.168.0.22(rw,all_squash,anonuid=2043,anongid=2044)

 


這裡您可以看到我將 /tmp 這個目錄完全分享出去了在括號裡面的‘rw’就是 Read&Write 的意思而‘no_root_squash’呢則是允許讓使用者具備 root 的權限在某些特殊情況下例如使用 bootp 登錄的無磁碟工作站是相當好用的。因為預設情況下 NFS 會將 root 的身份 squash 為權限較低的 anonymous (nobody) 身份而其它身份則以 client 端機器上當時擁有的 User ID 和 Group ID 來建立檔案。 

第二行我將 /home/public/sw 這個目錄分享給以 siyongc.domain 這個 domain 做結尾的所有機器而無需使用 secure port (insecure)但只具備唯讀權限(ro)。 

第三行我將 /home/public/upload 這個目錄只分享給 192.168.0.22 這台機器且具備了讀和寫的權限(rw)但在 server 上寫入的檔案必須換成 anonymous 身份進行。但是其後的設定又將所有 anonymous 換成設定的 UID 和 GID這樣的安排是要確定所有寫入都按指定身份進行。 

如果您不知道或不想直接修改 /etc/exports 檔案您可以使用 netconf 然後選擇‘Exported file system (NFS)’來進行設定。 

然後就是重新啟動 nfsd  /etc/rc.d/init.d/nfs restart  


測試 NFS

一但 server 設定好了您只需在 client 端輸入 mount -t nfs redhat52:/tmp /mnt  


就可以將伺服器端的分享目錄 mount 進自己的機器了。 

通常最常見的錯誤信息是: mount: redhat52:/tmp, reason given by server: Permission denied 

 


造成這樣的原因多數是因為 /etc/exports 檔案沒設定好也就是在分享目錄後面的“( )”裡面的權限設定建議從簡單的設定測試起。或是從 /var/log/messages 這個檔案找找原因檢查一下被拒絕的原因例如可能會發現客戶主機的名稱不怎麽對那您就必須要確定 client 的機器名稱已經在 /etc/hosts 被“正確”的建立起來或者能夠通過 DNS 查詢得到(包括正反兩解)。 

在我的實踐中‘link_relative’有時候會造成‘Unknown keyword’這樣會引至 nfsd 無法正常啟動。所以當你修改過 NFS 設定最好用下面的 script 來確定 nfsd 能夠正常啟動才好關機 /etc/rc.d/init.d/nfs stop 
/etc/rc.d/init.d/nfs start  


確定沒有 failure 信息才好繼續。切記 

如果您碰到 rpc 相關的錯誤信息可能是您的 portmap 問題了您可以試試將之重新啟動: /etc/rc.d/init.d/portmap restart  


不過執行之後請重新啟動 nfsd 以及其它所有和 portmap 相關的服務(因為它們會因為 portmap 重啟而失效。 

另外當您升級 server 的 kernal 之後最好也將 client 的 kernal 一起同步。否則您會遇到 mount version 的警告管您還是可以成功的實現 nfs mount 。 

有時候您或許會突發興致給電腦改改名稱或轉換 domain這樣也容易造成 NFS 在啟動的時候延遲而且是延遲非常厲害的那種造成這樣的問題可能有多方面的如 hostsname 設定不正確或 DNS 那裡有誤。不過有一個地方您可以考慮的就是把下面這個檔案內容清一下 
/var/lib/nfs/rmtab 

如果還有問題先熟讀一下 exports 的 man page (man exports)更詳細的就請參考 NFS 的 HOWTO 文章。 

設定NIS

首先讓我們架設好中央的 NIS 伺服器吧。在設定之前您必須確定網路工作正常。 (以下步驟是本人實踐之作或許會有更好的方法的。如果您有更好的主意歡迎告訴網中人。) 

修改 /etc/inetd.conf確定下兩行的解(‘#’)給拿掉 time    stream  tcp     nowait  root    internal
time    dgram   udp     wait    root    internal

 



重新啟動 inetd /etc/rc.d/init.d/inet restart  


修改 /var/yp/securenets確定有這樣的敘述(請針對您的網路設定做適當修改) # Always allow aclearcase/" target="_blank" >ccess for localhost
255.0.0.0       127.0.0.0
# This line gives access to everybody. PLEASE ADJUST!
255.255.255.0   192.168.0.0

 



修改 /etc/ypserv.conf或許會有這樣的敘述(但不是很確定是否必須如此) dns: no
*             : passwd.byname    : port       : yes

 



然後輸入 rpcinfo -u localhost ypserv  


確定 YP server 是工作的您應該會看到這樣的信息 program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting

 


如果您沒看到那就執行 /etc/rc.d/init.d/ypserv start  


同時確定 setup --> System services --> 
[ * ] yppasswdd 和 [ * ] ypserv 。 

然後再重 rpcinfo 確定服務正確的跑起來了。 


建立這兩個檔案(如果它們不存在的話) touch /etc/gshadow /etc/netgroup  


設定 NIS 的domain name /bin/nisdomainname chen  


最好起一個有別於目前 domain 的名字這主要是出於安全考量。如果以後測試成功的話您可以將這行加進 /etc/rc.d/rc.local 裡面同時在 /etc/sysconfig/network 檔案裡面修改這行 NISDOMAIN=chen

 



然後初始設定 NIS 服務 /usr/lib/yp/ypinit -m  


記住要用 Ctrl + D 來結束不是用 Ctrl + C 哦切記切記 

留意一下有否錯誤有則根據信息做適當修改無則繼續。例如如果它回應說 "No rule to mak target xxxxxx, needed by yyyyyyyy."通常是在 /etc 下面找不到檔案而已用 touch /etc/xxxxxxx 就可以解決之。 


重新啟動 ypserver 和 yppasswdd /etc/rc.d/init.d/ypserv restart 
/etc/rc.d/init.d/yppasswdd restart  



然後是設定 NIS Client 。這裡是在 redhat62.siyongc.domain (192.168.0.22) 這台機器上面設定 
執行 netconf 然後選擇 ‘Network Information System (NIS) 再按 Enter進入後設定好 NIS domain(如chen要和 server 那端一致)和NIS server(如redhat52.siyongc.domain要確定該 server 在 /etc/hosts 裡面指定正確)。如果您的系統沒有 netconf 也不要緊可以自己修改後面提到的檔案(如 /etc/yp.conf 和 /etc/sysconfig/network)。 


接著執行 /bin/nisdomainname chen  



然後修改 /etc/yp.conf加進這行 domain chen 
ypserver redhat52.siyongc.domain

 



然後執行 setup 選擇‘System Services’確定 [*]ypbind 被選擇了。 


修改 /etc/passwd在末尾加入 +

 



然後啟動 ypbind: ypbind 
(或者/etc/rc.d/init.d/ypbind restart)  


測試 NIS

在客戶端上面以 root 身份登錄之後請輸入 ypcat passwd  


看看 server 端的帳號是否被列出來了。 

您也可以執行 getent passwd netman  


這裡的‘netman’是在 NIS 伺服器上面的一個使用者帳號名稱請改成您欲查詢的帳號。這個命令的作用是讓我們確定該帳號出現在 NIS 登錄之中。如果您看不到任何信息回應那麽好可能上面的步驟(包括伺服器和客戶端)還沒正確完成您則需要找出原因所在。 

如果您能得到信息回應例如 netman:x:1001:1001::/home/netman:/bin/bash

 


那是好消息否則您得從頭進行 debug 方好繼續。 

然後輸入 yppasswd netman 
Please enter root passwd: 
Please enter new passwd: 
Please retype password:  
(#注意: 最後兩行是設定 netman 的 NIS password。最好和原來的密碼一致因為原來的密碼也會被更改為 nis 的密碼。) 

其實上面這步不是必須的如果您能夠從另外的機器用 NIS帳號登錄就可以略過此步驟。 

接著請在本地主機上面建立起該使用者的家目錄 mkdir /home/netman 
chown netman:netman /home/netman  


當然了您也可以設定 Linux 在開機的時候通過 NFS 掛載到使用者原本的家目錄(tips修改 /etc/fstab)。但如何做您自己去嘗試吧這裡暫時賣個關子。 

如果該使用者需要使用到本機上面的郵件系統也請為之建立信箱 touch /var/spool/mail/netman 
chown netman:mail /var/spool/mail/netman 
chmod 660 /var/spool/mail/netman  


這樣您就可以使用 NIS 登錄了。 

當您有新的使用者增加之後欲加入 NIS 中的話您要先 cd /var/yp 然後執行 make 來更新 nis 資料。如果登錄失敗重新啟動 yppasswdd 服務然後用 yppasswd 來設定他/她的 NIS 密碼但要注意一點原使用者帳號必須已經設定過密碼管此時可以取而代之為新的密碼。然而有趣的是之後您再於原來主機上更改原帳號的密碼卻不會影響 NIS 的哦。 

如果還有問題您要檢查一下 server 端的 ypserv 和 yppasswdd以及 client 端的 ypbind 是否被啟動成功(tips執行rpcinfo -p尤其注意 yppasswdd)。其中portmap 是一個很重要的服務(有些系統會顯示為 rpcbind)在您執行 ypserv 和 yppasswdd 之前要確定它已經被啟動了。如果您需要重啟 portmap 要確定所有基於它的服務也要重新啟動。 

同時留意一下 client 和 server 的 NIS domain name 是否一致。必要時您或許要執行/usr/lib/yp/ypinit -m重新建立 ypserv 資料但這樣您就需要重新執行 yppasswd 來設定使用者的 NIS 密碼了。 

設定 NIS在 server 端牽涉的檔案比較多諸如 rpcportmapypnsswitch等等。您可以看一下關於 NIS 的HOWTO 文章或相關的 manuals。 

另有一篇和網友的討論文章我也覺得蠻值得參考一下的:

wkhuang  wrote in message
news:3aZSaR$[email protected]...
> ==> 在 "網中人"  的文章中提到:
> > 2000/05/28
> > 網中人今天對 NIS 系統再進行測試。對原來的文章做了小小修改主要是針對測
試過
> > 程中需要注意的地方增加了說明。希望讀者留意和共同參與測試。
> > http://pds.nchu.edu.tw/study_area/linux/linux_nfs.htm
>
> 不知您可否測試一下redhat6.2上yp之後,finger有個小bug。
> 比如同一台電腦是yp server, 也是yp client.

抱歉因為弟還的 RH6.2 還沒安裝或許過兩天再測試吧。

> 在建立yp帳號時,若依照你的方法,你的yp map database的來源,應該是在
> /etc下的一些檔案, 主要就是/etc/passwd,/etc/shadow, /etc/group,
/etc/gshadow

嗯的確如此修改 /var/yp/Makefile 裡面的參數可以改變預設內容。

> (其實這樣不太好,因為這樣root,和一些根本不該上yp的帳號都跟著進去了,建議去
> 改/var/yp/Makefile中更改YPPWDDIR = /etc改為某個另外的目錄,並將幾個
> 檔, 如passwd, shadow, group, gshadow拷過去,並只留你想讓他上yp的帳號和
> group)

您的建議非常好。不過在弟的 RH6.0 上面 (後面的測試相同)
 ypcat passwd 只會顯示 uid 500 以上的使用者不知道是否正常呢

>
> 我遇到的finger的bug(或是linux yp的bug,描述如下)
>
> 若yp map database的來源仍如網中人例中的/etc目錄
> 1. 首先先在/etc/passwd和/etc/shadow中建立一個使用者帳號user1,
> 試著把他的fullname 欄位設為空白,就是::

這可以用 useradd 來做。

> 2. 之後讓他進入yp的map database,若是已在yp server跑起來之後,應該是
> 到/var/yp下執行make以更新yp map database(這才是正確的)

對。如果是第一次可以執行 /usr/lib/yp/ypinit -m 。

> 3. 要砍掉原本/etc/passwd和/etc/shadow中的user1帳號記錄,確定local端
> 無此帳號,由YP Server取得。

只要執行過 make 就可以這樣做了。
但風險是假如日後增加使用者重新執行 make 的話
這個帳號在 NIS 中也會消失掉。

使用您剛才的建議(即另設 YPPWDDIR )
在技術上可以化解這個顧慮
但必須手工的修改 passwd 檔而不能單純的 copy 了。

> 4. 測試user1帳號確定可以登入

嗯在我的測試中還必須使用 yppasswd user1 設定密碼之後才行
而且原帳號也必須已經經過密碼設定。

> 5. 但在這台server兼client上執行finger user1,竟會造成Segmentation
>    fault (core dumped),跑不出正確結果

在我的測試中這個在 client 端執行會出現。
但在 sever 端則工作正常當然了我這台 server 並沒有作為其它 server 的
client 。
但測試過 ypbind 向自己(從 ypwhich 可以確定)也沒問題。

>
> 後來我依上述方式重建user1帳號,但是full name欄位這次填字進去。
> finger user1命令就正常了。

這個在我的測試中並沒有什麽影響和以前的測試一樣
client 端出現 Segmentation fault (core dumped)。

> 我試過solaris 2.6, 7, 沒這個問題.. :)
> 也試著抓gun finger 1.37.tar.gz要下來裝看看, 無奈功力不足, 就是
> make 不成
>
> 有否高手能指點一二呢

對不起小弟絕非高手。
對 NIS 也不熟許多測試還是看到您的回應才(會得)進行。

不過倒非常樂意有其它更有經驗的朋友一起來探討一下。

非常多謝您的 feedback

Copyright © Linux教程網 All Rights Reserved