nfs实验

实验环境:

  1. NFS服务器一台,ip地址为:222.31.76.167
  2. NFS客户端一台,ip地址为:222.31.76.188

实验过程:

NFS服务器端拥有320G硬盘一块,留有相当一部分的空闲空间。我先利用空闲空间扩建分区,然后将扩建的分区挂载到nfs客户端指定目录下。

 

一.    NFS

NFS即网络文件系统。顾名思义,网络文件系统管理的就是通过网络互连起来的存储空

间上的文件和数据。而不同于本地文件系统,负责管理本地磁盘上的文件和数据。具体说来,NFS服务器可以让您的 PC 来将网络远程的 NFS 主机分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!使用上面相当的便利!

 

 

 

222.31.76.167                                           /mnt/nfs   

 

 

 

                222.31.76.116                      222.31.76.188        /home/nfs

 

二.    新建磁盘分区

为方便测试我从167的空闲空间上划出一个分区专门用作远程挂载。具体

操作如下:             

fdisk 加-l参数查询linux上所有的分区,如上图:

 

由利用fdisk磁盘管理工具增加一个分区(n参数表示增加分区),如上图:

 

增加分区后并不能即时生效,重启后再观察分区表,我们已经建立了/dev/sda9这个逻辑分区,如上图:

 

利用mkfs命令格式化新建分区/dev/sda9分ext3文件系统,如上图:

 

挂载/dev/sda9到/mnt/nfs目录下,这就是作为NFS要挂载的远程目录了,如上图:

  

三.    NFS在行动

NFS如何成功地实现呢?就如同平常所见的FTP服务器一样,NFS服务器端首先运行相

关进程,开启NFS服务,并声明可远程挂载的目录,一般的想法就是这样的,可这次我错了!不像FTP它有固定的20端口,NFS的用来传输数据的端口是随机分配的小于1024以下的端口,但客户端并不会知道它定义了哪个端口,因而无法连接!这里就需利用到RPC远程调用过程这个协议了! RPC 最主要的功能就是指出每个 NFS 功能所对应的端口,并且回报给客户端,让客户端可以连结到正确的端口上去。 那 RPC 又是如何知道每个 NFS 的端口的呢?这是因为当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个埠口对应的 NFS 功能,然后 RPC 又是固定使用 111端口 来监听客户端的需求并回报客户端正确的端口的, 所以NFS的启动当然就变得轻松愉快了!

 

   

 

 

         NFS服务器所需软件:

         RPC主程序:portmap(对于centos 4.x来说),启动任何一个RPC服务之前,我们都需要启动portmap,服务器端和客户端皆如此!

         NFS 主程序:nfs-utils

 

 

         通过rpm方式安装完这两个软件,接下来需要设定NFS服务器了。设定通过/etc/exports这具文件来进行,这个档案也就是/etc/exports的主设定档案,而且如果你没有其它要求的话甚至可以认为它就是唯一的设定档案。这样一来真是简单的不行了!如果没有事先包含这个文档,可通过vim手动建立之!我要将222.31.76.167中的/mnt/nfs目录分享给222.31.76.188,因此可以如此设定(设定的目标和手段有很多,不作详述!)

 

         现在启动NFS服务器,首先运行/etc/init.d/portmap进行,再是/etc/init.d/nfs进行,通过nestat –tulpn | grep 111检验一下是否正常开启。同样客户端也开户portmap和nfs进程!通过showmount –e ip指令我们可查看NFS服务器共享目录,达到检验的效果!

        

咦,什么情况?一查原来是防火墙的问题,通过/etc/init.d/iptables stop指令关闭防火墙!再检验:

 

这正是我在/etc/exports设定的内容!下面就可以挂载了:

 

 

注意:最后经常会遇到permission denied这个的问题,出现这个问题的原因是:NFS服务器在接受到请求后会先试图将ip地址转为hostname(通过比对/etc/hosts中的ip,hostname),如果比对成功则继续到/etc/exports中与设定的内容相对照,若此时/etc/exports设定为使用ip而不是hostname,则会出现异常!解决办法就是要么在/etc/hosts文件中不设置ip与hostname的对照,从而使ip不能转为hostname就会继续使用ip到/etc/exports中进行对照。要么你在/etc/hosts中设置了ip,hostname对照表的话,在/etc/exports中同样也使用hostname,这样就OK啦!

 

四.    补充(源自鸟哥)

在众多网络服务的搭建过程中NFS算得上是比较简单的一种,即使是这样也有仍然有需

重点关注的地方,也就是它的权限而定!考虑这样一个问题,假如我在client上面以qiqiu这个身份去存取/home/nfs这个来自NFS服务器提示的档案系统时,NFS服务器会让qiqiu以什么样的身份去存取呢?是qiqiu还是别的什么?这是个很敏感的问题!

         NFS本身的服务并没有进行身份登入的识别,所以说,当你在用户端以qiqiu的身份想要存取NFS服务器所提供的共享目录时,服务器会以用户端使用者的UID和GID等身份来尝试读取服务器端的档案系统。因而会造成以下几种情况:

         NFS server/NFS client刚好有相同的账号与群组

         则此时使用者可以直接以qiqiu的身份对服务器提供的共享目录进行存取

 

         NFS server的501这个UID账号对应为vbird(qiqu的UID也为501)

         若NFS服务器上的/etc/passwd里面UID501的使用者名称为vbird时,则用户端的qiqiu可以存取服务器端的vbird这个使用档案了。只是因为这二者具有相同的UID而已。

 

         NFS server并没有501这个UID

         此时qiqiu这个身份在该目录下会被压缩成匿名者,一般NFS的匿名者会以UID为65534为其使用者,早的linux distributions这个655534的账号名称通常是nobody,centos取名为nfsnobody。但有时候又会有例外,如在服务器端分享 /tmp 的情況下,qiqiu的身份還是會保持 501 但建立的各項資料在服务器端來看,就會屬於無擁有者的資料。

 

   如果使用者身份是root时

   有个比较特殊的使用者,那就是每个linxu主机都有的UID为0的root,想一杨如果用户端可以用root的身份去存取服务器的档案时,那服务器端的资料还有什么保护性可言呢?所在在预设的情况下,root的身份会被压缩成为匿名者。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-03-31 21:09  吹个球  阅读(396)  评论(0编辑  收藏  举报