網路伺服器應用 Linux Server Andres, Wen-Yuan Liao Department of Computer Science and Engineering De Lin Institute of Technology andres@dlit.edu.tw http://www.cse.dlit.edu.tw/~andres
Chapter 15 簡易 NFS 伺服器設定
15.1 NFS 的由來與其功能 什麼是 NFS (Network File System) 由 Sun 公司所發展 透過網路,讓不同的機器、不同的作業系統、可以彼此分享檔案 其他的 Personal Computer 可以掛載 NFS server 所提供的檔案或目錄 NFS 使用一個稱為遠端程序呼叫(Remote Procedure Call, RPC)的協定來協助 NFS 本身的運作
RPC Remote Procedure Call 使用某些服務來進行遠端連線時,有些資訊需要管理與對應, 例如 主機的 IP 服務的 port number 對應到的服務之 PID
NFS 啟動的 RPC daemons NFS server 總共需要啟用至少兩個 daemons rpc.nfsd rpc.mountd 管理 Client 是否能夠登入主機的權限 rpc.mountd 管理 NFS 的檔案系統
15.2 需要的套件 portmap nfs-utils rpm -qa | grep nfs rpm -qa | grep portmap port 對應 ( mapping ) 的工作 在啟動任何一個 RPC server 之前,需啟動 portmap daemon nfs-utils rpc.nfsd 及 rpc.mountd daemons 其他相關 documents 與說明文件、執行檔等 rpm -qa | grep nfs rpm -qa | grep portmap
15.3 Server 端的設定 Server端 Client 端 確認Linux 主機是否可以支援 NFS 服務 設定使用者來源IP或主機名稱以及分享的目錄權限 啟動NFS Client 端 showmount程式檢查Linux Server是否有可以使用的 NFS 目錄 如果有就mount 在本機上面
設定流程 /etc/exports 關於權限問題 啟動服務 portmap, nfsd /usr/sbin/exportfs /var/lib/nfs/xtab:檢驗目錄 /usr/sbin/showmount 觀察啟動的 port number
1. /etc/exports 欲分享的目錄 主機名稱1或IP1(參數1,參數2) 主機名稱2或IP2(參數3,參數4) 參數 rw ro 可讀寫 ro 唯讀 no_root_squash 登入 NFS 主機使用分享目錄的使用者如果是 root,對於這個分享的目錄來說他就具有 root 的權限 root_squash 在登入 NFS 主機使用分享目錄的使用者如果是 root 時,這個使用者的權限將被壓縮成為匿名使用者,通常他的 UID 與 GID 都會變成 nobody 身份
/etc/exports (Cont.) 參數 all_squash anonuid anongid 不論登入 NFS 的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是 nobody anonuid 關於 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody,但是可以自行設定UID值,這個 UID 必需要存在於/etc/passwd當中 anongid 同 anonuid ,但是變成 group ID
Examples /tmp *(rw,no_root_squash) /home/public 192.168.0.*(rw) *(ro) /home/test 192.168.0.100(rw) /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)
2. 關於權限問題
3. 啟動服務 portmap, nfsd /etc/rc.d/init.d/portmap start port 111 的 sunrpc 服務 /etc/rc.d/init.d/nfs start /var/log/messages Nov 16 15:04:45 test portmap: portmap startup succeeded Nov 16 15:04:53 test nfs: Starting NFS services: succeeded Nov 16 15:04:54 test nfs: rpc.rquotad startup succeeded Nov 16 15:04:54 test nfs: rpc.mountd startup succeeded Nov 16 15:04:54 test nfs: rpc.nfsd startup succeeded
4. /usr/sbin/exportfs 修改/etc/exports檔案後不需要重新啟動 nfs exportfs [-aruv] 同步更新 /etc/exports及 /var/lib/nfs/xtab 的內容 u 卸載某一目錄 v 在 export 的時候,將分享的目錄顯示到螢幕上!
Example exportfs -rv exporting 192.168.0.100:/home/test exporting 192.168.0.*:/home/public exporting *.linux.org:/home/linux exporting *:/home/public exporting *:/tmp reexporting 192.168.0.100:/home/test to kernel exportfs -au
5. /var/lib/nfs/xtab:檢驗目錄 檢驗分享的目錄內容 vi /var/lib/nfs/xtab /home/test 192.168.0.100(rw,sync,wdelay,hide,secure,root_squash,no_all_squash,subtree_check,secure_locks,mapping=identity,anonuid=-2, anongid=-2)
6. /usr/sbin/showmount 看看有沒有可以 mount 的 showmount [-ae] hostnamea a e 在螢幕上顯示目前主機與 Client 所連上來的使用目錄狀態 e 顯示 hostname 這部機器的 /etc/exports 裡面的分享目錄
Example showmount -e localhost Export list for localhost: /tmp * /home/linux *.linux.org /home/public (everyone) /home/test 192.168.0.100
7. 觀察啟動的 port number netstat -utln
15.4 Client 端的設定 掛載遠端主機 掃瞄可以使用的 Server 目錄 在 Client 端建立 mount point showmount –e 192.168.1.2 在 Client 端建立 mount point mkdir –p /home/nfs/public 將遠端主機分享的目錄掛載進來 mount –t nfs 192.168.1.2:/home/public /home/nfs/public 可能發生的問題解決(被防火牆擋掉)
15.5 關機或結束時的注意事項 如果Server上面還有 Client 在連線,那麼要關機,可能得要等到數個鐘頭才能夠正常的關機成功 NFS Server關機之前,先關掉 portmap 與 nfs 先以 netstat -utlp 找出 PID ,然後以 kill 關掉
15.7 實際演練 Linux 主機為 192.168.1.100 將 /tmp 以可讀寫,並且不限制使用者身份的方式分享給所有 192.168.1.0/24 這個網域中的所有 Linux 工作站 開放 /home/nfs 這個目錄,使用的屬性為唯讀,可提供除了網域內的工作站外,向外亦提供資料內容 開放 /home/upload 做為 192.168.1.0/24 網域的資料上傳目錄,其中,/home/upload 的使用者及所屬群組為 nfs-upload 這個名字,他的 UID 與 GID 均為 210 將/home/andy 目錄僅分享給 192.168.1.2 主機,以提供該主機上面 andy 這個使用者來使用,也就是說, andy 在 192.168.1.100 及 192.168.1.2 均有帳號,且帳號均為 andy ,所以預計開放 /home/andy 給 andy 使用他的家目錄
1. 建立 /etc/exports vi /etc/exports /tmp 192.168.0.*(rw,no_root_squash) /home/nfs 192.168.0.*(ro) *(ro,all_squash) /home/upload 192.168.0.*(rw,all_squash,anonuid=210,anongid=210) /home/andy 192.168.0.50(rw)
2. 建立每個對應的目錄的實際 Linux 權限 1. /tmp ls -l drwxrwxrwt 6 root root 4096 Nov 16 09:07 tmp 2. /home/nfs mkdir -p /home/nfs chmod 755 -R /home/nfs
建立每個對應的目錄的實際 Linux 權限 3. /home/upload groupadd -g 210 nfs-upload useradd -g 210 -u 210 -M nfs-upload mkdir -p /home/upload chown -R nfs-upload:nfs-upload /home/upload 4. /home/andy ls -l /home drwx------ 3 andy andy 4096 Oct 28 13:37 andy
3.啟動 portmap 與 nfs 服務 /etc/rc.d/init.d/portmap start etc/rc.d/init.d/nfs start
在 192.168.0.100 client機器上面演練 1. 確認可用目錄 showmount -e 192.168.0.100 Export list for 192.168.0.100: /tmp 192.168.0.* /home/nfs (everyone) /home/upload 192.168.0.* /home/andy 192.168.0.50 2. 建立掛載點: mkdir -p /home/zzz/tmp mkdir -p /home/zzz/nfs mkdir -p /home/zzz/upload mkdir -p /home/zzz/andy
在 192.168.0.100 client機器上面演練 3. 實際掛載: su mount -t nfs 192.168.0.100:/tmp /home/zzz/tmp mount -t nfs 192.168.0.100:/home/nfs /home/zzz/nfs mount -t nfs 192.168.0.100:/home/upload /home/zzz/upload mount -t nfs 192.168.0.100:/home/andy /home/zzz/andy exit