Chinaunix首页 | 论坛 | 博客
  • 博客访问: 222690
  • 博文数量: 36
  • 博客积分: 3044
  • 博客等级: 中校
  • 技术积分: 356
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-20 18:31
文章分类

全部博文(36)

文章存档

2010年(36)

分类: LINUX

2010-03-03 23:31:47

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处作者信息和本声明。否则将追究法律责任.http://U16.cublog.cn
 
       NFS全称"网络文件系统",主要配置件/etc/exports和etc/sysconfig/nfs...NFS能使不同计算机之间能通过网络进行文件共享的一种网络协议,多用于UNIX/Linux网络系统中,使用NFS既可以提高资源的使用率,又可以大大节省客户端本地硬盘的空间,因为你根本不需要将所有文件复制到本地硬盘中,同时也便于对资源进行集中管理.

      虽然NFS可以在网络中进行文件共享,但是NFS协议本身并没有提供数据传输的功能,它必须借助于远程过程调用(RPC)协议来实现数据传输.RPC定义了一种进程间通过网络进行交互通信的机制,它允许客户端进程通过网络向远程服务器上的服务进程请求服务,而不需要了解底层通信协议细节.可以将NFS服务器看成是RPC服务器,而将NFS客户端看成RPC客户端,这样NFS服务器和NFS客户端之间
就可以通过RPC协议协议进行数据传输...

     要使用NFS服务器,至少有三个守护进程在行,rpc.nfsd rpc.mount   portmap 还有一个守护进程lockd,用来锁定用户权限的..
 
rpc.nfsd  他是基本的NFS守护进程,主要功能是管理客户端是否能够登入服务器..
rpc.mount  他是RPC安装守护进程,主要功能是管理NFS的文件系统.当客户端顺利地通过了rpc.nsfd登入NFS服务器后,在使用NFS服务器所提供的文件前,还必须通过文件使用权限的验证.rpc.mountd会读取NFS的配置文件/etc/exports来对比客户端权限...portmap  主要功能是进行端口映射工作,当客户端尝试连接并使用RPC服务器提供服务(如NFS服务)时,portmap会将所管理的与服务对应的端口号提供给客户端,从而使客户端可以通过该端口向服务
器请求服务...要主意的是portmap只用于RPC,但它对NFS服务来说是必不可少的.portmap没有运行,NFS客户端就无法查找从NFS服务器中共享的目录...这个一定要记住...
 
用户映射选项:
all_squash 将远程访问的所有用户及属主和属组都映射为匿名用户和用户组,一般均为nfsnobody....
no_all_squash 不将远程访问的所有用户及属组都映射为匿名用户...
root_squash  将root用户及所属组都映射为匿名用户(默认设置)
no_root_squash 不将root用户及属组映射为匿名用户.
anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并制定该匿名用户账为本地用户(UID=xxx)
anongid=xxx  将远程访问的所有用户组都映射为匿名用户组账户,并制定该匿名组账户为本地用户组账户(GID=xxx)
 
常用其他选项.
secure 限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认设置)
insecure 允许客户端从大于1024的TCP/IP端口连接NFS服务器.
sync  将数据同步写入内存缓冲区于磁盘中,虽然这样做效率很低,但可以保证数据的一致性...
async 将数据先保存在内存缓冲区,必要时才写入磁盘..
wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可提高效率..(默认设置)..
no_wdelay 若有写操作,则立即执行,应与sync配合使用..
subtree_check 若输出目录时一个子目录,则NFS Server将检查其父目录的权限(默认设置)..
no_subtree_check 即使输出目录是一个子目录,NFS Server也不检查其父目录的权限,这样做客提高效率...
 
下面我们来配置NFS服务,我的SERVER IP:92.168.0.195..CLIENT IP:192.168.0.197先的安装一个名为nfs-utils和另一个为portmap两个包,默认情况下Redhat安装了这两
个包...使用下面命令查看是否安装了这两个包....
#rpm -qa |grep nfs-utils
#rpm -qa |grep portmap
我这已经安装了,就不再演示怎么去装了,然后我们创建四个目录....
#mkdir  -p  /var/{test,pub,wendy,natasha}
#cd /var/test;touch a.txt b.txt;ls  -l
-rw-r--r-- 1 root root 0 Mar  4 22:15 a.txt
-rw-r--r-- 1 root root 0 Mar  3 22:15 b.txt
#vim   /etc/exports
/var/test       192.168.0.197(rw,async)
/var/pub        *(ro)
/var/wendy      192.168.1.0/24(ro,no_root_squash)
/var/natasha    *.zzu.com(rw,all_squash,sync,no_wdelay)
 
