構建Linux上的NFS服務器

發表于:2007-05-26來源:作者:點擊數: 標簽:
NFS是網絡文件系統(Network File System)的簡稱,是分布式計算系統的一個組成部分,可實現在異種網絡上共享和裝配遠程文件系統。 NFS由Sun公司 開發 ,目前已經成為文件服務的一種標準(RFC1904,RFC1813)。其最大的功能就是可以通過網絡,讓不同操作系統
 NFS是網絡文件系統(Network File System)的簡稱,是分布式計算系統的一個組成部分,可實現在異種網絡上共享和裝配遠程文件系統。

NFS由Sun公司開發,目前已經成為文件服務的一種標準(RFC1904,RFC1813)。其最大的功能就是可以通過網絡,讓不同操作系統的計算機可以共享數據,所以也可以將它看做是一個文件服務器(見圖1所示)。NFS提供了除Samba之外,WindowsLinuxUnix與Linux之間通信的方法。

圖1 NFS Server和Client PC示意圖

    Client端PC可以掛載NFS Server所提供的目錄,并且掛載之后這個目錄看起來就像本地的磁盤分區一樣,可以使用cp、cd、mv、rm、df等磁盤相關的指令。NFS有屬于自己的協議與使用的端口號碼,但是在資料傳送或者其它相關訊息傳遞的時候,NFS Server使用的則是一個稱為遠程過程調用(Remote Procedure Call, RPC)的協議來協助NFS Server本身的運作。

    NFS本身的服務并沒有提供資料傳遞的協議,但是它卻能進行文件的共享。原因就是NFS使用到一些其它相關的傳輸協議,而這些傳輸的協議就是遠程過程調用(Remote Procedure Call, RPC)。NFS也可以視為一個RPC Server。需要說明的是,要掛載NFS Server的Client PC主機,也需要同步啟動遠程過程調用。這樣Server端和Client端才能根據遠程過程調用協議進行數據共享。

    使用NFS Server需要啟動至少兩個daemons(系統守護進程),一個用來管理Client PC是否可以登入的問題,另一個管理登入主機后的Client PC能夠使用的文件權限。說明如下:

◆ rpc.nfsd 它的主要的功能就是管理Client端PC登入主機的權限,其中包含這個登入者的ID的判別。

◆ rpc.mountd 它的主要功能是管理NFS的文件系統。當Client PC順利地通過rpc.nfsd而登入主機之后,在使用NFS Server提供的文件前,還必須取得使用權限的認證。程序會讀NFS的/etc/exports來比對Client端PC的權限。
    要激活NFS必須要有兩個系統服務才行,它們分別是portmap和nfs-utils。NFS其實可以被視為一個RPC Server,要激活任何一個RPC Server之前,需要做好端口的對應 (Mapping)工作才行。這個工作就是portmap這個服務所負責的。nfs-utils就是提供rpc.nfsd及rpc.mountd這兩個NFS daemons與其它相關說明文件等的系統服務。

NFS Server端的設定

    NFS Server端的設定,首先需要確認Linux主機是否可以支持NFS這項服務,然后再設定使用者的來源IP或主機名稱以及共享出去的目錄權限。

    那么,在Client PC怎么使用這個共享出來的目錄呢?首先以showmount檢查Linux Server是否有可以使用的 NFS目錄。如果有就將它mount在本機上面,這樣就可以使用NFS Server主機提供的資源了。

1.系統要求

    除了前面已經提到的兩個系統守護進程portmap與nfs-utils之外,內核(Kernel)版本最好高于2.2.18。此外,如果重新編譯過內核,一定要選擇支持NFS。

2.etc/exports

編輯 /etc/exports文件:

# vi /etc/exports
/usr/src/sys -maproot=daemon host2
/usr/ports -ro -network 192.168.1.0

    從上面這個例子中可以看出exports文件的格式,首先是定義要共享的文件目錄,必須使用絕對路徑,而不能使用符號連接。后面就是對這個目錄進行訪問限制的參數,用于保證安全性。第一行設置中,將/usr/sys/src目錄共享出去,但限制客戶機上的root用戶等價于本機上的daemon用戶,以避免客戶機上的root用戶擁有這個服務器上的root權力進行非法操作;此后的host2參數是主機名,這就限制只有host2才能共享這個/usr/sys/src目錄;第三行設置共享了/usr/ports目錄,但限制為只允許讀取,并且也只有192.168.1.0網絡上的計算機才能訪問這個共享目錄。

◆ rw 可擦寫的權限。

◆ ro 只讀的權限。

◆ no_root_squash 當登入NFS主機使用共享之目錄的使用者如果是root時,那么這個使用者的權限將被轉換成為匿名使用者,通常它的UID與GID都會變成nobody身份。

◆ root_squash 登入NFS主機使用共享目錄的使用者,如果是root,那么對于這個共享的目錄來說,它就具有 root的權限。

◆ all_squash 不論登入NFS使用者的身份為何,它的身份都會被轉換成為匿名使用者,通常也就是nobody。

◆ anonuid 通常為nobody,當然也可以自行設定這個UID的值,UID必須存在于/etc/passwd當中。

◆ anongid 同anonuid,但是變成group ID就是了。

◆ sync 資料同步寫入到內存與硬盤當中。

◆ async 資料會先暫存于內存當中,而非直接寫入硬盤。

3.激活服務portmap和nfsd

