NFS配置管理

From: http://www.goooogle.com.cn/Article/NFS-configuration-and-management.aspx


1. NFS概述
 NFS即网络文件系统,是主机间通过网络进行文件共享的网络协议,最早由Sun公司提出的,多用于Unix操作系统(Windows中也有相应版本的实现) 。
 NFS通常情况下在局域网中使用,用于多台主机共享同一主机上的文件将源。由于NFS具有共享文件访问快、稳定性高等优越性能,在工程系统中得到了广泛应用。


 以下应用环境:
 OS:  LINUX AS4/Cent OS 5.2
 NFS Server: 192.168.146.53 hostname 53
 NFS Client: 192.168.146.51 hostname 51
   192.168.146.52 hostname 52
   192.168.138.250 hostname 250

2. NFS安装
[root@53 ~]# rpm -q nfs-utils portmap
nfs-utils-1.0.9-33.el5
portmap-4.0-65.2.2.1
//系统中已安装两个软件包

2.1 NFS的安装包文件

2.2 portmap软件包
 protmap软件包中的portmap服务,为NFS和NIS等提供RPC服务的支持,因此在安装时应先安装portmap软件包。
[root@53 ~]# rpm -ql portmap
/etc/rc.d/init.d/portmap
/sbin/portmap
/usr/sbin/pmap_dump
/usr/sbin/pmap_set
/usr/share/doc/portmap-4.0
/usr/share/doc/portmap-4.0/BLURB
/usr/share/doc/portmap-4.0/CHANGES
/usr/share/doc/portmap-4.0/README
/usr/share/man/man8/pmap_dump.8.gz
/usr/share/man/man8/pmap_set.8.gz
/usr/share/man/man8/portmap.8.gz

2.3 nfs-utils软件包
nfs-utils软件包中提供了NFS服务器程序和相应的维护工具。
[root@53 ~]# rpm -ql portmap
/etc/rc.d/init.d/portmap
/sbin/portmap
/usr/sbin/pmap_dump
/usr/sbin/pmap_set
/usr/share/doc/portmap-4.0
/usr/share/doc/portmap-4.0/BLURB
/usr/share/doc/portmap-4.0/CHANGES
/usr/share/doc/portmap-4.0/README
/usr/share/man/man8/pmap_dump.8.gz
/usr/share/man/man8/pmap_set.8.gz
/usr/share/man/man8/portmap.8.gz
[root@53 ~]# rpm -ql nfs-utils|head
/etc/idmapd.conf
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
/etc/sysconfig/nfs
/sbin/mount.nfs
/sbin/mount.nfs4
/sbin/rpc.lockd
[root@53 ~]# rpm -ql nfs-utils
/etc/idmapd.conf
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
/etc/sysconfig/nfs
/sbin/mount.nfs
/sbin/mount.nfs4
/sbin/rpc.lockd
/sbin/rpc.statd
/sbin/umount.nfs
/sbin/umount.nfs4
/usr/sbin/exportfs
/usr/sbin/gss_clnt_send_err
/usr/sbin/gss_destroy_creds
/usr/sbin/nfsstat
/usr/sbin/nhfsgraph
/usr/sbin/nhfsnums
/usr/sbin/nhfsrun
/usr/sbin/nhfsstone
/usr/sbin/rpc.gssd
/usr/sbin/rpc.idmapd
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
/usr/sbin/rpc.svcgssd
/usr/sbin/rpcdebug
/usr/sbin/showmount
/usr/share/doc/nfs-utils-1.0.9
/usr/share/doc/nfs-utils-1.0.9/ChangeLog
/usr/share/doc/nfs-utils-1.0.9/INSTALL
/usr/share/doc/nfs-utils-1.0.9/KNOWNBUGS
/usr/share/doc/nfs-utils-1.0.9/Makefile
/usr/share/doc/nfs-utils-1.0.9/Makefile.am
/usr/share/doc/nfs-utils-1.0.9/Makefile.in
/usr/share/doc/nfs-utils-1.0.9/NEW
/usr/share/doc/nfs-utils-1.0.9/README
/usr/share/doc/nfs-utils-1.0.9/THANKS
/usr/share/doc/nfs-utils-1.0.9/TODO
/usr/share/man/man5/exports.5.gz
/usr/share/man/man5/idmapd.conf.5.gz
/usr/share/man/man5/nfs.5.gz
/usr/share/man/man7/nfsd.7.gz
/usr/share/man/man8/exportfs.8.gz
/usr/share/man/man8/gssd.8.gz
/usr/share/man/man8/idmapd.8.gz
/usr/share/man/man8/lockd.8.gz
/usr/share/man/man8/mount.nfs.8.gz
/usr/share/man/man8/mountd.8.gz
/usr/share/man/man8/nfsd.8.gz
/usr/share/man/man8/nfsstat.8.gz
/usr/share/man/man8/nhfsgraph.8.gz
/usr/share/man/man8/nhfsnums.8.gz
/usr/share/man/man8/nhfsrun.8.gz
/usr/share/man/man8/nhfsstone.8.gz
/usr/share/man/man8/rpc.gssd.8.gz
/usr/share/man/man8/rpc.idmapd.8.gz
/usr/share/man/man8/rpc.lockd.8.gz
/usr/share/man/man8/rpc.mountd.8.gz
/usr/share/man/man8/rpc.nfsd.8.gz
/usr/share/man/man8/rpc.statd.8.gz
/usr/share/man/man8/rpc.svcgssd.8.gz
/usr/share/man/man8/rpcdebug.8.gz
/usr/share/man/man8/showmount.8.gz
/usr/share/man/man8/statd.8.gz
/usr/share/man/man8/svcgssd.8.gz
/usr/share/man/man8/umount.nfs.8.gz
/var/lib/nfs
/var/lib/nfs/etab
/var/lib/nfs/rmtab
/var/lib/nfs/rpc_pipefs
/var/lib/nfs/statd
/var/lib/nfs/state
/var/lib/nfs/v4recovery
/var/lib/nfs/xtab

3. NFS服务器的配置
3.1 NFS服务器的配置文件--exports
 exports文件在目录“/etc”下,用于配置NFS服务器所提供的目录共享。此文件默认设置为空,没有配置的输出的任何的目录共享,这也是出于安全性的考虑,这样即使系统启动NFS服务也不会提供任何的共享。
 如果需要在NFS服务器中输出某个目录的共享,需要先在exports文件中进行相应的设置。

3.2 exports文件的格式
 exports文件中每行提供一个共享目录的设置,设置行的格式如下所示:
#要输出的共享目录名 客户端主机地址(设置选择)
/home/share  *(sync,ro)

 在exports文件的设置行中,共享目录和主机地址间用空格分隔,主机地址之后紧随设置选项,设置选项放置在括号中,多个设置选项间用逗号分隔。
1) 共享目录
 共享目录设置系统中需要输出作为共享的目录路径,该目录用于存放网络中其它主机共享的文件。

2) 客户端主机地址
 在exports文件中,客户端主机地址的指定非常灵活,可以是单个主机的IP地址或域名,也只可以是指定网段中的主机或指定域中的主机,如下:
主机地址格式
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
客户端主机地址  说明
────────────────────────────
192.168.1.19  指定IP地址的主机
nfsclient.test.com 指定域名的主机
192.168.1.0/24  指定网段中的所有主机
*.test.com  指定域中的所有主机
*   所有主机
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3) 设置选项
 exports文件中的设置选项较多,经常使用的不多,如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
设置选项 说明
───────────────────────────────────────────
sync  设置NFS服务器同步写磁盘,这样不会轻易丢失数据,NFS服务器建议使用该选项
ro  设置输出的共享目录只读,与rw不能同时使用
rw  设置输入的共享目录可读写,与ro不能同时使用
secure  NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay  如果多个用户要写入NFS目录,则归组写入(默认) 
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide  在NFS共享目录中不共享其子目录
no_hide  共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) 
no_subtree_check和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认) 
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认) 
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

4) exports文件配置实例
 在exports文件中,同一输出共享目录对于不同的主机可以有不同的设置选项,各主机间用空格分隔。
# more /etc/exports
/home/share *(sync,ro) 192.168.1.19(sync,rw)
/home/ftp 192.168.1.0/24(sync,ro)
/home/public 192.168.1.19(sync,rw)

[root@53 ~]# cat /etc/exports
/nfs/mail       192.168.146.51(sync,rw) 192.168.146.52(sync,rw)
/nfs/netdisk    192.168.146.51(sync,rw) 192.168.146.52(sync,rw) 192.168.138.250(sync,rw)

3.3 NFS服务器的启动与停止
1) 启动NFS服务器
[root@53 ~]# service portmap start
Starting portmap:                                          [  OK  ]
[root@53 ~]# service nfs start   
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]

2) 查询NFS服务器状态
[root@localhost ~]# service portmap status
portmap (pid 2910) is running...
[root@localhost ~]# service nfs status   
rpc.mountd (pid 9740) is running...
nfsd (pid 9737 9736 9735 9734 9733 9732 9731 9730) is running...

3) 停止NFS服务器
 在需要停止NFS服务器运行时,需要先停止nfs服务再停止portmap服务,对于系统中有其他服务(如NIS服务) 需要使用portmap服务时,不需要停止portmap服务
[root@53 ~]# service nfs stop
关闭 NFS mountd:                                          [  确定  ]
关闭 NFS 守护进程:                                        [  确定  ]
关闭 NFS quotas:                                          [  确定  ]
关闭 NFS 服务:                                            [  确定  ]
[root@53 ~]# service portmap stop
停止 portmap:                                             [  确定  ]

4) 设置NFS服务器的自动启动状态
// 查看
[root@53 ~]# chkconfig --list portmap
portmap         0:off   1:off   2:off   3:on    4:on    5:on    6:off
[root@localhost ~]# chkconfig --list nfs
nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off
// 设置
[root@53 ~]# chkconfig --level 345 portmap on
[root@53 ~]# chkconfig --level 345 nfs on
// 查看设置结果
[root@53 ~]# chkconfig --list portmap
portmap         0:off   1:off   2:off   3:on    4:on    5:on    6:off
[root@53 ~]# chkconfig --list nfs
nfs             0:off   1:off   2:off   3:on    4:on    5:on    6:off

3.4 showmount命令
 在设置了NFS共享目录并正确启动了NFS服务器后,可以使用showmount命令查询NFS服务器的共享目录状态。
1) 显示showmount命令帮助
[root@datacenter ~]# showmount -h
Usage: showmount [-adehv]
       [--all] [--directories] [--exports]
       [--no-headers] [--help] [--version] [host]

2) 显示主机的NFS服务器信息
showmount [NFS服务器主机地址]
[root@53 ~]# showmount
Hosts on localhost.localdomain:
[root@53 ~]# showmount 192.168.146.53
Hosts on 192.168.146.53:

3) 显示NFS服务器的输出列表
showmount -e [NFS服务器主机地址]
[root@53 ~]# showmount -e
Export list for localhost.localdomain:
/nfs/mail    192.168.146.52,192.168.146.51
/nfs/netdisk 192.168.146.52,192.168.146.51

4) 显示NFS服务器中被挂载的目录
showmount -d [NFS服务器主机地址]
[root@53 ~]# showmount -d
Directories on localhost.localdomain:
/nfs/netdisk
[root@53 ~]# showmount -d 192.168.146.53
Directories on 192.168.146.53:
/nfs/netdisk
5) 显示NFS服务器的客户机与被挂载的目录
showmount -a [NFS服务器主机地址]
[root@53 ~]# showmount -a
All mount points on localhost.localdomain:
192.168.138.250:/nfs/netdisk

3.5 exportfs命令
 usage: exportfs [-aruv] [host:/path]
 exportfs命令用于维护当前主机中NFS服务器的输出目录列表。
1) 重新输出共享目录(exportfs -rv)
 exportfs -rv使用NFS服务器重新读取exports文件中的设置,使用该命令可以在改变exports文件设置后,使设置在当前NFS服务器中生效,而不需要重新启动NFS服务器。
[root@53 ~]# exportfs -rv
exporting 192.168.146.51:/nfs/netdisk
exporting 192.168.146.52:/nfs/netdisk
exporting 192.168.146.51:/nfs/mail
exporting 192.168.146.52:/nfs/mail

2) 停止输出所有目录
# exportfs -auv

3) 输出所有目录
# exportfs -av

4. NFS客户端设置
 可以便用mount命令把网络中NFS服务器的共享目录挂载到本机的文件系统中。
4.1 显示NFS服务器的输出共享目录
 在便用mount命令挂载NFS服务器的共享目录之前,先查询NFS服务器中是否允许本机连接相应的共享目录。
[root@192.168.146.52 ~]# showmount -e 192.168.146.53
Export list for 192.168.146.53:
/nfs/mail    192.168.146.52,192.168.146.51
/nfs/netdisk 192.168.146.52,192.168.146.51

4.2 挂载NFS服务器中的共享目录
mount NFS服务器地址:共享目录 本地挂载点目录
[root@51 ~]# mount -h
Usage: mount -V                 : print version
       mount -h                 : print this help
       mount                    : list mounted filesystems
       mount -l                 : idem, including volume labels
