Ubuntu上NFS的安装配置

释放双眼,带上耳机,听听看~!

NFS 用于 Linux 主机访问网络中其他 Linux 主机上的共享资源。 NFS 的原理是在客户端上通过网络将远程主机共享文件系统以挂载 (Mount) 的方式加入本机的文件系统,之后的操作就如同在本机上一样。

 

NFS 服务器 ( 宿主机 )

 

1. 安装NFS

Ubuntu 上默认是没有安装 NFS 服务器的,首先要安装 NFS 服务程序:


1
2
1$ sudo apt-get install nfs-kernel-server  
2

( 安装 nfs-kernel-server 时, apt 会自动安装 nfs-common 和 portmap )

这样,宿主机就相当于 NFS Server 。

 

2. 配置 NFS

1) 配置 portmap

方法 1:

编辑 /etc/default/portmap, 将 -i 127.0.0.1 去掉 .

方法 2:
             


1
2
1$ sudo dpkg-reconfigure portmap  
2

对 Should portmap be bound to the loopback address? 选 N.

2) 配置 /etc/hosts.deny


1
2
1$ sudo gedit /etc/hosts.deny
2

(禁止任何 host (主机)能和你的 NFS 服务器进行 NFS 连接 ) ,加入:


1
2
3
4
5
6
7
1### NFS DAEMONS  
2portmap:ALL  
3lockd:ALL  
4mountd:ALL  
5rquotad:ALL  
6statd:ALL  
7

 

3) 配置 /etc/hosts.allow


1
2
1$ sudo gedit /etc/hosts.allow
2

允许那些你想要的主机和你的 NFS 服务器建立连接。下列步骤将允许任何 IP 地址以 192.168.1 开头的主机(连接到 NFS 服务器上),也可以指定特定的 IP 地址。


1
2
3
4
5
6
7
8
9
10
11
12
1\#\#\# NFS DAEMONS  
2
3portmap: 192.168.1.  
4
5lockd: 192.168.1.  
6
7rquotad: 192.168.1.  
8
9mountd: 192.168.1.  
10
11statd: 192.168.1.  
12

    
上面设置了只要在 192.168.1.*这个网段的所有 IP
地址用户都可以访问共享目录,但我只想让一个 IP 地址访问,比如 192.168.1.101 那么就可以这样设置了。

可以通过设定 /etc/hosts.deny 和 /etc/hosts.allow 文件来限制网络服务的存取权限。


1
2
3
4
5
6
7
8
1***/etc/hosts.deny**
2
3portmap:ALL  
4lockd:ALL  
5mountd:ALL  
6rquotad:ALL  
7statd:ALL
8

1
2
3
4
5
6
7
8
1***/etc/hosts.allow***
2
3portmap:192.168.1.101  
4lockd:192.168.1.101  
5mountd:192.168.1.101  
6rquotad:192.168.1.101  
7statd:192.168.1.101
8

同时使用这两个文件就会使得只有 ip 为 192.168.1.101 的机器使用 NFS 服务。你的 target board 的 ip 地址设定为 192.168.1.101 ,这样就可以了。

   
/etc/hosts.deny 和 /etc/hosts.allow 设置对 portmap 的访问 . 采用这两个配置文件有点类似 "mask" 的意思 . 现在 /etc/hosts.deny 中禁止所有用户对 portmap 的访问 . 再在 /etc/hosts.allow 中允许某些用户对 portmap 的访问。

 

4 )重启 portmap daemon

    
每次对 /etc/hosts.deny 和 /etc/hosts.allow 两文件的修改后都要重启 portmap daemon 。不然修改无效。


1
2
1$ sudo /etc/init.d/portmap restart
2

 

5 )配置 /etc/exports

    NFS 挂载目录及权限由 /etc/exports 文件定义。


1
2
1$sudo gedit /etc/exports  
2

   
比如我要将将我的 home 目录中的 /home/lin/NFSshare 目录让 192.168.1.* 的 IP 共享 , 则在该文件末尾添加下列语句:


1
2
1/home/lin/NFSshare  192.168.1.*(rw,sync,no_root_squash)  
2

     
然后保存退出。

/home/lin/NFSshare 就表示共享目录,当然,你可以随便换成自己喜欢的目录。

192.168.1. * : 前面三位是你主机( NFS 客户端)的 ip 地址(本机终端 ifconfig 命令就可以获得本机的 ip 地址)。

rw : 读 / 写权限,只读权限的参数为 ro ;
sync :数据同步写入内存和硬盘,也可以使用 async ,此时数据会先暂存于内存中,而不立即写入硬盘。

no_root_squash : NFS 服务器共享目录用户的属性,如果用户是 root ,那么对于这个共享目录来说就具有 root 的权限。

 

6) 重启 nfs 服务


1
2
1$ sudo /etc/init.d/nfs-kernel-server restart
2

   
执行这个命令的时候可能会提示一些错误,如下:


1
2
3
4
5
6
7
8
9
1  * Stopping NFS kernel daemon    [ OK ]  
2  * Unexporting directories for NFS kernel daemon...   [ OK ]  
3  * Exporting directories for NFS kernel daemon...
4                                
5exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.1.\*:/home/lin/NFSshare".
6   Assuming default behaviour ('no_subtree_check').
7   NOTE: this default has changed since nfs-utils version 1.0.x                                                                                                                   [ OK ]
8  * Starting NFS kernel daemon                                     [ OK ]  
9