# /etc/rc.d/init.d/portmap  start
# /etc/rc.d/init.d/nfs  start  

    portmap激活之后,就會出現一個端口號為111的sunrpc的服務。至于nfs則會激活至少兩個以上的系統守護進程,然后就開始監聽Client PC的需求,用cat/var/log/messages可以看到操作是否成功:

#cat /var/log/messages
Nov 16 15:04:45 cao portmap: portmap startup suclearcase/" target="_blank" >cceeded
Nov 16 15:04:53 cao nfs: Starting NFS services:  succeeded
Nov 16 15:04:54 cao nfs: rpc.rquotad startup succeeded
Nov 16 15:04:54 cao nfs: rpc.mountd startup succeeded
Nov 16 15:04:54 cao nfs: rpc.nfsd startup succeeded
 
4.exportfs

    如果修改了/etc/exports這個文件后,不需要重新激活nfs,只要重新掃瞄一次/etc/exports的文件,并且重新將設定加載即可:

# exportfs [-aruv]

參數說明:

-a 全部掛載(或卸載) /etc/exports 文件內的設定 。

-r 重新掛載/etc/exports里的設定,此外,亦同步更新/etc/exports及/var/lib/nfs/xtab的內容。

-u 卸載某一目錄。

-v 在export的時候,將共享的目錄顯示到屏幕上。

5.檢驗目錄/var/lib/nfs/xtab

    檢驗所共享的目錄內容,查看/var/lib/nfs/xtab這個文件:

# vi /var/lib/nfs/xtab
/home/cao  192.168.0.1(rw,sync,wdelay,hide,secure,root_squash,
no_all_squash,subtree_check,secure_locks, mapping=identity,anonuid=-2,
anongid=-2)
 
    這就是/home/cao這個共享出去的目錄預設NFS里面的屬性。

6.showmount

# showmount [-ae] hostname
 
參數說明:

-a 在屏幕上顯示目前主機與Client所連上來的使用目錄狀態 。

-e 顯示hostname這部機器的/etc/exports里面的共享目錄。

當要掃瞄某一主機所提供的NFS共享的目錄時,就使用showmount -e IP(或主機名稱hostname)即可。

7.觀察激活的端口號

# netstat -utln 
Active Internet connections (only SERVERs)
Proto Recv-Q Send-Q Local Address     Foreign Address         State
tcp        0      0 0.0.0.0:111     0.0.0.0:*               LISTEN <== portmap
tcp        0      0 0.0.0.0:817     0.0.0.0:*               LISTEN <== rpc.xxxx 
tcp        0      0 0.0.0.0:1266    0.0.0.0:*               LISTEN <== rpc.xxxx
udp        0      0 0.0.0.0:2049    0.0.0.0:*           <== nfs 的 port
udp        0      0 0.0.0.0:814     0.0.0.0:*           <== rpc.xxxx
udp        0      0 0.0.0.0:1327     0.0.0.0:*           <== rpc.xxxx
udp        0      0 0.0.0.0:111      0.0.0.0:*           <== portmap
 
    nfs所開啟的端口是2049,其它的端口是RPC Server其它程序(例如rpc.mountd、rpc.rquotad、rpc.nfsd... )隨機產生的,也就是端口號不會是固定的,每次restart nfs都會得到不一樣的端口號。

8. 停止NFS服務

# /etc/rc.d/init.d/portmap stop
 
Client端PC的設定

1.掃瞄可以使用的NFS Server目錄

    在Client本地端建立mount point,使用mount將遠程主機共享的目錄掛載進來。假設主機名稱是www.cao.net,使用showmount查看NFS Server可以共享的目錄。然后將/home/public掛載在 /home/nfs/public下:

# showmount -e www.cao.net
Export list for localhost:
/tmp         *
/home/linux  *.cao.net
/home/public (everyone)
/home/cao   192.168.0.1
 
2.掛載/home/public目錄

    首先建立這個目錄,然后再利用mount指令來掛載/home/public目錄:

# mkdir -p /home/nfs/public 
# mount -t nfs CAO.linux.org:/home/public /home/nfs/public
 
掛載的格式:

# mount -t nfs hostname(orIP):/directory/mount/point
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda1   1904920   1235380    572776  68% /
/dev/hdb1   976344    115212    810736  13% /backup
www.cao.net:/home/public     1904920   1235376    572776  69% /home/nfs/public
 
     將資料掛載進來后,只要進入/home/nfs/public目錄,就等于到了www.cao.net那部NFS Server的/home/public 目錄中。

3.卸載使用umount

# umount /home/nfs/public
 
    關機時如果NFS Server上面還有Client聯機,建議NFS Server關機之前,要先關掉portmap與nfs這兩個系統服務。如果無法正確地將這兩個系統服務關掉,那么先以netstat -utlp找出PID,然后使用kill殺掉進程,這樣才能正常關機。

安全建議

     為了保障網絡安全,在使用NFS時最好結合TCP_Wrappers來限制使用范圍(如果只希望192.168.5.120 這個C地址,以及IP地址為192.168.5.123的主機掛載我的NFS Server):

# vi /etc/hosts.allow
portmap: 192.168.5.120/255.255.255.248 : allow
portmap: 192.168.5.123              : allow
# vi /etc/hosts.deny
portmap: ALL : deny
 
    除了使用TCP_Wrappers之外,還可以使用iptables防火墻、/etc/exports權限設定來保障安全。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97