全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1377
推到 Plurk!
推到 Facebook!

【轉貼】Linux 架站文件_ 2

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-21 23:42:22 IP:61.64.xxx.xxx 未訂閱
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content="text/html; charset=big5" http-equiv=Content-Type> <META content="MSHTML 5.00.3315.2870" name=GENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=#ffffff>
NFS 和 NIS


<!-------------------------- net function -----------------------> 發揮網路功能
當您的 Linux 主機安裝好並連上網路之後﹐那麼很自然會進行遠端操作吧。最常用的服務就是 telnet 了﹐它可以讓您從一台機器登錄到另外一台機器﹐然後完成所有遠端的作業。使用 telnet ﹐有點像“網路基礎”中的“Telecommunication”那裡所說的 remote control ﹐也就是﹐您可以利用其他機器鍵盤和熒幕遠端使用 Linux 主機。如果您使用 Windows 98 連接 Linux 的話﹕
按 ‘開始’--> ‘執行’--> 然後輸入﹕ telnet 192.168.100.23 (如果 dns 或 hosts 檔案設定好了﹐可以輸入機器名稱)﹐您就會看到一個登錄畫面了﹐不過﹐先別急著輸入您的大名和密碼﹐做做下面的動作﹕
  1. 連線 --> 中斷
  2. 連線 --> 遠端系統 --> Term Type:
  3. 選擇 DEC-VT100
  4. 按‘連線’

然後再進行登錄不遲。為什麼這樣做﹖我也不知道啦﹐本來我用以前的 Redhat 好好的﹐但後來換了 Redhat 6.0 之後﹐只要進入 vi 等文書編輯器﹐方向鍵就不聽使喚了﹐只有做了上面動作才可以。後來發現﹐只要在 /etc/bashrc 檔案裡面加下面這一行就解決了﹕
export TERM=vt100

然而﹐在 RH7.1 上面預設是將 telnet 功能關閉的﹐您得修改 /etc/xinetd.d/telnet 裡面的設定﹐設定 disable = no 才可以提供 telnet 服務。不過﹐系統之所以要關閉 telnet ﹐是因為它在網路上使用明碼(clear text) 方式傳送數據的緣故。為此﹐在 RH7.1 上面使用 ssh 服務來取代 telnet 服務﹐只是再提醒您一次﹕能用 ssh 就不要用 telnet ﹗
Okay﹐不管您使用 telnet 還是 ssh﹐所使用的檔案系統和資源都在遠端系統上面﹐如果您要將資料回存在本地電腦上面就不那麼方便了。除了用 ftp 之外﹐您有否想過將遠端的資料 mount 進本地的檔案系統中呢﹖那麼﹐NFS(Network File System) 就可以幫到你了。
另外﹐在網路環境中﹐理想的情況下是讓使用者能夠從網路上任何一台系統進行登錄﹐也只有這樣﹐您才能在登錄之後使用 telnet 服務。然而﹐為了讓使用者能夠在網路上登錄﹐您就必須為每一個使用者在所有 Linux 機器上建立獨立的帳號。是否太麻煩了呢﹖您是否希望 Linux 能像 NT 那樣有一個中央的 DOMAIN 登錄資料庫呢﹖有此念頭完全正確﹐而好消息是﹕您在 Linux 上面使用 NIS (Network Information Service) 就能做到﹗
或許﹐在一些大型的網路伺服器設計上﹐例如設定多台 email server 來進行 load balancing 服務﹐除了前端需要 DNS 和其它一些負載分流技術之外﹐在後端﹐也不能避免的碰到帳號同步和資料同步的需求。前端的技術我們留代日後慢慢探討﹐至於後端的技術﹐完全可以用 NFS 和 NIS 來做到。這也是我們這章的重點﹐假如您是一個 windows 用戶﹐在看完下面的文章後﹐肯定讓您震撼於 Linux 的強大網路功能而目瞪口呆﹗
先將我的網路環境說說吧(您可以參考上一章所介紹的環境)﹕
系統 主機名稱 IP 位址
伺服端 RedHat 7.1 rh71.siyongc.domain 192.168.100.23
客戶端 Mandrak 8.0 mdk.siyongc.domain 192.168.100.24
<!--------------------------- nfs ------------------------------>
設定 NFS
請先確定 nfs-utils 套件有裝起來(rpm -qa | grep nfs)﹐如果沒有﹐請用 rpm 安裝。假如需要在一開機的時候就啟動 nfs 服務的話﹐那就用 ntsysv 將 nfs 選起來吧。喜歡的話﹐把 nfslock 也一並開啟也無妨(請 man lockd)。
事實上﹐要設定 NFS 一點都不難﹐關鍵是 server 那端﹕/etc/exports 這個檔案。在真正動手設定之前﹐我建議您先看看它的 manual ﹕
man 5 exports

