NFS掛載問題 mount.nfs: access denied by server while mounting


這兩天在搭建嵌入式開發環境,配置好NFS服務器后,遇到了一個很糾結的錯誤
使用 mount -t nfs 127.0.0.1:/home/lzgonline/rootfs /mnt 和 mount -t nfs 192.168.1.9:/home/lzgonline/rootfs /mnt 本機掛載nfs則沒有問題,然而使用 mount -t nfs 192.168.3.12:/home/lzgonline/rootfs /mnt 時卻出現了問題,導致開發板無法通過nfs掛載啟動,其中192.128.3.12 和 192.128.1.9(即nfs服務器)之間建立了映射(DMZ)關系。
mount.nfs: access denied by server while mounting 192.168.3.12:/home/lzgonline/rootfs
百度、谷歌了很久,大部分都說是權限設置有問題,其實文件夾權限都設為777了,權限上都沒問題,hosts.deny和hosts.allow都保留默認設置,防火牆也關了,該設置的都設置了,但還是被拒絕,很是郁悶,就在一籌莫展的時候,通過查看一些linux技術論壇后逐漸找到了問題所在。
首先使用命令查看出錯日志文件
[root@lzgonline init.d]# cat /var/log/messages | grep mount
Jun 29 00:49:04 lzgonline mountd[1644]: refused mount request from 192.168.3.12 for /home/lzgonline/rootfs (/home/lzgonline/rootfs): illegal port 1689
Jun 29 00:51:02 lzgonline mountd[1644]: refused mount request from 192.168.3.12 for /home/lzgonline/rootfs (/home/lzgonline/rootfs): illegal port 1710
Jun 29 01:02:17 lzgonline mountd[1644]: refused mount request from 192.168.3.12 for /home/lzgonline/rootfs (/home/lzgonline/rootfs): illegal port 1916
Jun 29 01:09:51 lzgonline mountd[1644]: refused mount request from 192.168.3.12 for /home/lzgonline/rootfs (/home/lzgonline/rootfs): illegal port 2157
Jun 29 01:17:02 lzgonline mountd[1644]: refused mount request from 192.168.3.12 for /home/lzgonline/rootfs (/home/lzgonline/rootfs): illegal port 2318
 
從出錯日志可以看出,mount.nfs: access denied by server while mounting 192.168.3.12:/home/lzgonline/rootfs 被拒絕的原因是因為使用了非法端口,功夫總沒白費,終於在一個linux技術論壇上找到了答案:
I googled and found that since the port is over 1024 I needed to add the "insecure" option to the relevant line in /etc/exports on the server. Once I did that (and ran exportfs -r), the mount -a on the client worked.
 
//如果端口號大於1024,則需要將 insecure 選項加入到配置文件(/etc/exports)相關選項中mount客戶端才能正常工作:
 
查看 exports 手冊中關於 secure 選項說明也發現確實如此
 
[root@lzgonline init.d]# man exports
 
secure,This  option requires that requests originate on an Internet port less than IPPORT_RESERVED (1024). This option is on by default. To turn it off, specify insecure.
 
//secure 選項要求mount客戶端請求源端口小於1024(然而在使用 NAT 網絡地址轉換時端口一般總是大於1024的),默認情況下是開啟這個選項的,如果要禁止這個選項,則使用 insecure 標識
 
修改配置文件/etc/exports,加入 insecure 選項
 
/home/lzgonline/rootfs  *(insecure,rw,async,no_root_squash)
 
保存退出
 
然后重啟nfs服務:service nfs restart
 
然后問題就解決了
 
 

**********************************************************************************

NFS服務器的配置

一、NFS服務器端的配置,即共享發布者

(一)需啟動的服務和需安裝的軟件

1、 NFS服務器必須啟動兩個daemons服務:rpc.nfsd和rpc.mountd
   rpc.nfsd:用來管理客戶端PC是否可以登錄。類似於windows中的共享權限。
   rpc.mountd:用來管理客戶端pc能夠使用的文件安全權限。 如windows中的共享安全權限。

RPC:因為NFS支持的功能很多,所以NFS的功能對應的端口才無法固定,而是采用小於1024的隨機端口。
    但客戶端需要得知服務器的端口才能聯機,此時就需要啟用RPC服務。
    RPC的功能就是指定每個NFS功能的端口號。並傳信息給客戶端,讓客戶端可以連到正確的端口上。
    服務器在啟動NFS時會隨機取用數個端口,並主動向RPC注冊,因此RPC知道每個NFS功能對應的端口。
    RPC用111端口監聽客戶端的請求,並應答正確的端口。啟動NFS前,RPC就要先啟動了,否則NFS會無法向RPC注冊。

2、NFS 服務器需要安裝nfs主程序,nfs-utils和rpc主程序 portmap


(二)exports服務器的方法:

1、 NFS文件存取權限
因為NFS沒有驗證機制,當客戶端用戶訪問NFS服務器的共享文件夾時會遇到的權限情況:

  (1)NFS服務器端用戶列表中有與客戶端用戶名相同的用戶名時,客戶端可以直接存取共享文件夾。例:客戶端用戶為khp,而nfs服務器用戶列表(/etc/passwd)中也有khp這個用戶名,則將擁有KHP權限。。
 
(2)當訪問NFS服務器的客戶端用戶UID與服務器端 UID相同,但用戶名卻不相同時,客戶端將擁有與服務器端UID 相同但不同用戶的權限。
       例:客戶端為 501UID,用戶名為  khp的帳號訪問NFS服務器。NFS服務器用戶列表中(/etc/passwd)有uid為501 ,但用戶名為pla的用戶,所以客戶端khp用戶可以擁有NFS服務器pla相同權限。
 
