NFS服务的配置。
NFS简介
NFS,全称Network File System。网络文件系统,最早由Sun公司开发,它的功能是在不同的机器、不同的操作系统之间实现文件的共享。NFS传输数据时使用的端口是一个随机端口。
RPC,远程过程调用。它的功能是指定每个NFS功能对应的端口号,当NFS服务器启动时会随机启用数个端口号,并主动向RPC注册,这样RPC就知道每个端口号对应的功能了,RPC使用111号端口来监听客户机的请求并回应正确的端口号。
启动NFS之前要先启动RPC,否则NFS无法向RPC注册,当RPC重新启动后,原来注册的端口数据会丢失,这时,它管理的所有程序都必须重新向RPC注册。
NFS工作原理
1) 客户机发送RPC请求到远程NFS服务器中。
2) NFS服务器利用PORTMAP服务查询NFS的工作端口。
3) 客户机联系要装载的分区,同时服务器会验证客户机是否有权加载。
4) 客户机更新MTAB文件,表示加裁成功。
NFS基本配置
查询软件是否安装:
[root@yuhulin ~]# rpm -qa | grep nfs
nfs-utils-1.0.9-40.el5
nfs-utils-lib-1.0.8-7.2.z2
[root@yuhulin ~]# rpm -qa | grep protmap
[root@yuhulin ~]# rpm -ivh /misc/cd/Server/portmap-4.0-65.2.2.1.i386.rpm
Preparing... ########################################### [1%]
package portmap-4.0-65.2.2.1.i386 is already installed
这个软件已经安装了。
/etc/exports
这个是NFS的主要配置文件,但没有默认值,空的。
/usr/sbin/exportfs
维护NFS共享资源的命令。
/usr/sbin/showmount
exportfs用在server端,而showmount则用在客户端,这个命令可以查看NFS服务器共享出来的目录资源。
/var/lib/nfs/
这个目录下有两个重要的日志文件,etab:主要记录NFS共享出来的完整权限设定值,xtab:记录曾连接到此主机的客户机相关数据。
exports内的常用权限参数:
rw //可读写的权限
ro //只读权限
sync //数据同步写入到内存与硬盘中
async //数据只会暂存在内存中
no_root_squash //如果使用root用户登录,就有root用户的权限
root_squash //如果使用root用户登录,就会变成匿名用户的权限
all_squash //不管以什么用户登录,都会变成匿名用户的权限
anonuid //匿名用户uid设置值
anongid //匿名用户gid设置值
示例:
[root@yuhulin ~]# vi /etc/exports
/tmp *(rw)
所有人对/tmp目录都有读写权限。
/tmp *(ro) 192.168.1.1(rw)
所有人对/tmp目录二都有只读权限,而192.168.1.1对这个目录有读写权限。
/tmp 192.168.1.0/24(ro) 192.168.1.1(rw)
192.168.1.0/24这个网段人用户对这个目录有只读权限,而192.168.1.1对这个目录有读写权限。
/tmp *(ro,all_aquash,anonuid=1,anongid=1)
所有人对这个目录都会变成服务器中uid为1,gid为1的用户的权限
[root@yuhulin ~]# service nfs restart
NFS挂载
手工挂载:
mount –t nfs 192.168.1.20:/home /tmp
-t //指定文件类型
ip地址是服务器的地址(也可以使用主机名代替),:后是共享目录,
/tmp是挂载到本机的目录
也可以这样:
mount.nfs 192.168.1.20:/home /tmp
开机自动挂载:
[root@rhel3 ~]# vi /etc/fstab
192.168.1.20:/home /mnt nfs defaults 0 0
服务器名称/ip地址:共享目录 挂载点 文件类型 挂载选项 备份频率 检查选项
[root@rhel3 ~]# vi /etc/rc.d/rc.local
mount.nfs 192.168.1.20:/home /mnt
NFS自动挂载和自动缷载
当使用NFS共享文件时,需要首先挂载,挂载后用户又不是一直在线,只要任一方离线,都会造成另一方等待超时,那么,有没有一个方法能让用户使用时自动挂载,不使用时自动缷载?当然有。使用autofs这个服务。在客户端配置:
[root@rhel3 ~]# vi /etc/auto.master
/nfs /etc/autonfs.conf //添加这一行
/nfs //挂载的主目录。
/etc/autonfs.conf //挂载文件的配置。
[root@rhel3 ~]# mkdir /nfs //添加目录
[root@rhel3 ~]# vi /etc/autonfs.conf //编辑并创建自动挂载文件
home 192.168.1.20:/home
home //本地目录
192.168.1.20:/home //远程挂载的共享目录
中间可以添加一引些挂载选项。
[root@rhel3 ~]# service autofs restart
[root@rhel3 ~]# ls /nfs/home //第一次使用时是没有这个目录的,当访问这个目录时就会自动挂载了。当5分钟没有使用就会自动缷载。
a abc
NFS常用命令
exportfs //查看已共享的目录(服务器端使用)
exportfs选项:
-a //全部mount或umount /etc/exports中的内容
-u //umount内容
-r //重新mount /etc/exports中的内容
-o //共享选项
-v //在exports的时候,将共享的目录显示到屏幕上
客户端查询:
[root@rhel3 ~]# showmount -a 192.168.1.20
All mount points on 192.168.1.20:
192.168.1.30:/home
192.168.1.30:/root
[root@rhel3 ~]# showmount -e 192.168.1.20
Export list for 192.168.1.20:
/home *
/chen 192.168.1.30
NFS常见故障
如果发现挂载不了,出现如下提示:
[root@rhel3 ~]# mount.nfs 192.168.1.20:/home /mnt
mount: mount to NFS server '192.168.1.20' failed: System Error: No route to host.
这很可能是防火墙的问题。
如果还有人在使用NFS,这时服务器需要关机的话,是不能关机的,系统会等到没有用户使用时再关机,如果关机时间很长,看看是不是还有用户在线。
如果使用的是服务器名挂载,要确保服务器名是能解析的。如果没有DNS服务器,可以在/etc/hosts中添加。
NFS综合配置实例
配置NFS服务器,要求如下
该服务器的IP为:192.168.1.203.
(1)共享/mydata目录,要求
192.168.1.0可以只读访问,
192.168.1.15,192.168.1.16,192.168.1.20,192.168.1.30能写访问,
不允许192.168.1.200和192.168.1.198那两台机器访问,
192.168.1.40和192.168.1.50的机器访问此共享时,可以用root用户登录,可写。
所有客户机同步写磁盘
(2)共享光驱(/misc/cd/),要求
所有人只读访问
不允许192.168.1.200和192.168.1.198那两台机器访问
在客户端自动挂载服务器上/mydata目录,挂载到本地的/nfs/nfs目录中
在客户端自动挂载服务器上光驱目录,挂载到本地的/nfs/cdrom目录中
配置步骤:
配置ip地址:
[root@rhel3 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.203
NETMASK=255.255.255.0
[root@rhel3 ~]# service network restart
[root@rhel3 ~]# mkdir /mydata //创建共享目录
[root@rhel3 ~]# rpm -qa |grep nfs //查询nfs安装情况
nfs-utils-lib-1.0.8-7.2.z2
nfs-utils-1.0.9-40.el5
[root@rhel3 ~]# vi /etc/exports
/mydata 192.168.1.15(rw,sync) 192.168.1.16(rw,sync) 192.168.1.20(rw,sync) 192.168.1.30(rw,sync) 192.168.1.40(rw,no_root_squash,sync) 192.168.1.50(rw,no_root_squash,sync) 192.168.1.0/24(ro,sync)
/misc/cd *(ro)
[root@rhel3 ~]# service nfs restart
[root@rhel3 ~]# ll /
drwxr-xr-x 2 root root 4096 Apr 15 02:13 mydata //更改这里的权限,因为这里没有写的权限。
[root@rhel3 ~]# chmod a+w /mydata/
[root@rhel3 ~]# ll /
drwxrwxrwx 2 root root 4096 Apr 15 02:13 mydata
[root@rhel3 ~]# vi /etc/hosts.deny //拒绝以下两台主机访问。
mountd:192.168.1.198,192.168.1.200
接下来实现自动挂载:
方法有三种:第一种修改/etc/fstab文件,第二种修改/etc/rc.d/rc.local文件,第三种实现自动挂载和自动缷载。这里就以第三种为例:
[root@yuhulin /]# vi /etc/auto.master
/nfs /etc/autonfs.conf //添加这一行
[root@yuhulin /]# vi /etc/autonfs.conf //在这之前这个文件是没有的,当编辑好保存之后就有了。
nfs 192.168.1.203:/mydata
cdrom 192.168.1.203:/misc/cd
[root@yuhulin /]# service autofs restart
配置完成,测试:
[root@yuhulin nfs]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:FD:44:C8
inet addr:192.168.1.15 Bcast:192.168.1.255 Mask:255.255.255.0
[root@yuhulin ~]# cd /nfs/nfs/ //第一次进入时/nfs下并没有nfs这个目录,需要手动输入这个目录。
[root@yuhulin nfs]# touch a //这个地址是有写入权限的。
[root@yuhulin nfs]# mkdir abc
[root@yuhulin nfs]# ll
-rw-r--r-- 1 nfsnobody nfsnobody 0 04-16 14:13 a
drwxr-xr-x 2 nfsnobody nfsnobody 4096 04-16 14:13 a
[root@yuhulin nfs]# whoami
root
这里的文件所属用户和所属组都是nfsnobody,当前是root用户。
[root@yuhulin ~]# ifconfig eth0 192.168.1.40 netmask 255.255.255.0
[root@yuhulin ~]# cd /nfs/nfs
[root@yuhulin nfs]# touch rhel
[root@yuhulin nfs]# ll
-rw-r--r-- 1 nfsnobody nfsnobody 0 04-16 14:13 a
drwxr-xr-x 2 nfsnobody nfsnobody 4096 04-16 14:13 abc
-rw-r--r-- 1 root root 0 04-16 14:15 rhel
因为这个地址是允许root用户登录的,所以这里的所属用户和所属组都是root。
更多有关权限的测试就省略了,还可以使用不同的用户进行测试,如当客户端和服务器用户不同时和相同时的文件所属问题。