請小心設定這個檔﹐如果設定錯誤了﹐以後重新開機的時候您可就得非常不耐煩了。我是這樣設定﹕﹕
/tmp *(rw,no_root_squash)
/usr/src *.siyongc.domain(ro,insecure) 192.168.100.*(ro,insecure)
/var/ftp/pub/incoming 192.168.100.24(rw,all_squash,anonuid=50,anongid=50)

第一行﹐我將 /tmp 這個目錄完全分享出去了﹐不管客戶端來自哪裡。在括號裡面的‘rw’就是 Read&Write 的意思﹐而‘no_root_squash’呢﹐則是允許讓使用者具備 root 的權限﹐在某些特殊情況下﹐例如使用 bootp 登錄的無磁碟工作站﹐是相當好用的。因為預設情況下 NFS 會將 root 的身份 squash 為權限最低的 anonymous (nobody) 身份﹐而其它身份則以 client 端機器上當時擁有的 User ID 和 Group ID (指號碼的值)來建立檔案。注意哦﹐在進權限判斷的時候﹐ 不是以 UserName 來作為身份依據哦﹐UID 和 GID 的號碼最後必須對應到 server 端的 /etc/passwd ﹐而非 client 那邊的。
第二行﹐我將 /usr/src 這個目錄分享給以 siyongc.domain 這個 domain 做結尾或是以 192.168.100 開頭的所有機器﹐而無需使用 secure port (insecure)﹐但只具備唯讀權限(ro)。這裡﹐您要留意 " * " 的使用﹐在一些舊版本的 NFS 您不能用在 IP 上。不過﹐我這裡的測試卻是可行的。
第三行﹐我將 /var/ftp/pub/incoming 這個目錄只分享給 192.168.0.22 這台機器﹐且具備了讀和寫的權限(rw)﹐但在 server 上寫入的檔案﹐必須換成 anonymous 身份進行。但是其後的設定又將所有 anonymous 換成設定的 UID 和 GID (這裡都是 ftp)﹐這樣的安排是要確定所有存取都按指定身份進行。這個 incoming 目錄預設是不存在的﹐日後在討論到 FTP 服務設定時候會提到﹐但您可以自行用 mkdir 建立﹐而且為 group 和 others 加上 w 權限以及 sgid 和 sticky bit (3777)。
Tips﹕如果您不知道或不想直接修改 /etc/exports 檔案﹐您可以使用 netconf 然後選擇‘Exported file system (NFS)’來進行設定。
完成 exports 設定後﹐就是重新啟動 nfsd ﹕
service nfs stop service nfs start

哦﹐我不建議您用 restart 來進行﹐最好用 stop 和 start ﹐並且重複兩次﹐確定在第二次 stop 的時候﹐沒看到紅色的 [ FAILED ] 信息。因為我發現如果設定不正確﹐就算您執行 start ﹐也看到了四個 [ OK] ﹐但事實上未必真的成功跑起來﹐只能在 stop 的時候才能發現。另外一個原因是﹕如果設定錯誤﹐很可能導致 nfs 在啟動的時候要等非常久的時間﹐這是不勝其煩的﹐尤其在開機的時候。所以﹐當您每次修改完 nfs 的設定﹐一定要 stop 再 start 看看﹐沒問題才關機﹐否則下次開機可要培養耐性了。
Tips﹕如果您確定 /etc/exports 檔設定無誤﹐要重新讀取其設定﹐只需輸入如下命令就可以了﹕
exportfs -rv

假如有錯誤的話﹐應該會得到提示的。

為求確定﹐您最好執行﹕
showmount -e localhost

如果這個命令不能正確顯示您所 export 的內容﹐那就重新檢查設定步驟吧。 <!-------------------- nfs test ------------------------->
測試 NFS
一但 server 設定好之後﹐您只需在 client 端建立 mount point﹐然後用 mount 命令來掛載即可。不過﹐mount 之前最好用 showmount 來確定一下﹕
showmount -e rh71

