NFS服务

1. nfs介绍

1.1nfs网络文件系统(NFS)协议是由Sun MicroSystem在20世纪80年代为了提供对共享文件的远程访问而设计和实现的。该协议采用Client/Server模型, 通过使用Sun开发的远程过程调用协议(RPC Protocol)来实现运行在一台计算机上的程序来调用在另一台远程机器上运行的子程序.

1.2 NFS包含3个版本:NFSv2、NFSv3、NFSv4

CentOS6是以NFSv4作为默认版本,NFSv4使用TCP协议(端口号是2049)和NFS服务器建立连接,而老版本的NFS可以在TCP协议或者是UDP协议上运行。

1.3 工作原理:

1)客户端首先会向nfs服务器的RPC(端口111)发出NFS文件存取的询问请求

2)服务器找到对应的已经注册的NFS守护进程的端口后会回报给客户端

3)客户端收到正确的端口之后,直接与NFS守护进程来联机通信

所以,根据工作原理可知,NFS服务器依赖RPC机制,所以,在启动nfs服务的时候需要先启动rpcbind服务,然后NFS在启动的时候会向RPC注册自己的端口号。同时,客户端连接NFS服务器的时候也用的是NFS服务,所以也需要启动rpcbind服务

2.安装及配置NFS服务器

2.1了解NFS网络文件的系统结构

/etc/exports   这是NFS的主配置文件,不过系统没有默认值,需要自己创建

/usr/sbin/exportfs  这是维护NFS共享的命令,当修改了NFS的配置文件之后,用此命令可以不重启nfs服务即可刷新

/usr/sbin/showmount  主要用于客户端,用来查看NFS服务器共享的目录

