摘抄自:http://www.linuxidc.com/Linux/2012-05/61527p3.htm

1、NFS概述
 NFS:Network file system,网络文件系统;
 由sun公司1984年推出,用来在网络中的多台计算机间实现资源共享(包括象文件或cd-rom);
 设计的目的是:实现在不同系统间交互使用,所以它的通信协议采用与主机和操作系统无关的技术;
 NFS Server可以看作是File Server,它可以让你的PC通过网络将远端得NFS SERVER共享出来的档案MOUNT到自己的系统中,在CLIENT看来使用NFS的远端文件就象是在使用本地文件一样;
 NFS协议从诞生到现在有多个版本:NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010);
 如何查看nfs当前的版本:
 rpm -qi portmap
 rpm -qi nfs-utils
 NFS服务器的安装:
 可以由多种安装方法:
 ----在安装linux系统时选择安装nfs服务对应的组件;(多数linux发行版本默认安装)
 ----安装nfs的rpm套件包(手动安装)
 rpm -ivh rpm包
 需要5个RPM包。
 setup-*:  共享NFS目录在/etc/exports中定义 (linux默认都安装)
 initscripts-*: 包括引导过程中装载网络目录的基本脚本 (linux默认都安装)
 nfs-utils-*:  包括基本的NFS命令与监控程序 
 portmap-*:  支持安全NFS RPC服务的连接 
 quota-*:    网络上共享的目录配额,包括rpc.rquotad (这个包不是必须的) 
 ----也可以去下载nfs的源代码包,进行编译安装; 
 RPC(Remote Procedure call) NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
 nfs在系统中的后台守护进程:
 nfs
 nfs服务需要启动的其他进程:
rpc.nfsd:接收从远程系统发来的NFS请求,并将这些请求转化为本地文件系统请求;
rpc.mountd:执行被请求的文件系统的挂接和卸载操作;
rpc.portmapper:将远程请求映射到正确的NFS守护程序;
rpc.statd:在远程主机重启时,提供加锁服务;
rpc.quotaed:提供硬盘容量的管理能力,磁盘限额;
rpcinfo -p 可以查看所要的守护进程时候正常运行;
ps -ef | grep nfsd
ps -ef | grep mountd
ps -ef | grep protmap
现在我们来查看服务器上有关NFS服务器启动了哪些端口:
 # lsof -i|grep rpc
 portmap   1931 daemon   3u IPv4   4289   UDP *:sunrpc
 portmap    1931 daemon     4u IPv4    4290    TCP *:sunrpc (LISTEN)
 rpc.statd 3206 statd    3u IPv4   7081    UDP *:1029
 rpc.statd 3206 statd    6u IPv4   7072    UDP *:838
 rpc.statd 3206 statd    7u IPv4   7085    TCP *:1031 (LISTEN)
 rpc.mount 3483   root    6u IPv4   7934       UDP *:691
 rpc.mount 3483   root    7u IPv4   7937       TCP *:694 (LISTEN)
NFS服务的主配置文件:
/etc/exports:
格式:[共享的目录] [主机名或IP(参数,参数)]
当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样: 
[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
第一列:欲共享出去的目录,也就是想共享到网络中的文件系统;
第二列:可访问主机
192.168.152.13 指定IP地址的主机 
nfsclient.test.com 指定域名的主机 
192.168.1.0/24 指定网段中的所有主机 
*.test.com        指定域下的所有主机 
*                       所有主机 
第三列:共享参数
下面是一些NFS共享的常用参数: 
下面是一些NFS共享的常用参数: 
 ro                    只读访问 
 rw                   读写访问 
 sync                所有数据在请求时写入共享 
 async              NFS在写入数据前可以相应请求 
 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_squas         root用户具有根目录的完全管理访问权限 
 anonuid=xxx            指定NFS服务器/etc/passwd文件中匿名用户的UID 
例如可以编辑/etc/exports为: 
/tmp     *(rw,no_root_squash) 
/home/public 192.168.0.*(rw)   *(ro) 
/home/test  192.168.0.100(rw) 
/home/linux  *.the9.com(rw,all_squash,anonuid=40,anongid=40)

相关的命令:
1、exportfs命令: 
如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命
令格式如下: 
exportfs [-aruv] 
-a :全部mount或者unmount /etc/exports中的内容 
-r :重新mount /etc/exports中分享出来的目录 
-u :umount目录 
-v :在export的时候,将详细的信息输出到屏幕上。 
具体例子: 
# exportfs -au 卸载所有共享目录
# exportfs -rv 重新共享所有目录并输出详细信息
2、启动NFS 
# service portmap start 
# service nfs start 
检查NFS的运行级别: 
# chkconfig --list portmap 
# chkconfig --list nfs 
根据需要设置在相应的运行级别自动启动NFS: 
# chkconfig --level 235 portmap on 
# chkconfig --level 235 nfs on 
nfsstat: 
查看NFS的运行状态,对于调整NFS的运行有很大帮助 
rpcinfo: 
查看rpc执行信息,可以用于检测rpc运行情况的工具
另外,还需要查看系统的iptables、/etc/hosts.allow、/etc/hosts.deny是否设置了正确的NFS访问规则;
3、客户端操作和配置
1、showmout命令对于NFS的操作和查错有很大的帮助,所以我们先来看一下showmount的用法 
showmout 
-a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。 
-e :显示指定的NFS SERVER上export出来的目录。 
 例如: 
 showmount -e 192.168.0.30 
Export list for localhost: 
/tmp         * 
/home/linux *.linux.org 
/home/public (everyone) 
/home/test    192.168.0.100 
客户端运行以下命令MOUNT NFS文件系统
#mount -t nfs 192.168.70.50:/opt /mnt/disk1
2、mount nfs目录的方法: 
mount -t nfs hostname(orIP):/directory /mount/point 
 具体例子: 
 Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs 
 mount nfs的其它可选参数: 
 HARD mount和SOFT MOUNT: 
 HARD: NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示),直到MOUNT
上。 
 SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。 
例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs 
 rsize和wsize: 
文件传输尺寸设定:wsize 来进行设定。这两个参数的设定对于NFS的执行效能有较大的影响 
 bg:在执行mount时如果无法顺利mount上时,系统会将mount的操作转移到后台并继续尝试mount,直到mount成功为止。(通常在设
定/etc/fstab文件时都应该使用bg,以避免可能的mount不上而影响启动速度) 
 fg:和bg正好相反,是默认的参数 
 nfsvers=n:设定要使用的NFS版本,默认是使用2,这个选项的设定还要取决于server端是否支持NFS VER 3 
 mountport:设定mount的端口 
 port:根据server端export出的端口设定,例如如果server使用5555端口输出NFS,那客户端就需要使用这个参数进行同样的设定 
 timeo=n:设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输。默认值是7/10妙(0.7秒)。如果网络连接不是很稳定的话就要加大这个数值,并且推荐使用HARD MOUNT方式,同时最好也加上INTR参数,这样你就可以终止任何挂起的文件访问。 
 intr 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。 
 udp:使用udp作为nfs的传输协议(NFS V2只支持UDP) 
 tcp:使用tcp作为nfs的传输协议 
 namlen=n:设定远程服务器所允许的最长文件名。这个值的默认是255 
 acregmin=n:设定最小的在文件更新之前cache时间,默认是3 
 acregmax=n:设定最大的在文件更新之前cache时间,默认是60 
 acdirmin=n:设定最小的在目录更新之前cache时间,默认是30 
 acdirmax=n:设定最大的在目录更新之前cache时间,默认是60 
 actimeo=n:将acregmin、acregmax、acdirmin、acdirmax设定为同一个数值,默认是没有启用。 
 retry=n:设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000 minutes 
 noac:关闭cache机制。 
同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs 
请注意,NFS客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式mount,虽然可以成功mount上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。

3、/etc/fstab的设定方法 
/etc/fstab的格式如下: 
fs_spec   fs_file  fs_type   fs_options  fs_dump fs_pass  
fs_spec:该字段定义希望加载的文件系统所在的设备或远程文件系统,对于nfs这个参数一般设置为这样:192.168.0.1:/NFS 
fs_file:本地的挂载点 
fs_type:对于NFS来说这个字段只要设置成nfs就可以了 
fs_options:挂载的参数,可以使用的参数可以参考上面的mount参数。 
fs_dump - 该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0 
fs_pass - 该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应
该为2。若该文件系统无需在启动时扫描则设置该字段为0 。

4、可能出现的问题
rpc超时问题
在服务器上的hosts文件加上了客户机的ip地址解析。

5、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 
如果我们的NFS服务器在防火墙后边,则需要在防火强策略中加入如下策略:
iptables -A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
iptables -A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
3、为了防止可能的Dos攻击,需要合理设定NFSD 的COPY数目。 
4、使用 /etc/hosts.allow和/etc/hosts.deny 控制客户端的访问
/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作为登陆验证系统

NFS参数配置详细说明的更多相关文章

  1. hive参数配置详细

    hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.i ...

  2. Java虚拟机-JVM各种参数配置大全详细

      usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K ...

  3. 转:浅谈UNIX下Apache的MPM及httpd.conf配置文件中相关参数配置

    为什么要并发处理 以Apache为代表的web服务器中,如果不支持并发,则在一个客户端连接的时候,如果该客户端的任务没有处理完,其他连接的客户端将会一直处于等待状态,这事不可想象的,好像没有为什么要不 ...

  4. Unity3D安卓打包参数配置与兼容性的关系分析

    前言 在使用Unity3D工程导出安卓安装包的时候,往往会遇到兼容性的问题,针对某些机型,要么无法打开游戏,要么会出现卡机的现象.面对这种情况,我们可以调节相关的参数来提高兼容性. 为了了解在打包时候 ...

  5. mudOS源码 options.h配置详细选项

    /* options.h配置详细选项—————————————————————————-将 MudOS 下载解压以后可以在相应目录的根目录中找到 options.h 这个文件.如果修 改了这个文件,那 ...

  6. STM32F0xx_FLASH编程(片内)配置详细过程

    Ⅰ.概述 关于数据的储存,我觉得编程的人基本上都会使用到,只是看你储存在哪里.STM32的芯片内部FLASH都是可以进行编程的,也就是说可以拿来储存数据.但是,很多做一些小应用程序开发的人都没有利用好 ...

  7. STM32F0xx_TIM输出PWM配置详细过程

    前言 前面我说过STM32的定时器功能很强大,今天就来总结一下它的另外一个“强大”功能:TIM的比较输出功能,输出可调PWM波形.直接调用函数接口“TIM2_CH1_PWM(uint32_t Freq ...

  8. STM32F0xx_DAC输出电压配置详细过程

    前言 数模转换DAC的功能在现实应用中所占的分量,相对定时器TIM.串口USART等要小的多,这也是ST为什么内部集成DAC模块相对来说不是那么多的原因.但在有需要使用数模转换功能的项目中,自带的这个 ...

  9. STM32F0xx_TIM输入捕获(计算频率)配置详细过程

    前言 关于STM32的定时器,可谓是功能强大,估计没有多少人研究完STM32定时器的所有功能(包括我也没有),只是使用常用的一些功能,后续我会推出关于STM32定时器的更多功能. STM32芯片多数为 ...

随机推荐

  1. 一款纯css3实现的条纹加载条

    之前为大家带来了很多加载动画. 基于prefixfree.js的进度加载条 ,基于jquery带百分比的响应式进度加载条.今天给大家分享一款纯css3实现的条纹加载条.带有响应式的效果.效果图如下 : ...

  2. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载

    原文地址:http://www.programgo.com/article/96083031845/ 最近项目中使用到Spring3,在感叹Spring3注解配置清爽的同时竟然出现了这个不和谐的事情, ...

  3. mybaits 学习

    mybaits  学习(一) 注意:如果建的是web项目,run as java application 参考http://www.cnblogs.com/xdp-gacl/p/4261895.htm ...

  4. 1.7.4.2 Local Parameters in Queries--局部参数

    1. 局部参数 Local parameters是在solr请求中指定一个查询参数.Local parameters提供了一个方式以添加元数据到某个参数类型中,如查询字符串(在solr文档中,Loca ...

  5. 1.5 理解Analyzers,Tokenizers,Filters--目录

    这部分介绍了solr如何分解和处理文本数据的,它包含一下主题: 1.5.1 Analyzers,Tokenizers,Filters概述:主要介绍Analyzers,Tokenizers,Filter ...

  6. RandomAccessFile的使用

    package com.lk.C; import java.io.IOException; import java.io.RandomAccessFile; public class RandomAc ...

  7. 用Eclipse插件Bytecode Outline来查看Java字节码

    在遇到一些小问题的时候我们经常会使用Javap反编译取得字节码来分析,虽然Javap能完成这个工作,但是有两个缺点,一方面操作麻烦,需要很多步骤,一方面没有文档注释,对新手来说看起字节码来比较麻烦. ...

  8. mysql-DDL-创建数据库

    创建一个数据库 • 建立数据库操作: 语法: create database 数据库名 叙述:创建一个具有指定名称的数据库.如果要创建的 数据库已经存在,或者没有创建它的适当权限,则此 语句失败. 例 ...

  9. Shell学习笔记 - 条件判断式

    1. 判断格式 1) test 参数 文件 例: test -e /root/install.log 2) [ 参数 文件 ]  -- 推荐使用 例: [ -e /root/install.log ] ...

  10. android注解[Jake Wharton Butter Knife]

    Introduction Annotate fields with @InjectView and a view ID for Butter Knife to find and automatical ...