(3)如果客戶端用戶UID在NFS服務器端用戶列表中不存在時,則以匿名用戶的權限訪問。即nobody的用戶。

(4)如果客戶端用戶為root用戶,因為每台電腦都有root用戶,如果不作控制,NFS服務器將會很危險,會被客戶端全部控制。所以默認root用戶名的客戶端訪問NFS服務器,會變為匿名用戶,擁有匿名用戶權限。也可不控制。
 

2、編輯/etc/exports文件,此文件不一定存在,如不存在就手工建立

/etc /exports的格式:

共享目錄   允許訪問的電腦 (選項)

   共享目錄:即nfs服務器准備共享的目錄
   允許訪問的電腦:即允許訪問這個共享的客戶端有哪些。可用電腦名、IP地址,還可以用通配符。
  
選項:

   (1) rw        //讀寫。客戶端擁有讀寫的權限。 
   (2) ro        //只讀  客戶端只有讀的權限。
   (3) no_root_squash  //root用戶可訪問,不變成匿名用戶,即root用戶可以以root用戶的權限訪問NFS服務器的共享資源。
   (4) root_squash     //root用戶變成匿名用戶
   (5) all_squash      //所有用戶都變成匿名用戶
   (6) anonuid
   (7) anongid          //所有匿名用戶的UID或組ID都變為后面設定的UID或GID的權限。因為所有在NFS服務器用戶列表中沒有用戶名的都會匿名用戶,這里設定這些匿名用戶的用戶權限。
   (8) sync             //同步到硬盤 
   (9) async            //數據存放到內存而不是直接寫到硬盤

例:   /mnt/export  www.elitek.com(rw)   //這個目錄只允許www.elitek.com這台電腦讀寫。注意,后面(rw)前沒有空格。
       /mnt/export  www.elitek.com (rw)  //   /mnt/export這具目錄只允許www.elitek.com這台電腦讀寫,且允許所有其他用戶讀寫權限。(rw)前面有空格。
       /mnt/export  *.elitek.com(rw)     //允許所有elitek.com這個域里的電腦讀寫這個共享文件夾。


3、 exportfs命令。  可以更改設置    (命令目錄/usr/sbin/exportfs)

  exportfs  [-avu][-o option] [director]
-a:把 exprotfs里的所有路徑都共享出去
-u:把export出去的路徑取消
-v:在export時,共享顯示到屏幕
-o option  :即一些選項
-r :重新掛載exports里的設置

例:  exportfs  -a  ro /tmp/user    //即把/tmp/user目錄全部exports,但用戶只能讀取資料。

4、 /var/lib/nfs/*tab   //存放日志文件.etab記錄NFS共享出來的目錄完整權限設置。  .xtab記錄曾經連接引NFS的客戶機數據

5、rpcinfo  [-p] [ip |電腦名]   //查看RPC服務的注冊狀態

6、 netstat -ultn  查看開放了哪些端口




二、客戶端的端設置

作為NFS客戶端需要先運行  nfslock和 portmap服務。  /etc/init.d/nsflock  start 
                                                  /etc/init.d/portmap  start

並且有幾種掛載方法

(一)、命令方式

  mount 命令掛載

1、 showmount  -e   [nfs服務器電腦名| ip地址 ]    //查看nfs服務器的可用共享目錄

2、mount  nfs主機名:nfs共享目錄     掛載到本機的目錄    //把nfs服務器共享的目錄掛載到本機。主機名外還可用IP地址
 
例:  mount  192.168.9.1:/tmp/export     /tmp/export   //即把192.168.9.1nfs服務器共享的   /tmp/export目錄,掛載到本機的  /tmp/export目錄上。
      mount -t nfs -o time=20  www.linux.com/home/khp    /tmp/export  //把遠程nfs服務器的/home/khp 掛載到本機的/tmp/export目錄下。最長響應時間為20秒。

3、 unmount  命令中斷掛載


(二)  編輯   /etc/fstab文件掛載     

  /etc/fstab文件詳解在文件系統管理中有說明

1、格式:  NFS服務器及共享目錄     掛載到本地的目錄    文件格式   選項

www.elitek.com:/home/project     /tmp/export   ro   //把  www.elitek.com這對口NFS服務器上的  /home/project目錄掛載到本機的  /tmp/export目錄上,且為只讀。格式為nfs

2、打開文件夾。此時輸入  mount  /tmp/export  即可以打開掛載的文件

(三)autofs來掛載nfs文件系統

  只在文件系統被訪問時才被掛載。

1、在  /etc/auto.master中定義掛載點   
2、再在  auto.master中定義的   /etc/auto.dirctory   中定義目錄的總掛載點。

即在系統文件  /etc/auto.master中先定義一個總的總掛載點。  然后依這個文件中定義的總掛載點文件,再設置詳細掛載點。

例:   vi   /etc/auto.master    編輯這個文件:

    /misc     /etc/auto.khp   -timeout  60    //即   /etc/auto.khp中的文件將掛載到   /misc目錄下

再編輯:   vi   /etc/auto.khp   這個文件,定義掛載點。

             myproject   -rw,soft,intr   www.elitek.com:/home/project   //即把NFS服務器 www.elitek.com:/home/project共享目錄,掛載到本機的   /misc/myproject目錄下。

注意:   /misc/myproject目錄是動態的,不是實際存在的,只是在訪問時這個目錄才會產生。退出就消息。但 /misc目錄需存在。


當防火牆開着時,有時就無法訪問,可用  /etc/rc.d/init.d/iptables  stop  停用防火牆,或用 iptable命令開放NFS的端口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM