ubuntu12.04的NFS配置及linux NFS介紹 nfs掛載權限問題

文章三部分組成:

第一部分:

文章摘自:http://www.cnblogs.com/king-77024128/articles/2666230.html

安裝nfs:

#sudo apt-get install nfs-kernel-server

ubuntu12.04中的已經是最新版本了,無需安裝

打開/etc/exports文件,在末尾加入:

/home/kevin *(rw,sync,no_root_squash)

注:nfs允許掛載的目錄及權限,在文件/etc/exports中進行定義,各字段含義如下:

/home/kevin:要共享的目錄

* :允許所有的網段訪問

rw :讀寫權限

sync:資料同步寫入內在和硬盤

no_root_squash:nfs客戶端共享目錄使用者權限

重啓服務:

#sudo /etc/init.d/portmap restart                 <—重啓portmap,
#sudo /etc/init.d/nfs-kernel-server restart     <—重啓nfs服務
#showmount -e                                          <—顯示共享出的目錄

注:nfs是一個RPC程序,使用它前,需要映射好端口,通過portmap設定

命令執行情況如下:

sudo /etc/init.d/portmap restart
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service portmap restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart portmap
portmap start/running, process 474


sudo /etc/init.d/nfs-kernel-server restart
 * Stopping NFS kernel daemon                                              [ OK ]
 * Unexporting directories for NFS kernel daemon…                   [ OK ]
 * Exporting directories for NFS kernel daemon…     

  exportfs: /etc/exports [1]: Neither ‘subtree_check’ or ‘no_subtree_check’ specified for export “*:/home/xgc”.
  Assuming default behaviour (‘no_subtree_check’).
  NOTE: this default has changed since nfs-utils version 1.0.x
                                                                                 [ OK ]
 * Starting NFS kernel daemon                                       [ OK ]

showmount -e
Export list for xgc-VirtualBox:
/home/kevin *

 

現在可以在本機上試一下:

#sudo mount -t nfs localhost:/home/kevin /mnt

注:localhost爲本機linux的IP地址

這樣就把共享目錄掛到了/mnt目錄,取消掛載用:

#sudo umount /mnt

如果用在嵌入式設備上掛載,要加上參數-o nolock

我在開發板上使用的掛載命令:

mount -t nfs -o nolock 192.168.1.8:/home/kevin /mnt


第二部分:

文章摘自:http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html


Linux NFS服務器的安裝與配置

一、NFS服務簡介

  NFS 是Network File System的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由Sun公司開發,於1984年向外公佈。功能是通過網絡讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網絡訪問位於服務器磁盤中的數據,是在類Unix系統間實現磁盤文件共享的一種方法。

  NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的文件系統”,它是獨立於操作系統,容許不同硬件及操作系統的系統共同進行文件的分享。

  NFS在文件傳送或信息傳送過程中依賴於RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其他系統中程序的一種機制。NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因爲NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER。所以只要用到NFS的地方都要啓動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這麼理解RPC和NFS的關係:NFS是一個文件系統,而RPC是負責負責信息的傳輸。

二、系統環境

系統平臺:CentOS release 5.6 (Final)

NFS Server IP:192.168.1.108

防火牆已關閉/iptables: Firewall is not running.

SELINUX=disabled

三、安裝NFS服務

NFS的安裝是非常簡單的,只需要兩個軟件包即可,而且在通常情況下,是作爲系統的默認包安裝的。

  • nfs-utils-* :包括基本的NFS命令與監控程序 
  • portmap-* :支持安全NFS RPC服務的連接

1、查看系統是否已安裝NFS

系統默認已安裝了nfs-utils portmap 兩個軟件包。

2、如果當前系統中沒有安裝NFS所需的軟件包,需要手工進行安裝。nfs-utils 和portmap 兩個包的安裝文件在系統光盤中都會有。

# mount /dev/cdrom /mnt/cdrom/




# cd /mnt/cdrom/CentOS/ # rpm -ivh portmap-4.0-65.2.2.1.i386.rpm # rpm -ivh nfs-utils-1.0.9-50.el5.i386.rpm # rpm -q nfs-utils portmap