So far the informational part. Next the mounting.
The command is `mount [-t fstype] something somewhere'.
Details found in /etc/fstab may be omitted.
       mount -a [-t|-O] ...     : mount all stuff from /etc/fstab
       mount device             : mount device at the known place
       mount directory          : mount known device here
       mount -t type dev dir    : ordinary mount command
Note that one does not really mount a device, one mounts
a filesystem (of the given type) found on the device.
One can also mount an already visible directory tree elsewhere:
       mount --bind olddir newdir
or move a subtree:
       mount --move olddir newdir
One can change the type of mount containing the directory dir:
       mount --make-shared dir
       mount --make-slave dir
       mount --make-private dir
       mount --make-unbindable dir
One can change the type of all the mounts in a mount subtree
containing the directory dir:
       mount --make-rshared dir
       mount --make-rslave dir
       mount --make-rprivate dir
       mount --make-runbindable dir
A device can be given by name, say /dev/hda1 or /dev/cdrom,
or by label, using  -L label  or by uuid, using  -U uuid .
Other options: [-nfFrsvw] [-o options] [-p passwdfd].
For many more details, say  man 8 mount .

# mount 192.168.146.53:/nfs/netdisk /netdisk/
// 挂载点“/netdisk/”是已经建立的空目录,可以便用其它的空目录
[root@250 ~]# mount 192.168.146.53:/nfs/netdisk /mnt/
4.3 显示当前主机挂载的NFS目录
[root@250 ~]# mount | grep net

4.4 卸载已挂载的NFS共享目录
[root@250 ~]# umount /mnt/
// 目录“/mnt/”为NFS共享目录挂载点

5. NFS服务器配置程序
1) 安装NFS工具
// 查询有无安装相关软件包,
# rpm -q redhat-config-nfs
// 如没有可以下载安装或者通过光盘安装
# mount /mnt/cdrom/
# rpm -ivh /mnt/cdrom/RedHat/RPMS/redhat-config-nfs-x.x.x-x.rpm

2)  启动NFS服务器配置程序
X-Windows图形环境中:
“主菜单”=>“系统设置”=>“服务器设置”=>“NFS服务器”
命令行:
# redhat-config-nfs

6. NFS安全
NFS的不安全性主要体现于以下4个方面:
1、新手对NFS的访问控制机制难于做到得心应手,控制目标的精确性难以实现
2、NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制
3、较早的NFS可以使未授权用户获得有效的文件句柄
4、在RPC远程调用中,一个SUID的程序就具有超级用户权限.

加强NFS安全的方法:
1、合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用root_squash。
2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
3、为了防止可能的Dos攻击,需要合理设定NFSD的COPY数目。
4、修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
/etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 : allow
portmap: 140.116.44.125 : allow

/etc/hosts.deny
portmap: ALL : deny
5、改变默认的NFS端口
NFS默认使用的是111端口,但同时你也可以使用port参数来改变这个端口,这样就可以在一定程度上增强安全性。
6、使用Kerberos V5作为登陆验证系统

7.NFS故障解决
1、NFSD没有启动起来
首先要确认NFS输出列表存在,否则nfsd不会启动。可用exportfs命令来检查,如果exportfs命令没有结果返回或返回不正确,则需要检查/etc/exports文件。
2、mountd进程没有启动
mountd进程是一个远程过程调用(RPC),其作用是对客户端要求安装(mount) 文件系统的申请作出响应。mountd进程通过查找/etc/xtab文件来获知哪些文件系统可以被远程客户端使用。另外,通过mountd进程,用户可以知道目前有哪些文件系统已被远程文件系统装配,并得知远程客户端的列表。查看mountd是否正常启动起来可以使用命令rpcinfo进行查看,在正常情况下在输出的列表中应该象这样的行:
100005 1 udp 1039 mountd
100005 1 tcp 1113 mountd
100005 2 udp 1039 mountd
100005 2 tcp 1113 mountd
100005 3 udp 1039 mountd
100005 3 tcp 1113 mountd
如果没有起来的话可以检查是否安装了PORTMAP组件。
rpm -qa|grep portmap
3、fs type nfs no supported by kernel
kernel不支持nfs文件系统,重新编译一下KERNEL就可以解决。
4、can't contact portmapper: RPC: Remote system error - Connection refused
出现这个错误信息是由于SEVER端的PORTMAP没有启动。
5、mount clntudp_create: RPC: Program not registered
NFS没有启动起来,可以用showmout -e host命令来检查NFS SERVER是否正常启动起来。
6、mount: localhost:/home/test failed, reason given by server: Permission denied
这个提示是当client要mount nfs server时可能出现的提示,意思是说本机没有权限去mount nfs server上的目录。解决方法当然是去修改NFS SERVER咯。
7、被防火墙阻挡
这个原因很多人都忽视了,在有严格要求的网络环境中,我们一般会关闭linux上的所有端口,当需要使用哪个端口的时候才会去打开。而NFS默认是使用111端口,所以我们先要检测是否打开了这个端口,另外也要检查TCP_Wrappers的设定。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值