1. NFS称为网络文件系统
优点:主要用在LinuxLinuxLinuxUnix之间的文件共享,使用时很方便简单好用,所以在共享时还是经常使用的。 
缺点:NFS是基于主机来认证和访问的,明文传输,数据易被篡改和窃听从而存在很大的安全隐患,NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制, 在RPC远程调用中,一个SUID的程序就具有超级用户权限.
2. 软件包:nfs-utils-1.0.9-42.el5.i386
进程:nfsd,lockd,rpciod,rpc.(mounted,rquotad,statd)
脚本:/etc/rc.d/init.d/nfs(端口2049,/etc/rc.d/init.d/nfslock
端口:由portmap服务指派端口(111
配置文件:/etc/exports(默认为空)
          /etc/sysconfig/nfs
nfs使用booleans控制导出:
nfs_export_all_ro所有导出的为只读的
nfs_export_all_rw所有的导出为可读可写的
use_nfs_home_nfs是否允许导出家目录
SELinux设为Enforcing状态时则导出的好多有的将不可用
辅助工具:portmap(必须)
rpcinfo -p [IPADD]:显示有哪些端口来提供提供rpc服务的
端口映射器 
portmap监控程序只是定向RPC通信数据流,但它对于NFS服务很重要。如果不运行portmap,则NFS客户机无法找到从NFS服务器共享的目录。
启动端口映射:
/etc/rc.d/init.d/portmap startservice portmap start
启动nfs
/etc/rc.d/init.d/nfs startservice nfs start[restart]
3. 下面是一些NFS共享的常用参数:
【 ro    只读访问 
rw    读写访问 
sync    所有数据在请求时写入共享即同步写入 
async    NFS在写入数据前可以相应请求即异步写入
insecure    NFS通过1024以上的端口发送
secure    NFS通过1024以下的安全TCP/IP端口发送
root_squash    root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas    root用户具有根目录的完全管理访问权限(危险动作要小心使用)
all_squash    共享文件的UIDGID映射匿名用户anonymous,适合公用目录。
no_hide    共享NFS目录的子目录(危险操作要小心使用)
root_squash    root用户的所有请求映射65534级别即nfsnobody权限
subtree_check    如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
anonuid=xxx    指定NFS服务器/etc/passwd文件中匿名用户的UID 
anongid=xxx    指定NFS服务器/etc/passwd文件中匿名用户的GID
 NFS是基于UIDGID来识别的,而不是基于用户名的例如:
若服务器上有个用户natasha,并且他是/var/guest目录的所有者,即将目录的用户和组都改为natasha,假如natashauid2001,在客户机上有个natashamary两个用户,但natashauid2000maryuid2001,此时natasha将无法登录,而mary却可以查看(原因很简单,NFS是靠uidgid来识别用户的身份的。)
3.  exportfs [-aruv]    
-a :全部mount或者unmount /etc/exports中的内容    
-r :重新mount /etc/exports中共享出来的目录    
-u umount 目录    
-v :显示当前主机上导出的文件系统的详细选项
-au:关闭所有
-rv:重新导出文件系统并在屏幕上显示其导出的详细信息
4.  showmout显示nfs的挂在信息
   【-a:在nfs服务器端显示被客户端挂载过的详细信息
   【 -d:在nfs服务器端显示列出仅仅被客户端挂载过的目录
   【 -e:在nfs客户端上查看服务器端所有可共享的挂载信息
5. 演示用 root用户进行挂载的情况:
假如NFS服务器:192.168.0.103
NFS客户端:192.168.0.106
   [root@station19 ~]# yum list all | grep "^nfs"(查询列出的所有nfs包)
   [root@station19 ~]# yum install nfs-utils.i386(安装)
   [root@station19 ~]# chkconfig nfs on(添加到开机自启动列表)
[root@station19 ~]# service nfs start (启动nfs服务)
[root@station19 ~]# vim /etc/exports (编辑nfs的主配置文件)
/var/ftp 192.168.0.0/24(rw,async) 192.168.1.0/255.255.255.0(ro,sync)
注:每个共享规则要写一行
ip地址与小括号之间一定不能有空格,其中主机名字的形式有单主机(fqdnip,网络组(如NIS域),通配符“*(表匹配人一个任意字符),“?”(匹配单个任意字符)(如*.example.com???.example.com,ip network(如上两种形式都可以)但是tcp_wrappers则只支持如192.168.0.0/255.255.255.0的形式。
[root@station19 ~]#chkconfig portmap on(rpc添加为开机自启动)
[root@station19 ~]# ntsysv(确认rpc已添加到开机自启动列表)
[root@station19 ~]# service nfs restart(重启nfs
[root@station19 ~]# exportfs –v(显示当前主机上导出的详细信息)
/var/ftp        192.168.0.0/24(rw,async,wdelay,root_squash,no_subtree_check,anonuid=65534,anongid=65534)
/var/ftp        192.168.1.0/255.255.255.0(ro,wdelay,root_squash,no_subtree_check,anonuid=65534,anongid=65534)
[root@station19 ~]# rpcinfo -p localhost(显示有哪些端口来提供提供rpc服务的)
program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp    727  status
    100024    1   tcp    730  status
    100011    1   udp   4005  rquotad
    100011    2   udp   4005  rquotad
    100011    1   tcp   4005  rquotad
    100011    2   tcp   4005  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  59097  nlockmgr
    100021    3   udp  59097  nlockmgr
    100021    4   udp  59097  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  42693  nlockmgr
    100021    3   tcp  42693  nlockmgr
    100021    4   tcp  42693  nlockmgr
    100005    1   udp   4001  mountd
    100005    1   tcp   4001  mountd
    100005    2   udp   4001  mountd
    100005    2   tcp   4001  mountd
    100005    3   udp   4001  mountd
    100005    3   tcp   4001  mountd
 [root@1 ~]# showmount -e 192.168.0.103(在客户端上查看所有nfs服务器提供的所有共
享信息)
Export list for 192.168.0.103:
/var/ftp 192.168.1.0/255.255.255.0,192.168.0.0/24
[root@1 ~]# mount -t nfs 192.168.0.103:/var/ftp /mnt/(以root用户挂载)
[root@1 ~]# cd /mnt
[root@1 mnt]# ls
pub
[root@1 mnt]# cd pub/
[root@1 pub]# ls
thg.txt
[root@1 pub]# rm thg.txt
rm: remove write-protected regular file `thg.txt'? y
rm: cannot remove `thg.txt': Permission denied
[root@1 pub]# vim thg.txt
Hello,This is 192.168.0.103......
haha!!!!
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                                                                                                                                                                                  
E45: 'readonly' option is set (add ! to override)    (从上可以看出root用户被映射为普通来宾账号即nfsnobody了,优先级从0已变为65534了,没有了root用户权限,不能删除和修改等操作了)
[root@station19 ~]# showmount -a localhostnfs服务器上查看被客户端挂载过的详细信息)
All mount points on localhost:
192.168.0.105:/var/ftp
192.168.100.100:/var/ftp
[root@station19 ~]# showmount -d localhost(仅列出被客户端挂载出来的目录)
Directories on localhost:
/var/ftp
6.如果同一目录针对不同范围开放不同权限
# vi /etc/exports
/home/public  192.168.0.0/24(rw)    *(ro)
即将主机与网域分为两段(用空格隔开),此时当客户机处于192.168.0.0/24这个网段中时,针对这个被挂在的目录就具有可读可写的权限;而其他网段的客户机挂载目录后就只有可读权限。
7.我们也可以让匿名登入:   
# vi /etc/exports
/home/linux  *.linux.org(rw,all_squash,anonuid=40,anongid=40)果要开放匿名,那么重点是all_squash,并且要配合anonuid
基本监控程序
要顺利运行NFS,至少需要五个Linux服务,它们各有不同的功能,有的负责装载服务,有的保证远程命令指向正确的位置。这些服务通过/etc/rc.d/init.d目录中的nfs,nfslockportmap脚本启动。下面简单介绍每个监控程序: 
(1) 基本NFS 
rpc.nfsdNFS服务器监控程序,它通过/etc/rc.d/init.d目录中的nfs脚本启动。NFS监控程序还启动rpc.mountd装载监控程序,并导出共享目录。 
(2) RPC装载 
可以用mount命令连接本地目录或网络目录,但还需要一个装载NFS 目录的特殊监控程序rpc.mountd 
(3) 端口映射器 
portmap监控程序只是定向RPC通信数据流,但它对于NFS服务很重要。如果不运行portmap,则NFS客户机无法找到从NFS服务器共享的目录。 
(4) 重新启动与statd 
NFS服务需要中断或者重新启动时,rpc.statd监控程序和rpc.lockd在服务器重新启动之后使客户机恢复NFS连接。 
(5) 锁定 
通过共享NFS目录打开文件时,锁定可以使用户不能覆盖同一个文件。锁定通过nfslock脚本并使用rpc.lockd监控程序启动运行。 
可以把挂载添加到开机自动挂在列表中如下:
vim /etc/fstab
192.168.0.103:/var/ftp/     /mnt        nfs          defaults         0  0    
常见问题:
提示:mount to NFS server 192.168.0.103” failed: server is down. 
    解决方案:可能是NFS 服务器的防火墙有问题; 
提示:mount : RPC: Timed out 
    解决方案:由于RPC 协议没运行;启动portmap 服务; 
    也有可能是防火墙问题;Server/Client 均有可能。
加强NFS安全的方法: 
怎样来加固自己的NFS服务呢?
合理的设定/etc/exports中共享出去的目录,最好只共享一个独立的文件系统,最好能使用anonuidanongid以使MOUNTNFS SERVERCLIENT仅仅有最小的权限,最好不要使用root_squash
还可以使用防火墙来加固。