四、NFS系統守護進程

  • nfsd:它是基本的NFS守護進程,主要功能是管理客戶端是否能夠登錄服務器;
  • mountd:它是RPC安裝守護進程,主要功能是管理NFS的文件系統。當客戶端順利通過nfsd登錄NFS服務器後,在使用NFS服務所提供的文件前,還必須通過文件使用權限的驗證。它會讀取NFS的配置文件/etc/exports來對比客戶端權限。
  • portmap:主要功能是進行端口映射工作。當客戶端嘗試連接並使用RPC服務器提供的服務(如NFS服務)時,portmap會將所管理的與服務對應的端口提供給客戶端,從而使客戶可以通過該端口向服務器請求服務。

五、NFS服務器的配置

NFS服務器的配置相對比較簡單,只需要在相應的配置文件中進行設置,然後啓動NFS服務器即可。

NFS的常用目錄

/etc/exports                           NFS服務的主要配置文件
/usr/sbin/exportfs                   NFS服務的管理命令
/usr/sbin/showmount              客戶端的查看命令
/var/lib/nfs/etab                      記錄NFS分享出來的目錄的完整權限設定值
/var/lib/nfs/xtab                      記錄曾經登錄過的客戶端信息

NFS服務的配置文件爲 /etc/exports,這個文件是NFS的主要配置文件,不過系統並沒有默認值,所以這個文件不一定會存在,可能要使用vim手動建立,然後在文件裏面寫入配置內容。

/etc/exports文件內容格式:

<輸出目錄> [客戶端1 選項(訪問權限,用戶映射,其他)] [客戶端2 選項(訪問權限,用戶映射,其他)]

a. 輸出目錄:

輸出目錄是指NFS系統中需要共享給客戶機使用的目錄;

b. 客戶端:

客戶端是指網絡中可以訪問這個NFS輸出目錄的計算機

客戶端常用的指定方式

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

c. 選項:

選項用來設置輸出目錄的訪問權限、用戶映射等。

NFS主要有3類選項:

訪問權限選項

  • 設置輸出目錄只讀:ro
  • 設置輸出目錄讀寫:rw

用戶映射選項

  • all_squash:將遠程訪問的所有普通用戶及所屬組都映射爲匿名用戶或用戶組(nfsnobody);
  • no_all_squash:與all_squash取反(默認設置);
  • root_squash:將root用戶及所屬組都映射爲匿名用戶或用戶組(默認設置);
  • no_root_squash:與rootsquash取反;
  • anonuid=xxx:將遠程訪問的所有用戶都映射爲匿名用戶,並指定該用戶爲本地用戶(UID=xxx);
  • anongid=xxx:將遠程訪問的所有用戶組都映射爲匿名用戶組賬戶,並指定該匿名用戶組賬戶爲本地用戶組賬戶(GID=xxx);

其它選項

  • secure:限制客戶端只能從小於1024的tcp/ip端口連接nfs服務器(默認設置);
  • insecure:允許客戶端從大於1024的tcp/ip端口連接服務器;
  • sync:將數據同步寫入內存緩衝區與磁盤中,效率低,但可以保證數據的一致性;
  • async:將數據先保存在內存緩衝區中,必要時才寫入磁盤;
  • wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置);
  • no_wdelay:若有寫操作則立即執行,應與sync配合使用;
  • subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
  • no_subtree:即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率;

六、NFS服務器的啓動與停止

在對exports文件進行了正確的配置後,就可以啓動NFS服務器了。

1、啓動NFS服務器

爲了使NFS服務器能正常工作,需要啓動portmap和nfs兩個服務,並且portmap一定要先於nfs啓動。

# service portmap start




# service nfs start

2、查詢NFS服務器狀態

# service portmap status




# service nfs status

3、停止NFS服務器

要停止NFS運行時,需要先停止nfs服務再停止portmap服務,對於系統中有其他服務(如NIS)需要使用時,不需要停止portmap服務

# service nfs stop




# service portmap stop

4、設置NFS服務器的自動啓動狀態

對於實際的應用系統,每次啓動LINUX系統後都手工啓動nfs服務器是不現實的,需要設置系統在指定的運行級別自動啓動portmap和nfs服務。

# chkconfig –list portmap




# chkconfig –list nfs

設置portmap和nfs服務在系統運行級別3和5自動啓動。

# chkconfig –level 35 portmap on




# chkconfig –level 35 nfs on

七、實例

1、將NFS Server 的/home/david/ 共享給192.168.1.0/24網段,權限讀寫。

服務器端文件詳細如下:

# vi /etc/exports

/home/david 192.168.1.0/24(rw)

2、重啓portmap 和nfs 服務

# service portmap restart




# service nfs restart # exportfs

3、服務器端使用showmount命令查詢NFS的共享狀態

# showmount -e    //默認查看自己共享的服務,前提是要DNS能解析自己,不然容易報錯

# showmount -a    //顯示已經與客戶端連接上的目錄信息

4、客戶端使用showmount命令查詢NFS的共享狀態

# showmount -e NFS服務器IP

5、客戶端掛載NFS服務器中的共享目錄

命令格式

# mount NFS服務器IP:共享目錄 本地掛載點目錄

# mount 192.168.1.108:/home/david/ /tmp/david/

# mount |grep nfs

掛載成功。

查看文件是否和服務器端一致。

6、NFS的共享權限和訪問控制

現在我們在/tmp/david/ 裏面建立一個文件,看看權限是什麼

# touch 20130103

這裏出現Permission denied,是因爲NFS 服務器端共享的目錄本身的寫權限沒有開放給其他用戶,在服務器端打開該權限。

# chmod 777 -R /home/david/

再次在客戶端/tmp/david/ 裏面建立一個文件

我用root 用戶建立的文件,變成了nfsnobody 用戶。

NFS有很多默認的參數,打開/var/lib/nfs/etab 查看分享出來的/home/david/ 完整權限設定值。

# cat /var/lib/nfs/etab

默認就有sync,wdelay,hide 等等,no_root_squash 是讓root保持權限,root_squash 是把root映射成nobody,no_all_squash 不讓所有用戶保持在掛載目錄中的權限。所以,root建立的文件所有者是nfsnobody。

下面我們使用普通用戶掛載、寫入文件測試。

# su - david

$ cd /tmp/david/

$ touch 2013david

普通用戶寫入文件時就是自己的名字,這也就保證了服務器的安全性。

  關於權限的分析

  1. 客戶端連接時候,對普通用戶的檢查

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

    b. 如果NFS server上面有同名用戶,那麼此時客戶端登錄賬戶的身份轉換爲NFS server上面的同名用戶;

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

  2. 客戶端連接的時候,對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將被壓縮到所指定的用戶與組;

7、卸載已掛載的NFS共享目錄

# umount /tmp/david/

八、啓動自動掛載nfs文件系統

格式:

<server>:</remote/export> </local/directory> nfs < options> 0 0

# vi /etc/fstab

保存退出,重啓系統。

查看/home/david 有沒有自動掛載。

自動掛載成功。

九、相關命令

1、exportfs

如果我們在啓動了NFS之後又修改了/etc/exports,是不是還要重新啓動nfs呢?這個時候我們就可以用exportfs 命令來使改動立刻生效,該命令格式如下:

  # exportfs [-aruv]

  -a 全部掛載或卸載 /etc/exports中的內容
  -r 重新讀取/etc/exports 中的信息 ,並同步更新/etc/exports、/var/lib/nfs/xtab
  -u 卸載單一目錄(和-a一起使用爲卸載所有/etc/exports文件中的目錄)
  -v 在export的時候,將詳細的信息輸出到屏幕上。

具體例子:
  # exportfs -au 卸載所有共享目錄
  # exportfs -rv 重新共享所有目錄並輸出詳細信息

2、nfsstat

查看NFS的運行狀態,對於調整NFS的運行有很大幫助。

3、rpcinfo

查看rpc執行信息,可以用於檢測rpc運行情況的工具,利用rpcinfo -p 可以查看出RPC開啓的端口所提供的程序有哪些。

4、showmount

  -a 顯示已經於客戶端連接上的目錄信息
  -e IP或者hostname 顯示此IP地址分享出來的目錄

5、netstat

可以查看出nfs服務開啓的端口,其中nfs 開啓的是2049,portmap 開啓的是111,其餘則是rpc開啓的。

最後注意兩點,雖然通過權限設置可以讓普通用戶訪問,但是掛載的時候默認情況下只有root可以去掛載,普通用戶可以執行sudo。

NFS server 關機的時候一點要確保NFS服務關閉,沒有客戶端處於連接狀態!通過showmount -a 可以查看,如果有的話用kill killall pkill 來結束,(-9 強制結束)

 

CentOS 6.3下Samba服務器的安裝與配置

http://www.cnblogs.com/mchina/archive/2012/12/18/2816717.html


第三部分:ARM板子nfs掛載權限問題

ARM板子掛載nfs系統後,在板子上操作,其文件夾下總提示operation not permitted
解決方法:將文件夾所在組及所有者分別改爲nogroup nobody
chown -R nobody *
chgrp -R nogroup *











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章