280 likes | 420 Views
網路伺服器應用 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 公司所發展
E N D
網路伺服器應用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
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 • 管理 Client 是否能夠登入主機的權限 • rpc.mountd • 管理 NFS 的檔案系統
15.2 需要的套件 • 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端 • 確認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 • 唯讀 • no_root_squash • 登入 NFS 主機使用分享目錄的使用者如果是 root,對於這個分享的目錄來說他就具有 root 的權限 • root_squash • 在登入 NFS 主機使用分享目錄的使用者如果是 root 時,這個使用者的權限將被壓縮成為匿名使用者,通常他的 UID 與 GID 都會變成 nobody 身份
/etc/exports (Cont.) • 參數 • all_squash • 不論登入 NFS 的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是 nobody • anonuid • 關於 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody,但是可以自行設定UID值,這個 UID 必需要存在於/etc/passwd當中 • anongid • 同 anonuid ,但是變成 group ID
Examples • /tmp *(rw,no_root_squash) • /home/public192.168.0.*(rw) *(ro) • /home/public192.168.0.0/24(rw) *(ro) • /home/test192.168.0.100(rw) • /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)
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 重新掃瞄/etc/exports 檔案,並重新載入設定 • exportfs [-aruv] • a • 全部掛載(或卸載) /etc/exports 檔案內的設定 • r • 重新掛載 /etc/exports 裡面的設定 • 同步更新 /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 • 在螢幕上顯示目前主機與 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 目錄 • 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 /tmp192.168.0.*(rw,no_root_squash) /home/nfs192.168.0.*(ro) *(ro,all_squash) /home/upload192.168.0.*(rw,all_squash,anonuid=210,anongid=210) /home/andy192.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