<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 13.2 NFS Server 端的設定 ## 13.2 NFS Server 端的設定 既然要使用 NFS 的話,就得要安裝 NFS 所需要的軟件了!底下讓我們查詢一下系統有無安裝所需要的軟件, NFS 軟件的架構以及如何設定 NFS 服務器吧! ^\_^ - - - - - - ### 13.2.1 所需要的軟件 以 CentOS 6.x 為例的話,要設定好 NFS 服務器我們必須要有兩個軟件才行,分別是: - RPC 主程序:rpcbind 就如同剛剛提的到,我們的 NFS 其實可以被視為一個 RPC 服務,而要啟動任何一個 RPC 服務之前,我們都需要做好 port 的對應 (mapping) 的工作才行,這個工作其實就是『 rpcbind 』這個服務所負責的!也就是說, 在啟動任何一個 RPC 服務之前,我們都需要啟動 rpcbind 才行! (在 CentOS 5.x 以前這個軟件稱為 portmap,在 CentOS 6.x 之后才稱為 rpcbind 的!) - NFS 主程序:nfs-utils 就是提供 rpc.nfsd 及 rpc.mountd 這兩個 NFS daemons 與其他相關 documents 與說明文件、執行文件等的軟件!這個就是 NFS 服務所需要的主要軟件啦!一定要有喔! 好了,知道我們需要這兩個軟件之后,現在干嘛?趕快去你的系統先用 RPM 看一下有沒有這兩個軟件啦! 沒有的話趕快用 RPM 或 yum 去安裝喔!不然就玩不下去了! 例題:請問我的主機是以 RPM 為套件管理的 Linux distribution ,例如 Red Hat, CentOS 與 SuSE 等版本,那么我要如何知道我的主機里面是否已經安裝了 rpcbind 與 nfs 相關的軟件呢?答:簡單的使用『 rpm -qa | grep nfs 』與『 rpm -qa | grep rpcbind 』即可知道啦!如果沒有安裝的話, 在 CentOS 內可以使用『 [yum](http://linux.vbird.org/linux_server/0210network-secure.php#update) install nfs-utils 』來安裝! - - - - - - ### 13.2.2 NFS 的軟件結構 NFS 這個咚咚真的是很簡單,上面我們提到的 NFS 軟件中,配置文件只有一個,執行檔也不多, 記錄文件也三三兩兩而已吶!趕緊先來看一看吧! ^\_^ - 主要配置文件:/etc/exports 這個檔案就是 NFS 的主要配置文件了!不過,系統并沒有默認值,所以這個檔案『 不一定會存在』,你可能必須要使用 vim 主動的建立起這個檔案喔!我們等一下要談的設定也僅只是這個檔案而已吶! - NFS 文件系統維護指令:/usr/sbin/exportfs 這個是維護 NFS 分享資源的指令,我們可以利用這個指令重新分享 /etc/exports 變更的目錄資源、將 NFS Server 分享的目錄卸除或重新分享等等,這個指令是 NFS 系統里面相當重要的一個喔!至于指令的用法我們在底下會介紹。 - 分享資源的登錄檔:/var/lib/nfs/\*tab 在 NFS 服務器的登錄文件都放置到 /var/lib/nfs/ 目錄里面,在該目錄下有兩個比較重要的登錄檔, 一個是 etab ,主要記錄了 NFS 所分享出來的目錄的完整權限設定值;另一個 xtab 則記錄曾經鏈接到此 NFS 服務器的相關客戶端數據。 - 客戶端查詢服務器分享資源的指令:/usr/sbin/showmount 這是另一個重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 則主要用在 Client 端。這個 showmount 可以用來察看 NFS 分享出來的目錄資源喔! 就說不難吧!主要就是這幾個啰! - - - - - - ### 13.2.3 /etc/exports 配置文件的語法與參數 在開始 NFS 服務器的設定之前,你必須要了解的是,NFS 會直接使用到核心功能,所以你的核心必須要有支持 NFS 才行。萬一如果你的核心版本小于 2.2 版,或者重新自行編譯過核心的話,那么就得要很注意啦!因為你可能會忘記選擇 NFS 的核心支持啊! 還好,我們 CentOS 或者是其他版本的 Linux ,預設核心通常是支持 NFS 功能的,所以你只要確認你的核心版本是目前新的 2.6.x 版,并且使用你的 distribution 所提供的核心,那應該就不會有問題啦! **Tips:** 上面會提醒您這個問題的原因是,以前鳥哥都很喜歡自行編譯一個特別的核心,但是某次編譯核心時,卻忘記加上了 NFS 的核心功能,結果 NFS server 無論如何也搞不起來~最后才想到原來俺的核心是非正規的... ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) 至于 NFS 服務器的架設實在很簡單,你只要編輯好主要配置文件 /etc/exports 之后,先啟動 rpcbind (若已經啟動了,就不要重新啟動),然后再啟動 nfs ,你的 NFS 就成功了! 不過這樣的設定能否對客戶端生效?那就得要考慮你權限方面的設定能力了。廢話少說,我們就直接來看看那個 /etc/exports 應該如何設定吧!某些 distributions 并不會主動提供 /etc/exports 檔案,所以請你自行手動建立它吧。 ``` [root@www ~]# vim /etc/exports /tmp 192.168.100.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync) [分享目錄] [第一部主機(權限)] [可用主機名] [可用通配符] ``` 你看看,這個配置文件有夠簡單吧!每一行最前面是要分享出來的目錄,注意喔!是以目錄為單位啊! 然后這個目錄可以依照不同的權限分享給不同的主機,像鳥哥上面的例子說明是: 要將 /tmp 分別分享給三個不同的主機或網域的意思。記得主機后面以小括號 () 設計權限參數, 若權限參數不止一個時,則以逗號 (,) 分開。且主機名與小括號是連在一起的喔!在這個檔案內也可以利用 # 來批注呢。 至于主機名的設定主要有幾個方式: - 可以使用完整的 IP 或者是網域,例如 192.168.100.10 或 192.168.100.0/24 ,或 192.168.100.0/255.255.255.0 都可以接受! - 也可以使用主機名,但這個主機名必須要在 /etc/hosts 內,或可使用 DNS 找到該名稱才行啊!反正重點是可找到 IP 就是了。如果是主機名的話,那么他可以支持通配符,例如 \* 或 ? 均可接受。 至于權限方面 (就是小括號內的參數) 常見的參數則有: 參數值 內容說明rw ro 該目錄分享的權限是可擦寫 (read-write) 或只讀 (read-only),但最終能不能讀寫,還是與文件系統的 rwx 及身份有關。sync async sync 代表數據會同步寫入到內存與硬盤中,async 則代表數據會先暫存于內存當中,而非直接寫入硬盤!no\_root\_squash root\_squash 客戶端使用 NFS 文件系統的賬號若為 root 時,系統該如何判斷這個賬號的身份?預設的情況下,客戶端 root 的身份會由 root\_squash 的設定壓縮成 nfsnobody, 如此對服務器的系統會較有保障。但如果你想要開放客戶端使用 root 身份來操作服務器的文件系統,那么這里就得要開 no\_root\_squash 才行!all\_squash 不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名用戶,通常也就是 nobody(nfsnobody) 啦!anonuid anongid anon 意指 anonymous (匿名者) 前面關于 \*\_squash 提到的匿名用戶的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在于你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是群組的 GID 啰。這是幾個比較常見的權限參數,如果你有興趣玩其他的參數時,請自行 man exports 可以發現很多有趣的數據。 接下來我們利用上述的幾個參數來實際思考一下幾個有趣的小習題: 例題一:讓 root 保有 root 的權限我想將 /tmp 分享出去給大家使用,由于這個目錄本來就是大家都可以讀寫的,因此想讓所有的人都可以存取。此外,我要讓 root 寫入的檔案還是具有 root 的權限,那如何設計配置文件?答: ``` [root@www ~]# vim /etc/exports # 任何人都可以用我的 /tmp ,用通配符來處理主機名,重點在 no_root_squash /tmp *(rw,no_root_squash) ``` 主機名可以使用通配符,上頭表示無論來自哪里都可以使用我的 /tmp 這個目錄。 再次提醒,『 *(rw,no\_root\_squash) 』這一串設定值中間是沒有空格符的喔!而 /tmp 與* (rw,no\_root\_squash) 則是有空格符來隔開的!特別注意到那個 no\_root\_squash 的功能!在這個例子中,如果你是客戶端,而且你是以 root 的身份登入你的 Linux 主機,那么當你 mount 上我這部主機的 /tmp 之后,你在該 mount 的目錄當中,將具有『root 的權限!』 例題二:同一目錄針對不同范圍開放不同權限我要將一個公共的目錄 /home/public 公開出去,但是只有限定我的局域網絡 192.168.100.0/24 這個網域且加入 vbirdgroup (第一章的例題建立的群組) 的用戶才能夠讀寫,其他來源則只能讀取。答: ``` [root@www ~]# mkdir /home/public [root@www ~]# setfacl -m g:vbirdgroup:rwx /home/public [root@www ~]# vim /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.100.0/24(rw) *(ro) # 繼續累加在后面,注意,我有將主機與網域分為兩段 (用空白隔開) 喔! ``` 上面的例子說的是,當我的 IP 是在 192.168.100.0/24 這個網段的時候,那么當我在 Client 端掛載了 Server 端的 /home/public 后,針對這個被我掛載的目錄我就具有可以讀寫的權限~ 至于如果我不是在這個網段之內,那么這個目錄的數據我就僅能讀取而已,亦即為只讀的屬性啦! 需要注意的是,通配符僅能用在主機名的分辨上面,IP 或網段就只能用 192.168.100.0/24 的狀況, 不可以使用 192.168.100.\* 喔! 例題三:僅給某個單一主機使用的目錄設定我要將一個私人的目錄 /home/test 開放給 192.168.100.10 這個 Client 端的機器來使用時,該如何設定? 假設使用者的身份是 dmtsai 才具有完整的權限時。答: ``` [root@www ~]# mkdir /home/test [root@www ~]# setfacl -m u:dmtsai:rwx /home/test [root@www ~]# vim /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.100.0/24(rw) *(ro) /home/test 192.168.100.10(rw) # 只要設定 IP 正確即可! ``` 這樣就設定完成了!而且,只有 192.168.100.10 這部機器才能對 /home/test 這個目錄進行存取喔! 例題四:開放匿名登錄的情況我要讓 \*.centos.vbird 網域的主機,登入我的 NFS 主機時,可以存取 /home/linux ,但是他們存數據的時候,我希望他們的 UID 與 GID 都變成 45 這個身份的使用者,假設我 NFS 服務器上的 UID 45 與 GID 45 的用戶/組名為 nfsanon。答: ``` [root@www ~]# groupadd -g 45 nfsanon [root@www ~]# useradd -u 45 -g nfsanon nfsanon [root@www ~]# mkdir /home/linux [root@www ~]# setfacl -m u:nfsanon:rwx /home/linux [root@www ~]# vim /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.100.0/24(rw) *(ro) /home/test 192.168.100.10(rw) /home/linux *.centos.vbird(rw,all_squash,anonuid=45,anongid=45) # 如果要開放匿名,那么重點是 all_squash,并且要配合 anonuid 喔! ``` 特別注意到那個 all\_squash 與 anonuid, anongid 的功能!如此一來,當 clientlinux.centos.vbird 登入這部 NFS 主機,并且在 /home/linux 寫入檔案時,該檔案的所有人與所有群組,就會變成 /etc/passwd 里面對應的 UID 為 45 的那個身份的使用者了! 上面四個案例的權限如果依照[13.1.4 存取設定權限](#What_NFS_perm)來思考的話, 那么權限會是什么情況呢?讓我們來檢查一下: - 客戶端與服務器端具有相同的 UID 與賬號: 假設我在 192.168.100.10 登入這部 NFS (IP 假設為 192.168.100.254) 服務器,并且我在 192.168.100.10 的賬號為 dmtsai 這個身份,同時,在這部 NFS 上面也有 dmtsai 這個賬號, 并具有相同的 UID ,果真如此的話,那么: 1. 由于 192.168.100.254 這部 NFS 服務器的 /tmp 權限為 -rwxrwxrwt ,所以我 (dmtsai 在 192.168.100.10 上面) 在 /tmp 底下具有存取的權限,并且寫入的檔案所有人為 dmtsai ; 2. 在 /home/public 當中,由于我有讀寫的權限,所以如果在 /home/public 這個目錄的權限對于 dmtsai 有開放寫入的話,那么我就可以讀寫,并且我寫入的檔案所有人是 dmtsai 。但是萬一 /home/public 對于 dmtsai 這個使用者并沒有開放可以寫入的權限時, 那么我還是沒有辦法寫入檔案喔!這點請特別留意! 3. 在 /home/test 當中,我的權限與 /home/public 相同的狀態!還需要 NFS 服務器的 /home/test 對于 dmtsai 有開放權限; 4. 在 /home/linux 當中就比較麻煩!因為不論你是何種 user ,你的身份一定會被變成 UID=45 這個賬號!所以,這個目錄就必需要針對 UID = 45 的那個賬號名稱,修改他的權限才行! - 客戶端與服務器端的賬號并未相同時: 假如我在 192.168.100.10 的身份為 vbird (uid 為 600),但是 192.168.100.254 這部 NFS 主機卻沒有 uid=600 的賬號時,情況會變成怎樣呢? 1. 我在 /tmp 底下還是可以寫入,只是該檔案的權限會保持為 UID=600 ,因此服務器端看起來就會怪怪的, 因為找不到 UID=600 這個賬號的顯示,故檔案擁有者會填上 600 呦! 2. 我在 /home/public 里面是否可以寫入,還需要視 /home/public 的權限而定,不過,由于沒有加上 all\_squash 的參數, 因此在該目錄下會保留客戶端的使用者 UID,同上一點所示。 3. /home/test 的觀點與 /home/public 相同! 4. /home/linux 底下,我的身份就被變成 UID = 45 那個使用者就是了! - 當客戶端的身份為 root 時: 假如我在 192.168.100.10 的身份為 root 呢? root 這個賬號每個系統都會有呀!權限變成怎樣呢? 1. 我在 /tmp 里面可以寫入,并且由于 no\_root\_squash 的參數,改變了預設的 root\_squash 設定值,所以在 /tmp 寫入的檔案所有人為 root 喔! 2. 我在 /home/public 底下的身份還是被壓縮成為 nobody 了!因為默認屬性里面都具有 root\_squash 呢!所以,如果 /home/public 有針對 nobody 開放寫入權限時,那么我就可以寫入,但是檔案所有人變成 nobody 就是了! 3. /home/test 與 /home/public 相同; 4. /home/linux 的情況中,我 root 的身份也被壓縮成為 UID = 45 的那個使用者了! - - - - - - 這樣的權限講解之后,你可以了解了嗎?這里是最重要的地方,如果這一關通過了,底下的咚咚就沒有問題啦! ^\_^! 在你將本文讀完后,最好還是回到[13.1.4 NFS 的檔案訪問權限](#What_NFS_perm)好好的瞧一瞧, 才能解決 NFS 的問題喔! - - - - - - ### 13.2.4 啟動 NFS 配置文件搞定后,當然要開始來啟動才行啊!而前面我們也提到過,NFS 的啟動還需要 rpcbind 的協助才行啊! 所以趕緊來啟動吧! ``` [root@www ~]# /etc/init.d/rpcbind start # 如果 rpcbind 本來就已經在執行了,那就不需要啟動啊! [root@www ~]# /etc/init.d/nfs start # 有時候某些 distributions 可能會出現如下的警告訊息: exportfs: /etc/exports [3]: No 'sync' or 'async' option specified for export "192.168.100.10:/home/test". Assuming default behaviour ('sync'). # 上面的警告訊息僅是在告知因為我們沒有指定 sync 或 async 的參數, # 則 NFS 將默認會使用 sync 的信息而已。你可以不理他,也可以加入 /etc/exports。 [root@www ~]# /etc/init.d/nfslock start [root@www ~]# chkconfig rpcbind on [root@www ~]# chkconfig nfs on [root@www ~]# chkconfig nfslock on ``` 那個 rpcbind 根本就不需要設定!只要直接啟動它就可以啦!啟動之后,會出現一個 port 111 的 sunrpc 的服務,那就是 rpcbind 啦!至于 nfs 則會啟動至少兩個以上的 daemon 出現!然后就開始在監聽 Client 端的需求啦!你必須要很注意屏幕上面的輸出信息, 因為如果配置文件寫錯的話,屏幕上會顯示出錯誤的地方喔! 此外,如果你想要增加一些 NFS 服務器的數據一致性功能時,可能需要用到 rpc.lockd 及 rpc.statd 等 RPC 服務, 那么或許你可以增加一個服務,那就是 nfslock 啰!啟動之后,請趕快到 /var/log/messages 里面看看有沒有被正確的啟動呢? ``` [root@www ~]# tail /var/log/messages Jul 27 17:10:39 www kernel: Installing knfsd (copyright (C) 1996 okir@monad.swb.de). Jul 27 17:10:54 www kernel: NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory Jul 27 17:10:54 www kernel: NFSD: starting 90-second grace period Jul 27 17:11:32 www rpc.statd[3689]: Version 1.2.2 starting ``` 在確認啟動沒有問題之后,接下來我們來瞧一瞧那么 NFS 到底開了哪些埠口? ``` [root@www ~]# netstat -tulnp| grep -E '(rpc|nfs)' Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:875 0.0.0.0:* LISTEN 3631/rpc.rquotad tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3601/rpcbind tcp 0 0 0.0.0.0:48470 0.0.0.0:* LISTEN 3647/rpc.mountd tcp 0 0 0.0.0.0:59967 0.0.0.0:* LISTEN 3689/rpc.statd tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - udp 0 0 0.0.0.0:875 0.0.0.0:* 3631/rpc.rquotad udp 0 0 0.0.0.0:111 0.0.0.0:* 3601/rpcbind udp 0 0 0.0.0.0:897 0.0.0.0:* 3689/rpc.statd udp 0 0 0.0.0.0:46611 0.0.0.0:* 3647/rpc.mountd udp 0 0 0.0.0.0:808 0.0.0.0:* 3601/rpcbind udp 0 0 0.0.0.0:46011 0.0.0.0:* 3689/rpc.statd ``` 注意看到上面喔!總共產生了好多的 port 喔!真是可怕!不過主要的埠口是: - rpcbind 啟動的 port 在 111 ,同時啟動在 UDP 與 TCP; - nfs 本身的服務啟動在 port 2049 上頭! - 其他 rpc.\* 服務啟動的 port 則是隨機產生的,因此需向 port 111 注冊。 好了,那我怎么知道每個 RPC 服務的注冊狀況?沒關系,你可以使用 rpcinfo 來觀察的。 ``` [root@www ~]# rpcinfo -p [IP|hostname] [root@www ~]# rpcinfo -t|-u IP|hostname 程序名稱 選項與參數: -p :針對某 IP (未寫則預設為本機) 顯示出所有的 port 與 porgram 的信息; -t :針對某主機的某支程序檢查其 TCP 封包所在的軟件版本; -u :針對某主機的某支程序檢查其 UDP 封包所在的軟件版本; # 1\. 顯示出目前這部主機的 RPC 狀態 [root@www ~]# rpcinfo -p localhost program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 875 rquotad 100011 2 udp 875 rquotad 100011 1 tcp 875 rquotad 100011 2 tcp 875 rquotad 100003 2 tcp 2049 nfs ....(底下省略).... # 程序代號 NFS版本 封包類型 埠口 服務名稱 # 2\. 針對 nfs 這個程序檢查其相關的軟件版本信息 (僅察看 TCP 封包) [root@www ~]# rpcinfo -t localhost nfs program 100003 version 2 ready and waiting program 100003 version 3 ready and waiting program 100003 version 4 ready and waiting # 可發現提供 nfs 的版本共有三種,分別是 2, 3, 4 版呦! ``` 仔細瞧瞧,上面出現的信息當中除了程序名稱與埠口的對應可以與 netstat -tlunp 輸出的結果作比對之外,還需要注意到 NFS 的版本支持!新的 NFS 版本傳輸速度較快,由上表看起來,我們的 NFS 至少支持到第 4 版,應該還算合理啦! ^\_^! 如果你的 rpcinfo 無法輸出,那就表示注冊的數據有問題啦!可能需要重新啟動 rpcbind 與 nfs 喔! - - - - - - ### 13.2.5 NFS 的聯機觀察 在你的 NFS 服務器設定妥當之后,我們可以在 server 端先自我測試一下是否可以聯機喔!就是利用 showmount 這個指令來查閱! ``` [root@www ~]# showmount [-ae] [hostname|IP] 選項與參數: -a :顯示目前主機與客戶端的 NFS 聯機分享的狀態; -e :顯示某部主機的 /etc/exports 所分享的目錄數據。 # 1\. 請顯示出剛剛我們所設定好的相關 exports 分享目錄信息 [root@www ~]# showmount -e localhost Export list for localhost: /tmp * /home/linux *.centos.vbird /home/test 192.168.100.10 /home/public (everyone) ``` 很簡單吧!所以,當你要掃瞄某一部主機他提供的 NFS 分享的目錄時,就使用 showmount -e IP (或hostname) 即可!非常的方便吧!這也是 NFS client 端最常用的指令喔! 另外, NFS 關于目錄權限設定的數據非常之多!在 /etc/exports 只是比較特別的權限參數而已,還有很多預設參數呢! 這些預設參數在哪?我們可以檢查一下 /var/lib/nfs/etab 就知道了! ``` [root@www ~]# tail /var/lib/nfs/etab /home/public 192.168.100.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash, no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534) # 上面是同一行,可以看出除了 rw, sync, root_squash 等等, # 其實還有 anonuid 及 anongid 等等的設定! ``` 上面僅僅是一個小范例,透過分析 anonuid=65534 對比 /etc/passwd 后,會發現 CentOS 出現的是 nfsnobody 啦!這個賬號在不同的版本都可能會不一樣的!另外,如果有其他客戶端掛載了你的 NFS 文件系統時,那么該客戶端與文件系統信息就會被記錄到 /var/lib/nfs/xtab 里頭去的! 另外,如果你想要重新處理 /etc/exports 檔案,當重新設定完 /etc/exports 后需不需要重新啟動 nfs ? 不需要啦!如果重新啟動 nfs 的話,要得再向 RPC 注冊!很麻煩~這個時候我們可以透過 exportfs 這個指令來幫忙喔! ``` [root@www ~]# exportfs [-aruv] 選項與參數: -a :全部掛載(或卸除) /etc/exports 檔案內的設定 -r :重新掛載 /etc/exports 里面的設定,此外,亦同步更新 /etc/exports 及 /var/lib/nfs/xtab 的內容! -u :卸除某一目錄 -v :在 export 的時候,將分享的目錄顯示到屏幕上! # 1\. 重新掛載一次 /etc/exports 的設定 [root@www ~]# exportfs -arv exporting 192.168.100.10:/home/test exporting 192.168.100.0/24:/home/public exporting *.centos.vbird:/home/linux exporting *:/home/public exporting *:/tmp # 2\. 將已經分享的 NFS 目錄資源,通通都卸除 [root@www ~]# exportfs -auv # 這時如果你再使用 showmount -e localhost 就會看不到任何資源了! ``` 要熟悉一下這個指令的用法喔!這樣一來,就可以直接重新 exportfs 我們的記錄在 /etc/exports 的目錄數據啰!但是要特別留意,如果你僅有處理配置文件,但并沒有相對應的目錄 (/home/public 等目錄) 可以提供使用啊! 那可能會出現一些警告訊息喔!所以記得要建立分享的目錄才對! - - - - - - ### 13.2.6 NFS 的安全性 在 NFS 的安全性上面,有些地方是你必須要知道的喔!底下我們分別來談一談: - 防火墻的設定問題與解決方案: 一般來說, NFS 的服務僅會對內部網域開放,不會對因特網開放的。然而,如果你有特殊需求的話, 那么也可能會跨不同網域就是了。但是,NFS 的防火墻特別難搞,為什么呢?因為除了固定的 port 111, 2049 之外, 還有很多不固定的埠口是由 rpc.mountd, rpc.rquotad 等服務所開啟的,所以,你的 iptables 就很難設定規則! 那怎辦?難道整個防火墻機制都要取消才可以? 為了解決這個問題, CentOS 6.x 有提供一個固定特定 NFS 服務的埠口配置文件,那就是 /etc/sysconfig/nfs 啦! 你在這個檔案里面就能夠指定特定的埠口,這樣每次啟動 nfs 時,相關服務啟動的埠口就會固定,如此一來, 我們就能夠設定正確的防火墻啰!這個配置文件內容很多,絕大部分的數據你都不要去更改,只要改跟 PORT 這個關鍵詞有關的數據即可。 那么需要更改的 rpc 服務有哪些呢?主要有 mountd, rquotad, nlockmgr 這三個,所以你應該要這樣改: ``` [root@www ~]# vim /etc/sysconfig/nfs RQUOTAD_PORT=1001 <==約在 13 行左右 LOCKD_TCPPORT=30001 <==約在 21 行左右 LOCKD_UDPPORT=30001 <==約在 23 行左右 MOUNTD_PORT=1002 <==約在 41 行左右 # 記得設定值最左邊的批注服務要拿掉之外,埠口的值你也可以自行決定。 [root@www ~]# /etc/init.d/nfs restart [root@www ~]# rpcinfo -p | grep -E '(rquota|mount|nlock)' 100011 2 udp 1001 rquotad 100011 2 tcp 1001 rquotad 100021 4 udp 30001 nlockmgr 100021 4 tcp 30001 nlockmgr 100005 3 udp 1002 mountd 100005 3 tcp 1002 mountd # 上述的輸出數據已經被鳥哥匯整過了,沒用到的埠口先挪掉了啦! ``` 很可怕吧!如果想要開放 NFS 給別的網域的朋友使用,又不想要讓對方擁有其他服務的登入功能, 那你的防火墻就得要開放上述的十個埠口啦!有夠麻煩的~假設你想要開放 120.114.140.0/24 這個網域的人能夠使用你這部服務器的 NFS 的資源,且假設你已經使用[第九章提供的防火墻腳本](http://linux.vbird.org/linux_server/0250simple_firewall.php), 那么你還得要這樣做才能夠針對該網域放行喔: ``` [root@www ~]# vim /usr/local/virus/iptables/iptables.allow iptables -A INPUT -i $EXTIF -p tcp -s 120.114.140.0/24 -m multiport \ --dport 111,2049,1001,1002,30001 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 120.114.140.0/24 -m multiport \ --dport 111,2049,1001,1002,30001 -j ACCEPT [root@www ~]# /usr/local/virus/iptables/iptables.rule # 總是要重新執行這樣防火墻規則才會順利的生效啊!別忘記!別忘記! ``` - 使用 /etc/exports 設定更安全的權限: 這就牽涉到你的邏輯思考了!怎么設定都沒有關系,但是在『便利』與『安全』之間,要找到你的平衡點吶!善用 root\_squash 及 all\_squash 等功能,再利用 anonuid 等等的設定來規范登入你主機的用戶身份!應該還是有辦法提供一個較為安全的 NFS 服務器的! 另外,當然啦,你的 NFS 服務器的文件系統之權限設定也需要很留意! 不要隨便設定成為 -rwxrwxrwx ,這樣會造成你的系統『很大的困擾』的啊! - 更安全的 partition 規劃: 如果你的工作環境中,具有多部的 Linux 主機,并且預計彼此分享出目錄時,那么在安裝 Linux 的時候,最好就可以規劃出一塊 partition 作為預留之用。因為『 NFS 可以針對目錄來分享』,因此,你可以將預留的 partition 掛載在任何一個掛載點,再將該掛載點 (就是目錄啦!)由 /etc/exports 的設定中分享出去,那么整個工作環境中的其他 Linux 主機就可以使用該 NFS 服務器的那塊預留的 partition 了!所以,在主機的規劃上面,主要需要留意的只有 partition 而已。此外,由于分享的 partition 可能較容易被入侵,最好可以針對該 partition 設定比較嚴格的參數在 /etc/fstab 當中喔! 此外,如果你的分割做的不夠好,舉例來說,很多人都喜歡使用懶人分割法,亦即整個系統中只有一個根目錄的 partition 而已。這樣做會有什么問題呢?假設你分享的是 /home 這個給一般用戶的目錄好了,有些用戶覺得這個 NFS 的磁盤太好用了, 結果使用者就將他的一大堆暫存數據通通塞進這個 NFS 磁盤中。想一想,如果整個根目錄就因為這個 /home 被塞爆了, 那么你的系統將會造成無法讀寫的困擾。因此,一個良好的分割規劃,或者是利用磁盤配額來限制還是很重要的工作。 - NFS 服務器關機前的注意事項: 需要注意的是,由于 NFS 使用的這個 RPC 服務,當客戶端連上服務器時,那么你的服務器想要關機, 那可就會成為『不可能的任務』!如果你的服務器上面還有客戶端在聯機,那么你要關機, 可能得要等到數個鐘頭才能夠正常的關機成功!嗄!真的假的!不相信嗎?不然你自個兒試試看!^\_^! 所以啰,建議你的 NFS Server 想要關機之前,能先『關掉 rpcbind 與 nfs 』這兩個東西! 如果無法正確的將這兩個 daemons 關掉,那么先以 netstat -utlp 找出 PID ,然后以 kill 將他關掉先!這樣才有辦法正常的關機成功喔!這個請特別特別的注意呢! 當然啦,你也可以利用 [showmount](#showmount) -a localhost 來查出來那個客戶端還在聯機? 或者是查閱 /var/lib/nfs/rmtab 或 xtab 等檔案來檢查亦可。找到這些客戶端后, 可以直接 call 他們啊!讓他們能夠幫幫忙先! ^\_^ 事實上,客戶端以 NFS 聯機到服務器端時,如果他們可以下達一些比較不那么『硬』的掛載參數時, 就能夠減少這方面的問題喔!相關的安全性可以參考下一小節的 [客戶端可處理的掛載參數與開機掛載](#nfsclient_mount)。 - - - - - -
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看