Chinaunix首页 | 论坛 | 博客

分类: LINUX

2011-12-06 13:31:22

前言:
 
  NFS是Network File System的简写,即网络文件系统。NFS早期是被sun公司开发的一种在unix,linux系统上实现文件共享的一种协议(windows系统下很难使用这种协议),而且这种协议是直接作进内核的。根据这种协议产生了后来的NFS文件共享,它有如下好处:
 
   1).本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。
  2).用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。
  3).诸如软驱,CDROM,和 Zip(是指一种高储存密度的磁盘驱动器与磁盘)之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介质设备的数量。
 
  NFS协议到现在经历了V1,V2,V3,V4版本,但是它有一个缺点就是协议没有用户认证机制,而且数据在网络上传送的时候是明文传送,所以安全性极差,一般只能在局域网中使用
 
使用前先介绍些NFS文件共享的一些知识
 
    1).上面说过NFS协议本身没有用户身份认证机制,那么客户端如何使用的服务的的资源的呢?NFS通过映射的方式解决这个问题,这里要提醒的是client端的root用户被映射为nfsnobody,这也是一种安全机制
    2).NFS这个协议是依赖于RPC协议的,就是说在客户端请求NFS的时候,请求首先被交给了RPC(监听在TCP和UDP的111端口),RPC这时候检查自己是否检测了NFS,如果是,由RPC随机选择端口给NFS(这有可能占用其他服务的端口,比如mysql3306),然后用户通过这个端口和NFS之间进行通信
       #rpcinfo -p                                  //查看RPC检测下的服务
 
    3).NFS启动之后有五个进程
      nfsd:服务器端进程,它是一个内核线程(不受rpc的管理,其他四个受rpc管理),监听在TCP和UDP的2049端口
      rpc.mounted:这个进程是被RPC监控的
      rpc.statd:检测server端和client端之间通信状态的一个进程
      locked:这是个内核的锁线程,半随机
      rpc.quotad:这是一个定义用户最多使用多少磁盘空间的线程(实现磁盘配额的控制)
 
    4).NFS服务相关的配置文件有两个
      /etc/exports:定义sever端共享的目录及可使用此目录用户的文件
      /etc/sysconfig/nfs:可以定义NFS使用固定端口的文件
 
    5).挂载权限有以下几种:
      rw:允许读写
      async:允许异步写入
      sync:同步写入
      root_squash:当时root的时候被映射为nfsnobody用户
      no_root_squash:不映射root用户为nfsnobody
      all_squash:映射客户端所有用户为nfsnobody
 
    6).一些命令的介绍
      #showmount -e 192.168.2.129               //查看客户端共享出得文件目录有哪些(客户端使用)
      #showmount -a                             //查看共享出的目录被哪些用户使用(服务端的使用) 
      #exportfs  -ar                            //更改配置文件后重新读取以下(相当于重启服务)
      #exportfs  -au                            //关闭所有共享的目录
 
具体使用过程:
 
  nfs-utils是nfs服务的一个脚本控制工具,使用nfs前要安装上这个包
 
  #yum list nfs-utils                            //检查是否安装了nfs-utils
 
 
  sever端(IP:192.168.2.129)
 
  1), #vim  /etc/exports                          //编辑这个文件,加入以下内容
   /tmp 192.168.0.0/24(ro,async),172.16.0.0/16(rw) //注意这里格式必须如这个格式,要共享的目录与允许访问的IP地址或者网段之间必须有空格,其他地方不能有空格;挂载权限之间只能用“,”隔开
 
 
  2), #service nfs start                          //启动nfs服务 
 
  3), #chkconfig nfs on                           //让nfs服务开机自动启动
 
  client端(IP:192.168.2.130)
 
  1),#showmount -e 192.168.2.129                 //显示server段共享出来的目录
 
 
  2),#mount -t nfs 192.168.2.129:/backup  /mnt       //挂载server端的/backup目录到client端的/mnt目录
 
  但是我们发现,我们进入挂载目录之后对文件不具有写权限
 
 
  我们不是root用户吗?为什么我们不具有写权限呢?这就是以下要说明的内容:
  客户端挂载的文件系统的权限取决于两项:文件权限和挂载权限,并且nfs文件系统的用户映射是根据ID映射的
  如果server端的文件用户为gentoo,id为166,那么client端没有这个用户gentoo,但是有一个id=166的用户jobs,那么server端的文件属主在client端将被映射为jobs
  server端把client端的用户映射为两类:
  root用户被映射为nfsnobody(通常只有读权限,这是一种安全机制)
  一般用户中如果server端的文件ID在client端中存在,则被映射为client端的用户名字,如果不存在,则被映射为其他用户,解决上述问题我们需要明白,此时我们的身份为root用户,但是映射过去之后为nfsnobody用户,所以不具有写权限,此时我们要写这个文件,在服务端给这个文件权限中的其他用户一个写权限即可。
 
如何让NFS工作在特定的端口上?
 
  1).编辑/etc/sysconfig/nfs文件,加入以下几行
 
  注意这里的端口号是自己跟具实际情况选择的,选择那些没有被占用的即可,但是我们如何知道哪些端口没有被占用呢?
  /etc/services 这个文件定义了所有的服务及对应的端口号,我们可以根据这个文件来确定端口号,比如我们想选择4004,那么我们可以使用
  #cat /etc/services | grep 4004 
  如果没显示任何内容,说明没有其他服务在使用这个端口,则4004端口可以被使用
 
....................................................................over!
阅读(32529) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~