nfs(Network FileSystem)的簡單配置

若是想要在window和linux之間共享文件,那麼用samba。若是僅僅想在Unix like系統之間共享文件,那麼能夠用NFS。linux

這篇文章分爲兩個部分,第一部分只是簡單的用:照着寫的步驟一步步來就能夠實現nfs共享了,時間緊迫的能夠只看這一部分;第二部分是比較詳細的介紹了一些配置,有點乾貨。centos

我用的是centos 6.6(Final) X86_64操做系統。服務器IP:192.168.128.140 ;客戶端IP:192.168.128.136tomcat

先配置個最簡單的server和client可以讓nfs跑起來。服務器

  • server端配置(nfs依賴一個叫rpc的服務。我用的是centos 6.6,因此用rpcbind,其餘版本的linux可能有其餘的程序提供rpc服務)
  1. 安裝rpcbind和nfs-utils :    yum install rpcbind nfs-utils 
  2. 修改/etc/exports文件。(有時這個文件不存在,那就本身建立一個),添加一條   /tmp 192.168.128.136(rw,no_root_squash) 。意思是容許把 /tmp 這個文件夾分享給 192.168.128.136這個客戶端,而且客戶端具備read和write權限,而且若是客戶端是root登陸的話,那他在/tmp下建立的文件的全部者也是root。具體的解釋這裏就不說了。反正只要把 /tmp 192.168.128.136(rw,no_root_squash) 複製到/etc/exports文件裏就好了。
     (注意/etc/exports是文件,不是文件夾)
  3. 啓動 rpc 和nfs ,依次運行下面的三條綠色的命令    
 1 [root@www ~]# /etc/init.d/rpcbind start
 2 # 若是 rpcbind 本來就已經在執行了,那就不須要啟動啊!
 3 
 4 [root@www ~]# /etc/init.d/nfs start
 5 # 有時候某些 distributions 可能會出現以下的警告訊息:
 6 exportfs: /etc/exports [3]: No 'sync' or 'async' option specified 
 7 for export "192.168.100.10:/home/test".
 8   Assuming default behaviour ('sync').
 9 # 上面的警告訊息僅是在告知因為我們沒有指定 sync 或 async 的參數,
10 # 則 NFS 將預設會使用 sync 的資訊而已。你能夠不理他,也能夠加入 /etc/exports。
11 
12 [root@www ~]# /etc/init.d/nfslock start

 這樣服務器就行了。還有若是不出現意外的話,服務器端防火牆必定會阻止客戶端的鏈接。因此爲了簡單直接關了防火牆吧。(開放端口最後講)async

  • client端配置
  1. 和server端第一步同樣,安裝rpcbind和nfs-utils:    yum install rpcbind nfs-utils
  2. 啓動 rpc 和nfs ,依次運行下面的兩條綠色的命令
    1 2 [root@clientlinux ~]# /etc/init.d/rpcbind start
    3 [root@clientlinux ~]# /etc/init.d/nfslock start 
  3. 把服務器的文件夾mount到本地
1 2 [root@clientlinux ~]# mkdir -p /home/nfs/public
3 [root@clientlinux ~]# mount -t nfs 192.168.128.140:/temp /home/nfs/public       #意思是把遠程的/temp文件夾mount到本地的/home/nfs/public文件夾 

 另外若是不記得服務器共享了哪些文件夾,能夠用命令 showmount -e 服務器端IP      來查詢。ui

好了,在客戶端 cd /homt/nfs/public 你就會發現你進入的實際上是服務器端的/tmp文件夾。你在裏面touch一個文件在返回服務器端的/tmp文件夾看看。spa

 

 

 

上面的配置已經能夠運行nfs了。下面對於有些東西詳細說一下。以爲內容繁雜的而且只是想下用着的能夠不看。操作系統

1. /etc/exports配置文件。看下面的例子:code

1 /tmp   192.168.100.0/24(ro)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
2 /tmp1  *(rw,no_root_squash)
3 /tmp2  192.168.100.123(rw) 

 意思是服務器有三個文件夾/tmp, /tmp1,/tmp2是共享的,不過他們共享的對象不同。猜一猜也知道共享給了誰^_^。那個誰有幾種書寫方式:server

  • 指定ip地址的主機:192.168.0.200
  • 指定子網中的全部主機:192.168.0.0/24 192.168.0.0/255.255.255.0
  • 指定域名的主機:david.bsmart.cn
  • 指定域中的全部主機:*.bsmart.cn
  • 全部主機:*

至於小括號裏面的內容,表示要賦予權限,看下錶:

參數值 內容說明
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 命令去查看。

2. 關於客戶端鏈接服務器端用戶的問題。(假設客戶端是用tomcat用戶登陸的,那他鏈接服務器並在共享文件夾裏新建立了一個文件,那麼這個文件全部者是誰呢?)

  I. 客戶端鏈接時候,對普通用戶的檢查

    a. 若是明確設定了普通用戶被壓縮的身份,那麼此時客戶端用戶的身份轉換爲指定用戶;

    b. 若是NFS server上面有同名用戶,那麼此時客戶端登陸帳戶的身份轉換爲NFS server上面的同名用戶;

    c. 若是沒有明確指定,也沒有同名用戶,那麼此時 用戶身份被壓縮成nfsnobody;

  II. 客戶端鏈接的時候,對root的檢查

    a. 若是設置no_root_squash,那麼此時root用戶的身份被壓縮爲NFS server上面的root;

    b. 若是設置了all_squash、anonuid、anongid,此時root 身份被壓縮爲指定用戶;

    c. 若是沒有明確指定,此時root用戶被壓縮爲nfsnobody;

    d. 若是同時指定no_root_squash與all_squash 用戶將被壓縮爲 nfsnobody,若是設置了anonuid、anongid將被壓縮到所指定的用戶與組;

3.

相關文章
相關標籤/搜索