1. NFS概述
NFS:Network File System网络文件系统。用于unix-like操作系统之间进行文件的共享。通过NFS,客户端可以将服务器端共享出来的目录挂载到本地,就像操作本地文件一样。而NFS在启动之前需要向RPC注册,告诉RPC,相应的服务所使用的端口。NFS可以说是RPC服务的一种。NFS通常情况下启动的端口为2049端口,RPC启动的端口为111端口,而NFS如果要想提供其他的服务,则还要启动不同的端口,这些端口都是随机的,如果不向RPC注册的话,客户端将不知道服务器端打开的端口。
RPC:远程过程调用。RPC定义了一种进程间通过网络进行交互通信的机制,它允许客户端进程通过网络向远程服务进程请求服务,而不需要了解服务器底层的通信协议详细信息。NFS在启动的时候,至少要启动2个服务,一个是管理客户端能否登入主机,一个是管理客户端取得的权限问题。
rpc.nfsd:管理客户端能否登入主机。
rpc.mountd:管理NFS共享的文件系统以及客户端的权限问题。当客户端顺利的通过rpc.nfsd登入主机后,在使用服务器提供的文件之前要经过共享文件的权限认证以及在/etc/exportfs里面所定义的权限,如果通过,则允许使用nfs提供的共享文件。
rpc.lockd:这个服务需要在客户端和服务器端同时开启才有用。当多个客户端对同一文件进行读写时就有可能产生一些问题,该服务可以克服这个问题。常和rpc.statd同时使用。
rpc.statd:这个服务需要在客户端和服务器端同时开启才有用。用来检查档案的一致性。当多个客户端同时使用同一档案时可能会存在错误,该服务可以用来检测并尝试恢复该档案。
2. NFS的安装和配置
2.1 NFS的安装
所需软件包:
RPC的主程序:rpcbind
NFS的主程序:nfs-utils
安装:yum install -y rpcbind nfs-utils
[root@server1 ~]#yum install -y rpcbind nfs-utils
2.2 服务的启动停止与开机自动启动
[root@server1 ~]#/etc/init.d/nfs
Usage: nfs{start|stop|status|restart|reload|force-reload|condrestart|try-restart|condstop}
[root@server1 ~]#
设置开机自动启动:
[root@server1 ~]#chkconfig --list | grep nfs
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@server1 ~]#chkconfig nfs --level 35 on
[root@server1 ~]#chkconfig --list | grep nfs
nfs 0:off 1:off 2:off 3:on 4:off 5:on 6:off
nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@server1 ~]#
设置RPC的开机自动启动:
[root@server1 ~]# chkconfigrpcbind --level 35 on
[root@server1 ~]#
2.3 NFS的配置
NFS的配置文件为:/etc/exports
该文件的语法结构为:
1. 以#开头的表示注释
2. 大小写敏感
3. 语法格式为:
共享目录客户端1(参数1) 客户端2(参数2) ……
各个字段的含义如下:
共享目录:指定要共享的目录的实际路径。如/opt/test
客户端:指定哪些客户端可以访问共享目录。如果不指定则所有的客户端均可以访问。客户端的匹配条件如下:
指定单一主机:如192.168.1.1或者是通过FQDN的方式,如nfs.frame.com
指定网段:如192.168.1.0/255.255.255.0或192.168.1.0/24或192.168.1.*
指定域名范围:如*.frame.com,则表示客户端的DNS后缀为frame.com的都放行。
所有主机:*
参数:对满足客户端匹配条件的客户端的权限设置。常用的如下:
ro:默认选项,以只读的方式共享。
rw:以读写的方式共享。
root_squash:将客户端使用的是root用户时,则映射到NFS服务器的用户为NFS的匿名用户(nfsnobody)。
no_root_squash:将客户端使用的是root用户时,则映射到FNS服务器的用户依然为root用户。
all_squash:默认选项,将所有访问NFS服务器的客户端的用户都映射为匿名用户,不管客户端使用的是什么用户。
anonuid:设置匿名用户的UID
anongid:设置匿名用户的GID
sync:默认选项,保持数据同步,数据同步写入到内存和硬盘。
async:先将数据写入到内存,在将数据写入到硬盘。
secure:NFS客户端必须使用NFS保留端口(通常是1024以下的端口),默认选项。
insecure:允许NFS客户端不使用NFS保留端口(通常是1024以上的端口)。
示例:
设置共享目录
/ftp-directory *.frame.com(rw,no_root_squash)
/ftp-directory *.frame.com(rw,all_squash,anonuid=501,anongid=501)
设置完成以后,需要使用/etc/init.d/nfs restart将NFS服务器重新启动或者是使用exportfs-avr使配置生效。
[root@server1 ~]#exportfs -auv
[root@server1 ~]#exportfs -arv
exporting*.frame.com:/ftp-directory
[root@server1 ~]#
2.4 NFS启动在固定端口
NFS主程序使用的端口是2049端口,为了实现不同的功能,需要启用不同的端口,而这些端口需要向RPC注册,但是在配置防火墙时,由于这些端口不是固定的,因此配置起来就比较麻烦,为了方便防火墙的配置,因此需要让NFS启动在固定的端口,配置如下:
修改配置文件:/etc/sysconfig/nfs
LOCKD_TCPPORT=3001
LOCKD_UDPPORT=3001
MOUNTD_PORT=3002
STATD_PORT=3003
STATD_OUTGOING_PORT=3004
将上述几个端口修改为相应的端口。
防火墙的设置:
iptables -A INPUT-i eth0 -p tcp -s 172.17.100.0/24 -d 172.17.100.254 -m multiport --dport111,2049,3001:3004 -j ACCEPT
iptables -A INPUT-i eth0 -p udp -s 172.17.100.0/24 -d 172.17.100.254 -m multiport --dport111,2049,3001:3004 -j ACCEPT
2.5 客户端查看服务器端的共享
客户端可以使用showmount -e查看客户端的共享目录。
格式:
showmount -e 服务的ip地址或FQDN
IP地址方式:
[root@server2 ~]# showmount-e 172.17.100.254
Export list for172.17.100.254:
/ftp-directory*.frame.com
[root@server2 ~]#
FQDN的方式:
[root@server2 ~]#showmount -e nfs.frame.com
Export list fornfs.frame.com:
/ftp-directory*.frame.com
[root@server2 ~]#
2.6 客户端挂载
格式:
mount -t nfsip|fqdn:共享目录本地目录
如:
[root@server2 ~]#mkdir /nfs-mount
[root@server2 ~]# mount -t nfsnfs.frame.com:/ftp-directory /nfs-mount/
[root@server2 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 6.3G 11G 38% /
tmpfs 244M 0 244M 0% /dev/shm
/dev/sda1 194M 32M 153M 18% /boot
nfs.frame.com:/ftp-directory
20G 7.4G 11G 41% /nfs-mount
[root@server2 ~]#
2.7 自动挂载
最好不要用/etc/fstab设置开机自动挂载,有可能会由于服务的启动顺序导致挂载失败,影响开机时间。可以通过autofs自动挂载。
步骤如下:
1. 编辑/etc/auto.master文件
增加如下内容:
/- /etc/auto.nfs
2. 新建/etc/auto.nfs文件,增加如下内容:
/mnt/nfs -fsytpe=nfs ip|fqdn:共享目录
如:
/mnt/nfs -fstype=nfs 172.17.100.254:/ftp-directory
3. 重启autofs服务
/etc/init.d/autofs stop
/etc/init.d/autofs start
注意:一定要先stop,然后在start,如果直接restart的话,可能会有问题。
这样设置完以后,当我们需要使用/mnt/nfs目录时,系统就会自动的帮我们进行挂载。
3. exportfs命令参考
常用的:
exportfs -auv所有共享的目录停止共享
exportfs -arv重新共享
4. 客户端测试
autofs:
[root@server2 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 6.3G 11G 38% /
tmpfs 244M 0 244M 0% /dev/shm
/dev/sda1 194M 32M 153M 18% /boot
[root@server2 ~]#cd /mnt/nfs
[root@server2 nfs]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 6.3G 11G 38% /
tmpfs 244M 0 244M 0% /dev/shm
/dev/sda1 194M 32M 153M 18% /boot
172.17.100.254:/ftp-directory
20G 7.4G 11G 41% /mnt/nfs
[root@server2 nfs]#
系统自动挂载……
创建文件,测试写权限:
[root@server2 nfs]#touch nfs-test
[root@server2 nfs]#ll
total 0
-rw-r--r--. 1nobody nobody 0 Mar 3 2014 nfs-test
[root@server2 nfs]#
服务器端查看该文件的拥有者和所属组:
[root@server1 ~]#cd /ftp-directory/
[root@server1ftp-directory]# ll
total 0
-rw-r--r-- 1ftpuser ftpuser 0 Mar 3 17:38 nfs-test
[root@server1ftp-directory]# cat /etc/exports
/ftp-directory 172.17.100.0/24(rw,all_squash,anonuid=501,anongid=501)
[root@server1ftp-directory]# grep 501 /etc/passwd
ftpuser:x:501:501::/ftp-directory:/sbin/nologin
[root@server1ftp-directory]#
因为我们这里面设置的权限是将所有的用户都映射为匿名用户,而指定匿名用户的UIDheGID都为501,在服务器端,501所对应的用户为ftpuser。
转载于:https://blog.51cto.com/hezhang/1366982