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