Tips﹕假如在 server 那邊 showmount -e localhost 有結果﹐而在 client 這邊 showmount -e server 卻不成功﹐那可能是防火牆或是 xinetd 的問題(參考後面的說明)。當然﹐前提是要確定連線是通的啦﹐ping 一下就知道了。
當 showmount 能順利找到 server 的 exports 之後﹐那就可以放心 mount 了﹕
mkdir /mnt/nfs mount -t nfs -o bg,soft,intr rh71:/tmp /mnt/nfs

然後﹐就好像自己的硬碟一樣使用~~ ^_^ 要卸載它﹐用 umount 命令就可以。不過﹐如果沒有那些 -o 參數﹐然後在卸載之前您將 server 的 nfs 關閉了﹐或是網路連線出了問題﹐這時候再進行 umount 的話﹐很可能將您的機器‘定格’在那裡哦﹗﹗小心小心~~~ 所以﹐最好在 mount 的時候加上 soft 參數﹐並且在關閉 nfs 伺服器端之前﹐一定要先將所有的 client 所掛載的 mount point 進行 umount 才好進行。
Tips﹕如果 client 機器在啟動的時候能連上網路﹐您還可以直接將掛載寫進 /etc/fstab 檔中呢﹗
如果您遇到問題﹐通常最常見的錯誤信息是﹕
mount: xxxxx:/yyyyyyyy, reason given by server: Permission denied 

造成這樣的原因多數是 /etc/exports 檔案沒設定好的緣故﹐也就是在分享目錄後面的“( )”裡面的權限設定﹐建議從簡單的設定測試起﹐例如 "/tmp *(ro)"。或是從 /var/log/messages 這個檔案找找原因﹐檢查一下被拒絕的原因。
還有﹐您最好確定 client 和 server 的機器名稱已經在 /etc/hosts 被“正確”的設定起來﹐或者能夠通過 DNS 查詢得到(包括正反兩解)。
在我的實踐中﹐‘link_relative’有時候會造成‘Unknown keyword’﹐這樣會引至 nfsd 無法正常啟動﹐測試的時候請留意。
如果您碰到 rpc 相關的錯誤信息﹐例如﹕
mount: RPC: Unable to receive; errno = Connection refused

可能出現的問題很多﹐首先確定 portmap 服務是否有跑起來﹐可以用 rpcinfo 來檢查﹕
rpcinfo -p rh71
如果沒發現用 portmapper 的服務﹐您可以試試將之重新啟動﹕
service portmap restart