我不知道具体原因,不用管,不影响后面的使用。

注意: 每次对 /etc/exports 文件的修改,都要重启一下 nfs 服务。

 

7 )nfs 服务器端测试

     
由于 nfs 服务器端默认是安装了 nfs 客户端 (nfs-common) 的,所以可以在服务器端挂载共享文件夹作测试。


1
2
1 $sudo mount 192.168.1.160:/home/lin/NFSshare /mnt  
2

 
192.168.1.160 是 nfs 服务器端 IP 地址,可以在服务器端终端通过命令 ifconfig 获得。

有可能会出现错误


1
2
3
1$mount 192.168.1.160:/home/lin/NFSshare /mnt
2mount.nfs: access denied by server while mounting 192.168.1.160:/home/lin/NFSshare
3

     
在 nfs 客户端执行上述命令,出现同样的错误。这个错误的意思是客户端地址不在 NFS 所允许的地址范围之内,但无论服务器端还是客户端 IP 都是 192.168.1.* 啊!

 
解决办法

     
重新


1
2
1$sudo gedit /etc/exports
2

,将 “ 192.168.1.* ” 换成 “*” ,要注意就这一个星星哦!修改完之后不要忘了重启一下 nfs 服务


1
2
1$ sudo /etc/init.d/nfs-kernel-server restart
2

   

      
这样修改之后,就可以看到 /mnt 文件下共享了 /home/lin/NFSshare 文件夹里的内容。测试完毕,要卸载 nfs 的挂载


1
2
1$sudo umount /umt
2

 

NFS 客户端

1. 安装 NFS *

客户端需要安装 n fs 客户端程序 (nfs-common)


1
2
1$ sudo apt-get install nfs-common
2

2.nfs 挂载

    
挂载服务器端共享文件夹 ( 假设服务器端 IP 地址为: 192.168.1.160 ,将 /home/lin/NFSshare 挂载到 /mnt)


1
2
1$ sudo mount 192.168.1.160:/home/lin/NFSshare /mnt
2

     
查看 NFS server 的 export list


1
2
3
4
5
6
1$ showmount -e 192.168.1.160
2
3Export list for 192.168.1.160:
4
5/home/lin/NFSshare 192.168.1.139
6

$ df 看看结果

   
打开文件夹 /mnt ,可以看到实际访问到了服务器端的 /home/lin/NFSshare 文件夹

    
使用完 NFS 后可以卸载 NFS 挂载。


1
2
1$ sudo umount /mnt
2

 

与 NFS 相关的几个文件

1, /sbin/exportfs

   
维护 NFS 的资源共享 . 可以通过它重新设定 /etc/exports 的共享目录 , 卸载 NFS Server 共享的目录或者重新共享等 .

2, /usr/sbin/showmount

   
用在 NFS Server 端,而 showmount 则主要用在 Client 端 . showmount 可以用來查看 NFS 共享的目录资源 .

3, /var/lib/nfs/xtab

    NFS 的记录文档 : 通过它可以查看有哪些 Client 连接到 NFS 主机的记录 .

下面这几个并不直接负责 NFS, 实际上它们负责所有的 RPC

4, /etc/default/portmap

   
实际上 , portmap 负责映射所有的 RPC 服务端口 , 它的内容非常非常之简单 ( 后面详述 )

5, /etc/hosts.deny

   
设定拒绝 portmap 服务的主机

6, /etc/hosts.allow

   
设定允许 portmap 服务的主机

 

7 , /etc/exports

   
对 NFS 卷的访问是由 exports 来批准 , 它枚举了若干有权访问 NFS 服务器上文件系统的主机名。 /etc/exports 实际上就是 nfs 服务器的核心配置文件了 . 列举了一些 exports 文件的写法。

     
除了编辑 /etc/exports 文件这种方法外, Ubuntu 还提供图形管理工具 ——“ 共享的文件件 ” ,可以用它来进行 NFS 服务器的维护和设置工作。

( 1 ) 打开 “ 共享的文件件 ”

               
第一种方法: “ 系统 ”——“ 系统管理 ”——“ 共享的文件夹 ”
(我的 Ubuntu8.10 没有)
      
第二种方法:终端    $ shares-admin

 ( 2 )要想修改,首先就要 “ 解锁 ” 。

( 3 )可以看到之前 /home/lin/NFSshare 在列表内,其实 “ 共享的文件夹 ” 不过是 /etc/exports 图形化。

(4) 点 “ 添加 ” 添加一个新的共享文件夹

选择 “Unix 网络 (NFS)“ 。因为这是 Linux 之间的共享;如果是 Linux 和 Windows 之间的共享,选择 “Windows 网络 (SMB)” 。

 
( 5 )再点 “ 添加 “ ,可以设置 ” 指定主机名 ”,“ 指定 IP 地址 ” , “ 指定网络 ” 。

(6) 设置完毕之后就可以关闭 “ 共享的文件夹 ” ,打开 /etc/exports 可以看到,相应的语句加入到了文件里。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

设计模式之组合模式

2021-12-12 17:36:11

安全运维

OpenSSH-8.8p1离线升级修复安全漏洞

2022-1-9 9:47:55

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索