nfs服务

nfs简介

Network file system 网络文件系统。NFS server可以看作是一个 file server。它可以让你的pc通过网络将远端的nfs server共享出来的文件到自己的系统中,在客户端看来使用NFS的远端文件就像在使用本地文件

版本: NFS(rfc 1094), NFS V3(rfc 1813) NFS V4(rfc 3010 )这是最新版本

二各版本之间的差别
V3相对于V2主要差别
1,文件尺寸
V2最大支持32BIT的文件(4G),V3新增加了支持64BIT文件大小的技术
2,文件传输尺寸
V3没有限定传数尺寸,V2最多只能设定为8K,可以用-rsize and -wsize来进行设定

3,完整的信息返回
V3增加和完善了许多错误和成功信息的返回,对于服务器的设置和管理能带来很大好处

4,异步写入特性(V3新增加的)
NFS V3能否使用异步写入,这是可选择的一种特性。客户端发送一各异步写入请求到服务器,在给客户端答复之前并不是要将数据写入大存储器中(稳定的)。服务器能确定何时写入数据或将多个写入请求聚合到一起并加以处理,然后去写入。客户端能保持一个数据的copy以防服务器不能完整的将数据写入。当客户端希望释放这个copy的时候,它会向服务器通过这个操作过程,以确保每个操作步骤的完整。异步写入能够使服务器去确定最好的同步 数据的策略。使数据能尽可能的同步的提交和到达。这样的机制能够更好的实现数据缓冲和更多的平衡。V2在将数据写入存储器之前不能再相应任何的写入请求。

V4相对于V3:
1,在协议中增强了安全方面的特性
2,增强恶毒跨平台特性
3,改进了INTERNET上的存取和执行效能

工作原理

NFS本身是没有提供信息传输的协议和功能,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了其他的传输协议,这些传输协议用到这个RPC功能可以说NFS本身就是使用RPC的一个程序所以只要用到NFS服务的地方都要启动RPC服务/不管是客户端还是服务端/可以这么理解:NFS是一个文件系统,而RPC是负责信息的传输

配置

服务端设定:
vim /etc/exports
分享的目录 主机名(参数)
参数:
 rw: 可擦写的权限
 ro: 只读的权限
no_root_squash: 登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于
这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!
 root_squash: 在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者
的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份;
 all_squash: 不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,
通常也就是 nobody 啦!
 anonuid: 前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody,但是
你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中!
 anongid: 同 anonuid ,但是变成 group ID 就是了
 sync: 资料同步写入到内存与硬盘当中
 async: 资料会先暂存于内存当中,而非直接写入硬盘
设置的实例:
 a). /tmp (rw,no_root_squash)  //号表示所有的IP都可以访问
 b). /tmp (rw)
  /home/public 192.168.0.
(rw) (ro)  //下面两行作用一样
  /home/public 192.168.0.0/24(rw)
(ro)
 c). /home/test 192.168.0.100(rw) //只对某部机器设置权限
 d). /home/linux .linux.org(rw,all_squash,anonuid=40,anongid=40) //当.linux.org登陆
此NFS主机,并且在/home/linux下面写入档案时,该档案的所有人与所有组,就会变
成/etc/passwd里面对应的UID为40的那个身份的使用者了.
2)exportfs的用法
如果我们修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫
描一次/etc/exports,并且重新加载即可
 语法: exportfs [-aruv]
 -a: 全部挂载(或卸载) /etc/exports档案内的设定
 -r: 重新挂载/etc/exports里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab
里面的内容
 -u:卸载某一目录
 -v:在export的时候,将分享的目录显示到荧屏上.
 例子
exportfs -rv//重新export一次
exportfs -au//全部卸载

3)showmount用法
 语法: showmount [-ae] hostname
 -a: 显示目前主机与client所连上来的使用目录的状态
 -e: 显示hostname的/etc/exports里面共享的目录

客户端设定:
mount -t nfs hostname(orIP):/directory /mountpoint  搞定,就这么简单
 为了担心会不小心将 NFS 端挂进来的具有 SUID 权限档案的程序执行,root可
以将NFS 所分享的目录以较为安全的情况挂载进来,可以
mount -t nfs -o nosuid,ro hostname:/directory /mountponit

可能会遇见的问题:
1.权限的设定不符合
2.忘记了激活portmap,此时会报错:
 mount: RPC: Port mapper failure - RPC: Unable to receive 或者
 mount: RPC: Program not registered
 那么,启动portmap,并且重新启动nfs
 #service portmap start
 #service nfs restart
3.被防火墙搞掉
 重新设置防火墙,包括iptables与TCP_Wrappers,因为激活了portmap,所
以port 111必须提供出去.因此在iptables rules中,要增加:
 iptables -A INPUT -p TCP --dport 111 -j ACCEPT
 iptables -A INPUT -p UDP --dport 111 -j ACCEPT
如果还不行,那就是TCP_Wrappers的问题,检查/etc/hosts.deny,如果有一行是:
  ALL: ALL: deny
 那就必须在/etc/hosts.allow中增加:
  portmap: ALL: allow

05-23 13:38