不過﹐執行之後﹐請重新啟動 nfs ﹐以及其它所有和 portmap 相關的服務(因為它們會因為 portmap 重啟而失效(最好用 rpcinfo 來確認)。
還有另外的情形﹐可能是 portmap (tcp & udp port 111) 的連線被防火牆擋掉了。或是 xinetd 那邊沒開放 portmap 服務﹐例如在 /etc/hosts.deny 中設定了 "ALL: ALL"﹐那您可以修改 /etc/hosts.allow ﹕
portmap: 192.168.100., .siyongc.domain

還有﹐就是可能 nfs 還沒起來﹐請確定服務能正確跑起來﹐可以用 stop 和 start 或是 rpcinfo 來判斷。
另外﹐當您升級 server 的 kernal 之後﹐最好也將 client 的 kernal 一起同步。否則您會遇到 mount version 的警告﹐不過﹐您還是可以成功的實現 nfs mount 這動作。
有時候﹐您或許會突發興致給電腦改改主機名稱或轉換 domain﹐這樣也容易造成 NFS 在啟動的時候延遲﹐而且是延遲得難以忍受﹗造成這樣的問題可能有多方面的﹐如 hostsname 設定不正確﹐或 DNS 那裡有誤。不過﹐有一個地方您可以考慮的﹐就是把這個檔案內容清一清﹕/var/lib/nfs/rmtab
如果還有問題﹐先熟讀一下 exports 的 man page (man 5 exports)﹐更詳細的就請參考 NFS 的 HOWTO 文件。 <!--------------------------- nis ------------------------------>
設定 NIS
設定 NIS 一點都不難~~ 嘿嘿﹐又來了~~~ ^_^
難的是當它不工作的時候卻不知道問題出在哪裡﹖哈哈﹐廢話~~ ^_^
好了﹐言歸正傳。我們只需指定某一台 Linux 機器做 NIS 伺服器﹐然後其他機器就老實的當 NIS 客戶就好了。如果您的網路較大﹐也可以考慮安裝 Slave NIS 伺服器來分擔 Master NIS 的工作。不過﹐我們這裡只說說 NIS Server 和 Client 的設定﹐Slave NIS 則留給您自己去研究了﹐若有成果的話﹐最好能回來和大家分享分享。
或許﹐您還聽說過 NIS 這個名稱﹐它是 NIS 增強版本﹐尤其在網路安全方面有所改善。不過﹐這裡不針對 NIS 說明了﹐有興趣的話﹐建議您讀一下 NIS HOWTO 文件。
首先﹐讓我們架設好中央的 NIS 伺服器吧。 (以下步驟是本人實踐之作﹐未必是最佳方法。如果您有更好的主意﹐歡迎 ?subject=nis setup">告訴網中人。)
  1. 在設定之前﹐您必須確定網路工作正常﹐例如連線﹑hosts﹑xined﹑諸如此類的﹐這應該不用多提了吧。
    再來確定 ypserv 套件有安裝起來(rpm -qa | grep yp)﹐否則用 rpm 安裝。
    執行 ntsysv 將 ypservyppasswdd 選擇起來﹐確定在開機的時候就能抓取到。

  2. 修改 /etc/xined.d 目錄下面的 timetime-udp 兩個檔案﹐確定 "disable = no" 。﹕

  3. 重新啟動 xinetd﹕
    service xinetd restart


  4. 修改 /var/yp/securenets﹐確定有這樣的敘述(請針對您的網路設定做適當修改)﹕
    # Always allow access for localhost
    255.0.0.0       127.0.0.0
    # This line gives access to everybody. PLEASE ADJUST!
    #0.0.0.0                0.0.0.0
    255.255.255.0   192.168.100.0
    


  5. 接下來﹐輸入﹕
    rpcinfo -u localhost ypserv

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

    如果您沒看到﹐那就執行﹕
    service ypserv start

    重複同樣的步驟﹐確定 yppasswdd 也是工作的。並且用 rpcinfo -p localhost 確定 ypserv 和 yppasswdd 均列其上。

  6. 接下來﹐建立這下面兩個檔案(如果它們不存在的話)﹕
    設定 NIS 的domain name﹕
    nisdomainname chen

    註﹕最好起一個有別於目前 domain 的名字﹐這主要是出於安全考量。 您可以將上面這行命令加進 /etc/rc.d/rc.local 裡面。 (不過我在實作上﹐發現 server 端不設定 nisdomainname 也可以的﹐不知道是否真的﹖)
    touch /etc/gshadow /etc/netgroup


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

    記住要用 Ctrl D 來結束﹐不是用 Ctrl C 哦﹐切記切記﹗
    然後輸入 yEnter
    註﹕每次您新增了帳號﹐或修改過 /etc/passwd 檔﹐都要重複這個動作。
    留意一下有否錯誤﹐有則根據信息做適當修改﹐無則繼續。例如﹐如果它回應說 "No rule to mak target xxxxxx, needed by yyyyyyyy."﹐通常是在 /etc 下面找不到檔案而已﹐用 touch /etc/xxxxxxx 就可以解決之。

  8. 重新啟動 ypserver 和 yppasswdd﹕
    service ypserv restart service yppasswdd restart



為求保險﹐最好用 rpcinfo 命令來確認一下。就這樣﹐NIS 的 server 就設定好了﹗很容易~~ 沒騙您吧﹖^_^ <!-------------------------- nis client ------------------------->
設定 NIS client
接下來﹐是設定 NIS Client 。這裡是在 mdk.siyongc.domain (192.168.100.24) 這台機器上面設定﹕
  1. 先確定 ypbindyp-tools 套件有安裝起來(rpm -qa | grep yp)﹐否則用 rpm 安裝。並執行 ntsysv﹐確定 ypbind 被選擇了。

  2. 再來執行﹕
    /bin/nisdomainname chen


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

    註﹕必須確定 client 和 server 的 nisdomain 一致。並修改 /etc/sysconfig/network 檔中的句子(不存在則自行建立)﹕
    NISDOMAIN=chen
    


  4. 修改 /etc/passwd﹐在末尾加入﹕
     ::::::        # 就是   號後帶六個小數點﹐之間沒空白鍵。
    


  5. 然後啟動 ypbind﹕
    service ypbind restart


如果順利這命令很快就完成﹐要不然要檢查 server 和 client 雙方的設定和連線了。 <!-------------------------- nis test ------------------------->
測試 NIS
接下來﹐就是檢驗勞動成果的時候了。先以 root 身份登入 server﹐並新增一個測試帳號﹕
useradd ypu1 passwd ypu1

然後轉到客戶端上面以 root 身份登錄﹐並輸入﹕
ypcat passwd

如果順利的話﹐ server 端 UID 大於 500 的帳號都會被列出來。您也可以執行下面命令來確定某帳號是否出現在 NIS 登錄之中﹕
getent passwd ypu1

假如您看不到任何信息回應﹐那麼﹐很可能是前面的步驟(包括伺服器和客戶端)還沒正確完成﹐您則需要找出原因所在。
如果您能得到信息回應﹐例如﹕
ypu1:$1$BzYQtUua$n68UwKiNVDjWS/UJGHFU4/:1001:1001::/home/ypu1:/bin/bash

那是好消息﹗否則您得從頭進行 debug 方好繼續。
當上一步驟過關之後﹐如果您覺得有需要﹐那您可以再修改帳號的 yp 密碼。但這步不是必須的﹐如果您能夠從另外的機器用 NIS 帳號登錄就可以略過此步驟(我建議您不必修改 yp 密碼)。﹕
yppasswd ypu1 Please enter root passwd: Please enter new passwd: Please retype password:

注意﹕第一行是 root 密碼﹐最後兩行是設定 yp 的 NIS password。最好和原來的密碼一致﹐因為原來的密碼也會被更改為 nis 的密碼﹐小心﹗(請參考後面的說明)
接著請在本地主機上面建立起該使用者的家目錄﹕
cp -a /etc/skel /home/ypu1 chown -R ypu1.ypu1 /home/ypu1

這樣﹐您就可以使用 NIS 登錄了﹗
當然﹐您也可以設定 Linux 在開機的時候通過 NFS 掛載到使用者原本的家目錄(tips﹕修改 /etc/fstab)。但如何做﹖您自己去嘗試吧﹐這裡暫時賣個關子。不過﹐下面我有更好的提議﹐請不要錯過了哦~~ ^_^
在使用 NIS 的時候﹐您需要注意的地方大致有如下這些﹕
  • 當您有新的使用者增加之後﹐或是執行過 usermod﹐或是修改過 /etc/passwd 檔﹐您要 cd /var/yp 然後執行 make (或重新執行 /usr/lib/yp/ypinit -m) 以更新 nis 資料。但這樣做的結果﹐會將 yp 密碼同步為系統的密碼。如果在 client 端以 root 身份執行 yppasswd 來重設 NIS 帳號的密碼的話﹐新帳號必須已經設定過系統密碼﹐但執行 yppasswd 之後﹐會將系統密碼同步為 yp 密碼。然而有趣的是﹐之後您再於 server 主機上更改原帳號的密碼﹐卻不會影響 NIS 的哦﹐不過 user 在 client 端卻只能用 yppasswd 而不能用 passwd 來修改密碼。
    但這似乎是個矛盾﹕修改了 yp 密碼會改變系統密碼﹐修改系統密碼卻不改變 yp 密碼﹐然後新增帳號後需要同步 nis 帳號﹐卻又把 yp 密碼變回系統密碼﹗真是有點亂~~ 所以﹐所有 NIS 帳號﹐最好避免修改系統密碼。

  • 如果登錄失敗﹐用 rpcinfo 來確定服務﹐可以先在 server 測試 localhost﹐然後到 client 上測試 server 。如果 server 可以而 client 不可以﹐那可能又是防火牆或 xinetd ﹐或是連線的問題了。

  • 其中﹐portmap 也是一個很重要的服務(有些系統會顯示為 rpcbind)﹐在您執行 ypserv 和 yppasswdd 之前﹐要確定它已經被啟動了。如果您需要重啟 portmap ﹐要確定所有基於它的服務也要重新啟動。

  • 同時留意一下 client 和 server 的 NIS domain name 是否一致。

  • 設定 NIS﹐在 server 端牽涉的檔案和服務比較多﹐諸如 rpc﹑portmap﹑yp﹑nsswitch 等等﹐請用 man 命令看看它們的用法﹐例如每個 manual 最後的 SE
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-17 17:56:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!