/var/lib/nfs/*tab  存放NFS服务器的登录文件。其中:etab主要记录了NFS共享出来的目录的完整权限设定值;xtab 记录曾经连接到此的NFS主机的相关客户端数据

2.2安装nfs服务

1)Nfs由nfs-utils软件包提供,但是在安装nfs-utils时候,需要同时安装rpcbind

[root@NFS-Server~]# yum install nfs-utils rpcbind -y

2)配置/etc/exports文件

格式:共享目录  允许连接的客户机(选项)

例如:

[root@NFS-Server~]# cat /etc/exports

/share192.168.254.0/24(rw,no_root_squash)

注意

共享的目录的路径必须是绝对路径,不能使用符号链接

设置客户端访问的时需要遵循下面格式

客户端指定方式 示例
使用IP地址指定单一主机 10.20.30.40
使用IP地址指定范围主机 172.16.0.0/16
使用IP地址指定范围主机 192.168.1.*
使用域名指定单一主机 Test.ice.apple
使用域名指定范围主机 *.ice.apple
使用通配符指定所有主机 *


设置“选项”中一些常见的选项


参数 说明
ro 设置共享权限为只读
rw 设置共享权限为读写
root_squash 当使用NFS服务器共享目录的使用者是root时,将被映射为匿名账号。即:NFS 主机使用共享目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份
no_root_squash 当使用NFS服务器共享目录的使用者是root时,将不被映射为匿名账号。即:NFS 主机使用共享目录的使用者,如果是 root 的话,那么对于这个共享的目录来说,他就具有 root 的权限!这个项目极不安全,不建议使用!
all_squash 将所有使用NFS服务器共享目录的使用者都映射为匿名账号
anonuid 设置匿名账号的UID
anongid 设置匿名账号的GID
sync 保持数据同步,也就是将数据同步写入内存和硬盘。这可能导致效率降低
async 数据会先暂存内存中,而不直接写入硬盘


3)以上面为例,设置好之后,启动NFS服务

[root@NFS-Server ~]# servicerpcbind start

Starting rpcbind:                                         [  OK  ]

[root@NFS-Server ~]# servicenfs start

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

Starting NFS daemon:                                       [ OK  ]

注意必须是先启动rpcbind再启动nfs。否则会报错,nfs无法启动过

[root@NFS-Server ~]# service rpcbindstop         

Stopping rpcbind:                                         [  OK  ]

[root@NFS-Server ~]# service nfs restart

Shutting down NFS daemon:                                  [  OK  ]

Shutting down NFS mountd:                                  [  OK  ]

Shutting down NFS quotas:                                  [  OK  ]

Shutting down NFS services:                                [ OK  ]

Starting NFS services:                                     [  OK  ]

Starting NFS quotas: Cannot registerservice: RPC: Unable to receive; errno = Connection refused

rpc.rquotad: unable to register(RQUOTAPROG, RQUOTAVERS, udp).

                                                          [FAILED]

Starting NFS mountd:                                       [FAILED]

Starting NFS daemon: rpc.nfsd: writing fdto kernel failed: errno 111 (Connection refused)

rpc.nfsd: unable to set any sockets for nfsd

                                                          [FAILED]

4)在客户机上只需要安装nfs-utils即可,否则无法查看和挂载

[root@NFS-Client ~]# yum install nfs-utils�Cy

[root@NFS-Client ~]# showmount -e192.168.254.20

Export list for 192.168.254.20:

/share 192.168.254.0/24

[root@NFS-Client ~]# mount -t nfs192.168.254.20:/share /fuzj/

此时,客户端已经能正常使用挂载过来的共享目录,其中的权限问题可以根据实际要求进行设置。

但是,本次的挂载重启之后就失效了,需要设置开机自动挂载:

[root@NFS-Client ~]# echo"192.168.254.20:/share /fuzj nfs defaults 0 0" >> /etc/fstab

[root@NFS-Client ~]# tail -1 /etc/fstab

192.168.254.20:/share /fuzj nfs defaults 00

或者写入开机启动脚本中

[root@NFS-Client ~]# echo "mount -tnfs 192.168.254.20:/share /fuzj/" >> /etc/rc.local

[root@NFS-Client ~]# tail -1 /etc/rc.local

mount -t nfs 192.168.254.20:/share /fuzj/

 

5Exportfs的用法:

exportfs命令:用于维护当前主机中NFS服务器的输出目录列表

exportfs �Crv使NFS服务器重新读取exports文件的设置,而不需重启NFS服务器

exportfs �Cauv 用于停止当前主机中NFS服务器的所有目录输出

exportfs �Cav 用于输出NFS服务器的所有共享目录

exportfs �Cv 显示输出列表同时,显示导出的设定参数

6) Mount挂载的用法:

  命令格式:mount [-t vfstype][-o options] device dir

-t  vfstype指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
 
光盘或光盘镜像:iso9660
  DOS fat16文件系统:msdos
  Windows 9x fat32文件系统:vfat
  Windows NT ntfs文件系统:ntfs
  Mount Windows文件网络共享:smbfs
  UNIX(LINUX) 文件网络共享:nfs

-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop
:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集

device 要挂接(mount)的设备。

dir设备在系统上的挂接点(mount point)。

 

 

6)NFS服务的端口

NFS 用到的服务有 portmapper,nfs,rquotad,nlockmgr,mountd 通过命令 rpcinfo -p 可查看nfs使用的端口:

 

[root@NFS-Server ~]# rpcinfo-p

   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

   100005    1   udp 56539  mountd

   100005    1   tcp 53349  mountd

   100005    2   udp 53899  mountd

   100005    2   tcp 59989  mountd

   100005    3   udp 47966  mountd

   100005    3   tcp 55849  mountd

   100003    2   tcp  2049  nfs

   100003    3   tcp  2049  nfs

   100003    4   tcp  2049  nfs

   100227    2   tcp   2049 nfs_acl

   100227    3   tcp  2049  nfs_acl

   100003    2   udp  2049  nfs

   100003    3   udp  2049  nfs

   100003    4   udp  2049  nfs

   100227    2   udp  2049  nfs_acl

   100227    3   udp  2049  nfs_acl

   100021    1   udp 47039  nlockmgr

   100021    3   udp 47039  nlockmgr

   100021    4   udp 47039  nlockmgr

   100021    1   tcp 35091  nlockmgr

   100021    3   tcp 35091  nlockmgr

100021    4  tcp  35091  nlockmgr

 

其中 portmapper,nfs 服务端口是固定的分别是 111和2049;

另外 rquotad,nlockmgr,mountd 服务端口是随机的。由于端口是随机的,这导致防火墙无法设置

这时需要配置/etc/sysconfig/nfs 使 rquotad,nlockmgr,mountd的端口固定。

RQUOTAD_PORT=800

LOCKD_TCPPORT=30000

LOCKD_UDPPORT=30001

MOUNTD_PORT=900

注意填写的端口不要和系统其他的服务端口冲突

改完之后,重启nfs服务,继续查看,发现端口已经改变,而且已经固定。

[root@NFS-Server ~]# rpcinfo-p           

  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   800  rquotad

   100011    2   udp   800  rquotad

   100011    1   tcp   800  rquotad

   100011    2   tcp   800  rquotad

   100005    1   udp   900  mountd

   100005    1   tcp   900  mountd

   100005    2   udp   900  mountd

   100005    2   tcp   900  mountd

   100005    3   udp   900  mountd

   100005    3   tcp   900  mountd

   100003    2   tcp  2049  nfs

   100003    3   tcp  2049  nfs

   100003    4   tcp  2049  nfs

   100227    2   tcp  2049  nfs_acl

   100227    3   tcp  2049  nfs_acl

   100003    2   udp  2049  nfs

   100003    3   udp  2049  nfs

   100003    4   udp  2049  nfs

   100227    2   udp  2049  nfs_acl

    100227   3   udp   2049 nfs_acl

   100021    1   udp 30001  nlockmgr

   100021    3   udp 30001  nlockmgr

   100021    4   udp 30001  nlockmgr

   100021    1   tcp 30000  nlockmgr

   100021    3   tcp 30000  nlockmgr

100021    4  tcp  30000  nlockmgr

 

输入一下防火墙规则,允许nfs通过防火墙

iptables -I INPUT -p tcp --dport 111 -jACCEPT

iptables -I INPUT -p udp --dport 111 -jACCEPT

iptables -I INPUT -p tcp --dport 2049 -jACCEPT

iptables -I INPUT -p udp --dport 2049 -jACCEPT

iptables -I INPUT -p tcp --dport 900 -jACCEPT

iptables -I INPUT -p udp --dport 900 -jACCEPT

iptables -I INPUT -p tcp --dport 800 -jACCEPT

iptables -I INPUT -p udp --dport 800 -jACCEPT

iptables -I INPUT -p tcp --dport 30000 -jACCEPT

iptables -I INPUT -p udp --dport 30001 -jACCEPT

iptables -I INPUT -p tcp --dport 662 -jACCEPT

iptables -I INPUT -p udp --dport 662 -jACCEPT

 

 

NFS服务器必须开启的2个服务:nfs、rpcbind

NFS客户端要实现开机自动挂载,必须开启netfs服务

 

如果要实现开机自动启动,建议别把防火墙启动添加到/etc/rc.local中,否则在启动的时候由于防火墙的限制,依然会卡在守护进程那里,导致无法进入系统。切记。解决方法我在进一步研究中!

 

NFS关于selinux的设置

Setsebool�CP allow_gssd_read_tmp 1

Setsebool�CP allow_nfsd_anon_write 1

Setsebool�CP nfs_export_all_ro  1

Setsebool�CP nfs_export_all_rw  1

Setsebool�CP use_nfs_home_dirs  1





















你可能感兴趣的:(服务,nfs)