1.  NFS称为网络文件系统 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

优点: 主要用在Linux与Linux或Linux与Unix之间的文件共享,使用时很方便简单好用,所以在共享时还是经常使用的。 

缺点: 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设为E n forcing状态时则导出的好多有的将不可用

辅助工具:portmap(必须)

rpcinfo -p [IPADD]:显示有哪些端口来提供提供rpc服务的

端口映射器 

portmap监控程序只是定向RPC通信数据流,但它对于NFS服务很重要。如果不运行portmap,则NFS客户机无法找到从NFS服务器共享的目录。

启动端口映射:

/etc/rc.d/init.d/portmap start或 service portmap start

启动nfs:

/etc/rc.d/init.d/nfs start 或service 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    共享文件的UID和GID映射匿名用户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

是基于UID和GID来识别的,而不是基于用户名的例如:

若服务器上有个用户natasha,并且他是/var/guest目录的所有者,即将目录的用户和组都改为natasha,假如natasha的uid为2001,在客户机上有个natasha和mary两个用户,但natasha的uid为2000,mary的uid为2001,此时natasha将无法登录,而mary却可以查看(原因很简单,NFS是靠uid和gid来识别用户的身份的。)

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地址与小括号之间一定不能有空格,其中主机名字的形式有单主机(fqdn或ip),网络组(如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.10 3 :

/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.10 3 ......

haha!!!!

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                               

~                                                                                                                                                                                                                                  

E45: 'readonly' option is set (add ! to override)       (从上可以看出root用户被映射为普通来宾账号即nfsnobody了,优先级从0已变为65534了,没有了root用户权限,不能删除和修改等操作了)

[root@station19 ~]# showmount -a localhost (nfs服务器上查看被客户端挂载过的详细信息)

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,nfslock和portmap脚本启动。下面简单介绍每个监控程序: 

(1) 基本NFS 

rpc.nfsd是NFS服务器监控程序,它通过/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中共享出去的目录, 最好只共享一个独立的文件系统, 最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用root_squash。

还可以使用防火墙来加固。

转载于:https://blog.51cto.com/surpassdream/284466