文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>nfs进一步+事列

nfs进一步+事列

时间:2007-01-05  来源:insolaris

RPC介绍

 当我们在使用某些服务来进行远程联机的时候,有些信息,例如主机的IP、服务的 port number、与对应到的服务之 PID 等等,都需要管理与对应!这些管理 port 的对应与服务相关性的工作,就是这个Remote Procedure Call, RPC 的任务
 NFS 本身的服务并没有提供资料传递的协议,但是 NFS 却能让我们进行档案的分享,这其中的原因,就是 NFS 使用到一些其它相关的传输协议!而这些传输的协议,就是使用到这个所谓的 RPC 的功能啰!这也就是说, NFS 本身就是使用 RPC 的一个 program 就是了!说的更白话一点, NFS 也可以视作是一个 RPC server !同时要注意到的是,在某些状况中,不但跑 NFS 的 Server 需要激活 RPC的服务,连带的,要挂载 NFS partition 的 Client 机器,也需要同步激活 RPC 才行!这样 Server 端与 Client 端才能藉由 RPC 的协议来进行 program port 的对应!NFS 主要在管理分享出来的目录,而至于资料的传递,就直接将他丢给 RPC 的协议来运作就是了!

设置的实例:
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的那个身份的使用者了.
 
权限问题
假设/etc/exports里面的内容为

#vi /etc/exports
   /tmp *(rw,no_root_squash)
   /home/public 192.168.0.*(rw) *(ro)
   /home/test 192.168.0.100(rw)
   /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)
 假设我们在192.168.0.100这个client端登陆此NFS主机(192.168.0.2),那么
 

情况一:在192.168.0.100的帐号为test这个身份,同时,NFS主机上也有test这个帐号
  a).由于NFS主机的/tmp权限为-rwxrwxrwt,所以我(test在192.168.0.100上)在/tmp下面具有存取的权限,并且写入档案的所有人为test.
  b).在/home/public中,由于我有读写的权限,如果NFS主机在/home/public这个目录的权限对于test开放写入的话,那么就可以读写,并且写入档案的所有人是test。如果NFS主机的/home/public对于test这个使用者并没有开放写入权限时,那就无法写入,虽然/etc/exports里面是rw,也不起作用.
  c).在/home/test中,权限与/home/public有相同的状态,需要NFS主机的/home/test对于test有开放的权限.
  d).在/home/linux当中,不论是何种的user,身份都会被变成UID=40的这个帐号
 情况二:如果我们在192.168.0.100的身份为test2,但是NFS主机却没有test2这个帐号时
  a).在/tmp下还是可以写入,但是写入的档案所有人变成nobody.
  b).在/home/public与/home/test里面是否可以写入,还需要看/home/public的权限而定,不过身份就被变成nobody了
  c)/home/linux下的身份还是变成UID=40的帐号.
 情况三:在192.168.0.100的身份为root
  a).在/tmp里面可以写入,但是由于no_root_squash的参数,改变了预设的root_squash的设定值,所以在/tmp写入档案的所有人为root了.
  b).在/home/public底下的身份被压缩成了nobody,因为预设的属性都具有root_squash,所以档案所有人就变成了nobody.
  c)./home/test情况与/home/public相同.
  d)./home/linux中,root的身份也被压缩成UID=40的那个使用者了.

几个相关shell

1。 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 //全部卸载

** /var/lib/nfs/xtab里面可以查看每个目录的分享权限(但是我怎么也没有找到,靠,找到了,原来要有人mount上nfs后才会出现内容),如:
/tmp    node3(ro,sync,wdelay,hide,secure,root_squash,no_all_squash,subtree_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
 为什么anonuid=-2呢?呵呵!其实它说的是将 65536 - 2 的值,也就是 65534 的那个 UID 啦!对照一下 /etc/passwd ,你就会发现,哇!原来那就是 nobody 的啦
2。showmount命令
 语法: showmount [-ae] hostname
 -a: 显示目前主机与client所连上来的使用目录的状态
 -e: 显示hostname的/etc/exports里面共享的目录
12.查看激活的portnumber
 #netstat -utln
 nfs 自己所开启的 port ,就是那个 2049 的 port 啦!就是 NFS 主要产生的 port NFS server 在前面我们就提过了,他是 RPC server 的一种,而 NFS 由于提供了多个 program ( 例如 rpc.mountd, rpc.rquotad, rpc.nfsd... ) ,因此就需要激活多个 port !而且这些 port 是『随机产生的』,也就是那个 port number 不会是固定的!每次 restart nfs 都会得到不一样的 port number !那么 Client 端怎么知道要连接上那个 port 来呼叫需要的 program 呢?那就是 sunrpc ( port 111 ) 那个 portmap 服务所产生的 port number 的功用!Client 会先连接到 sunrpc 那个 port 去知道应该到那个 port 去呼叫所需要的程序!所以 rpc.xxxx 等之类的 daemon 自然就不需要有固定的 port number !

相关阅读 更多 +
排行榜 更多 +
Unity Connect

Unity Connect

学习教育 下载
青橙记录本

青橙记录本

商务办公 下载
脑洞惊魂夜

脑洞惊魂夜

休闲益智 下载