2005-03-13
NFS(NETWORK FILE SYSTEM)RPC SERVICE 使LINUX机器能共享资料
后台进程:
nfsd lockd rpciod rpc.mounted,rpc.rquotad,rpc.stad
脚本:
/etc/init.d/nfs /etc/init.d/nfslock
端口:
111
需要包:
nfs-utils(第一张盘)
portmap (必须)(第一张)
配置文件:
/etc/exports(默认无,需要自己建立)
1。
使用方法:
mount -t nfs IP(域名):/目录 本地目录
2。使用注意:
用service nfs start开启服务
用service portmap start确保服务开启
校对:
如果您确定 /etc/exports 档设定无误,要重新读取其设定,只需输入如下命令就可以了:
exportfs -rv
假如有错误的话,应该会得到提示的。
为求确定,您最好执行:
showmount -e localhost
范例:
/tmp *(rw,no_root_squash)
/usr/src *.siyongc.domain(ro,insecure) 192.168.100.*(ro,insecure)
/var/ftp/pub/incoming 192.168.100.24(rw,all_squash,anonuid=50,anongid=50)
第一行,我将 /tmp 这个目录完全分享出去了,不管客户端来自哪里。在括号里面的‘rw’就是 Read&Write 的意思,而‘no_root_squash’呢,则是允许让使用者具备 root 的权限,在某些特殊情况下,例如使用 bootp 登录的无磁碟工作站,是相当好用的。因为预设情况下 NFS 会将 root 的身份 squash 为权限最低的 anonymous (nobody) 身份,而其它身份则以 client 端机器上当时拥有的 User ID 和 Group ID (指号码的值)来建立档案。注意哦,在进权限判断的时候, 不是以 UserName 来作为身份依据哦,UID 和 GID 的号码最後必须对应到 server 端的 /etc/passwd ,而非 client 那边的。
第二行,我将 /usr/src 这个目录分享给以 siyongc.domain 这个 domain 做结尾或是以 192.168.100 开头的所有机器,而无需使用 secure port (insecure),但只具备唯读权限(ro)。这里,您要留意 " * " 的使用,在一些旧版本的 NFS 您不能用在 IP 上。不过,我这里的测试却是可行的。
第三行,我将 /var/ftp/pub/incoming 这个目录只分享给 192.168.0.22 这台机器,且具备了读和写的权限(rw),但在 server 上写入的档案,必须换成 anonymous 身份进行。但是其後的设定又将所有 anonymous 换成设定的 UID 和 GID (这里都是 ftp),这样的安排是要确定所有存取都按指定身份进行。这个 incoming 目录预设是不存在的,日後在讨论到 FTP 服务设定时候会提到,但您可以自行用 mkdir 建立,而且为 group 和 others 加上 +w 权限以及 sgid 和 sticky bit (3777)。
注意:
1。
mount -t nfs -o bg,soft,intr rh71:/tmp /mnt/nfs
不过,如果没有那些 -o 参数,然後在卸载之前您将 server 的 nfs 关闭了,或是网路连线出了问题,这时候再进行 umount 的话,很可能将您的机器‘定格’在那里!小心小心~~~ 所以,最好在 mount 的时候加上 soft 参数,并且在关闭 nfs 伺服器端之前,一定要先将所有的 client 所挂载的 mount point 进行 umount 才好进行。
2。
预设情况下 NFS 会将 root 的身份 squash 为权限最低的 anonymous (nobody) 身份,而其它身份则以 client 端机器上当时拥有的 User ID 和 Group ID (指号码的值)来建立档案。注意哦,在进权限判断的时候, 不是以 UserName 来作为身份依据哦,UID 和 GID 的号码最後必须对应到 server 端的 /etc/passwd ,而非 client 那边的。
出错检查:
mount: xxxxx:/yyyyyyyy, reason given by server: Permission denied
造成这样的原因多数是 /etc/exports 档案没设定好的缘故
mount: RPC: Unable to receive; errno = Connection refused
可能出现的问题很多,首先确定 portmap 服务是否有跑起来,可以用 rpcinfo 来检查
补充:2005-04-21实验
参数正常情况下:启动nfs提示
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
[FAILED]
说明portmap没有启动起来
手动启动 portmap服务
补充2:
2005-04-24实验
***关于 在NFS下对域名做限制的问题的解释。
具体配置如下:
IP:192.168.100.103 是DNS服务器 也是NFS服务器
其中exports文件写法:
/home *.cyy.net(ro,sync,no_root_squash)
用exportfs -rv显示如下
exporting *.cyy.net:/home
ping abc.cyy.net如下:
ping abc.cyy.net
PING abc.cyy.net (192.168.100.102) 56(84) bytes of data.
64 bytes from 192.168.100.102: icmp_seq=1 ttl=64 time=0.050 ms
IP:192.168.100.102 是客户机 即abc.cyy.net
做mount -t nfs 192.168.100.103:/home /nfs
报错: mount -t nfs 192.168.100.103:/home /nfs
mount: 192.168.100.103:/home failed, reason given by server: Permission denied
*******
问题的关键 是没有给abc.cyy.net做反向解析,测试是否做了反向解析用
host 192.168.100.102
问题2,做限制的第二种方法:
直接修改hosts.allow hosts.deny
操作如下:
修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
/etc/hosts.allow
portmap: .cyy.net : allow
/etc/hosts.deny
portmap: ALL : deny
2005-04-23
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的设定。
六、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数目。