解说:/var/test目录可供192.168.0.197访问,数据异步写入磁盘...
/var/pub目录任何网段的客户机都可以访问,且具有只读的权限.
/var/wendy目录只允许192.168.1.0网段机器访问,且具只读权限.并且不将root用户映射到匿名用户..
/var/nastasha目录允许.*zzu.com中的所有客户机访问,且具备读写权限,并且将所有用户及所属的组都映射为nfsnobody,数据同步写入磁盘,如果有写入操作,立即执行...
然后重启服务...
#service nfs restart
#service portmap restart

查看服务的状态...
#service nfs  status
nfsd (pid 5126 5125 5124 5123 5122 5121 5120 5119) is running...
rpc.rquotad (pid 5114) is running...
 
#service  portmap status
portmap (pid 3211) is running...
其实每次修改了配置文件我们可以不重启动服务,让其重新读取一下配置文件使用下面的命令...
#exportfs  -r (重新读取所有文件系统,相当于重启服务)
#exportfs  -u (关闭所有已挂载的文件系统)
#exportfs  -v (重启服务后用此命令可查看配置文件中的信息)
#exportfs  -au(关闭所有的要被挂载的文件系统)

查看监听的端口,及其进程..
#rpcninfo -p  localhost;netstat -tunlp |grep 2049
      program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp    883  status
    100024    1   tcp    886  status
    100011    1   udp    823  rquotad
    100011    2   udp    823  rquotad
    100011    1   tcp    826  rquotad
    100011    2   tcp    826  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  34831  nlockmgr
    100021    3   udp  34831  nlockmgr
    100021    4   udp  34831  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  40888  nlockmgr
    100021    3   tcp  40888  nlockmgr
    100021    4   tcp  40888  nlockmgr
    100005    1   udp    837  mountd
    100005    1   tcp    840  mountd
    100005    2   udp    837  mountd
    100005    2   tcp    840  mountd
    100005    3   udp    837  mountd
    100005    3   tcp    840  mountd
tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -                  
udp        0      0 0.0.0.0:2049                0.0.0.0:*                               -
查看本机都有哪些共享目录..使用
#showmount -e localhost
 
下面我们进入客户端先创建一个目录,执行此命令进行挂载..
#mkdir  /mnt/a
#mount  -t  nfs 192.168.0.195:/var/test/  /mnt/a
#cd /mnt/a;ls  -l
-rw-r--r-- 1 root root 0 Mar  3 22:15 a.txt
-rw-r--r-- 1 rootroot 0 Mar  3 22:15 b.txt
 
我们不能将其这两个小文件删除,因为我们没有给192.168.0.197的no_root_squash,如果给它这个权限,他是可以删掉的,这些我都测试过,默认情况下都是root_squash,服务器会将其转换成来宾的账号...
在服务器端执行下面的命令,查看本机有哪些文件被挂载了...
[root@station18 ~]# showmount -a localhost
All mount points on localhost:
192.168.0.197:/var/test
 
     来做个小测试,在服务器上创建一个randy的用户UID为1000,密码为redhat,在客户机上创建一个用户solaris,UID为 1000,密码redhat
服务器:
#useradd -u 1000 randy
#passwd randy
客户机:
#useradd -u 1000 solaris
#passwd solaris
   修改服务器上/var/test/上a.txt和b.txt属主和属组都为randy还要修改test目录的所属组和属主位randy
#cd  /var/test
#chown  -R  randy.randy   ../test/;ls -l;ls -ld ../test
-rw-r--r-- 1 randy randy 0 Mar  4 07:51 a.txt
-rw-r--r-- 1 randy randy 0 Mar  3 22:15 b.txt
drwxr-xr-x 2 randy randy 4096 Mar  3 23:00 ../test/
 
    在去客户机从新挂载次文件,再切换到solaris用户然后删除看一下是否具备删权限,发现可以删除的...有的人会发现在服务器上两文件属主属组都randy,且配置文件中没no_root_squash权限,在客户机上此文件属主和属组solaris,但是客户机可以将其删除,不可思议吧!那是因为两用户的UID一样,NFS靠UID来识别用户,只要双方UID一样,对方就能将文件进行修改.这点大家得记住了,可以看出NFS很不安全的,但是很好用,很多场合也得用到它,大家要是有什么疑问直接给我留言,只要是我会的我会在第一时间给你答复的...
 
 
阅读(1923) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~