Chinaunix首页 | 论坛 | 博客
  • 博客访问: 352696
  • 博文数量: 49
  • 博客积分: 817
  • 博客等级: 军士长
  • 技术积分: 496
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-16 19:05
文章分类

全部博文(49)

文章存档

2014年(6)

2013年(7)

2012年(8)

2011年(28)

分类: LINUX

2011-12-11 12:07:01

一、前期准备
网络文件系统(Network File System,NFS),一种使用于分散式文件系统的协议,由 sun 公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在Unix系统间实现磁盘文件共享的一种方法。
NFS的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享
---------------------------

主要配置文件:/etc/exports
系统并没有默认值,所以这个文件『 不一定会存在』,你能要手动建立起这个档案!

NFS 文件系统维护指令:/usr/sbin/exportfs
维护 NFS 分享资源的命令,可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸载或重新分享等等。

分享资源的登录档:/var/lib/nfs/*tab
在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的文件,一个是 etab ,记录NFS分享出来的目录的完整权限设定值;另一个 xtab 记录曾经登录过的客户端信息。

客户端查询服务器分享资源的指令:/usr/sbin/showmount
很重要的 NFS 命令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。用来察看 NFS 分享出来的目录资源!

==============================================================

二、安装 NFS
系统环境:CentOS release 6.4 x64,Kernel 2.6.32-358.el6.x86_64

NFS 需要 RPC 服务,因此需要安装 rpcbind 包
在 server 端和 client 端都要安装 nfs-utils 包

[root@server ~]# yum install -y nfs-utils rpcbind

==============================================================

三、配置 NFS
至于 NFS 服务器的架设实在很简单,你只要编辑好主要配置文件 /etc/exports 之后,先启动 rpcbind (若已经启动了,就不要重新启动),然后再启动 nfs ,就ok了。

[root@server ~]# vi /etc/exports
/folder      192.168.100.0/24(ro)   localhost(rw)   *.dl.cn(ro,sync)
[分享目录]   [第一部主机(权限)]     [可以用主机名]    [也可以用通配符]

#每一行最前面是要分享出来的目录,然后这个目录可以依照不同的权限分享给不同的主机。
#这个例子是:要将 /folder 分别分享给三个不同的主机或网域的意思。主机后面以小括号 () 设计权限参数,若权限参数不止一个时,则以逗号 (,) 分开。且主机名与小括号是连在一起的!
#192.168.100.0网段内的机器是read-only权限,localhost是read-write权限,*.dl.cn是read-only和sync权限

---------------------------

实例一:开放匿名登录的情况
我要让 *.dl.cn 网域的主机,登入我的 NFS 主机时,可以存取 /home/linux ,但是他们存数据的时候,我希望他们的 UID 与 GID 都变成 45 这个身份的使用者,假设我 NFS 服务器上的 UID 45 与 GID 45 的用户组名为 nfsanon。
[root@server ~]# groupadd -g 45 nfsanon
[root@server ~]# useradd -u 45 -g nfsanon nfsanon
[root@server ~]# mkdir /home/linux
[root@server ~]# setfacl -m u:nfsanon:rwx /home/linux
[root@server ~]# vi /etc/exports
/tmp          *(rw,no_root_squash)
/home/public  192.168.80.0/24(rw)    *(ro)
/home/linux   *.centos.vbird(rw,all_squash,anonuid=45,anongid=45)
# 如果要开放匿名,那么重点是 all_squash,并且要配合 anonuid !
特别注意到那个 all_squash 与 anonuid, anongid 的功能!如此一来,当 client.dl.cn 登入这部 NFS 主机,并且在 /home/linux 写入档案时,该档案的所有人与所有群组,就会变成 /etc/passwd 里面对应的 UID 为 45 的那个身份的使用者了!

==============================================================

四、启动NFS & 常用命令

4.1 启动NFS
[root@www ~]# /etc/init.d/rpcbind start
[root@www ~]# /etc/init.d/nfs start
[root@www ~]# chkconfig rpcbind on
[root@www ~]# chkconfig nfs on
---------------------------

4.2 检查 nfs 状况
在 nfs server端执行
[root@server ~]# rpcinfo -t localhost nfs #或者 rpcinfo -p
program 100003 version 2 ready and waiting
program 100003 version 3 ready and waiting
program 100003 version 4 ready and waiting

[root@server ~]# cat /var/lib/nfs/etab #显示全部包括预设的参数
/nishome        192.168.80.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

[root@server ~]# exportfs -v
/nishome        192.168.80.0/24(rw,wdelay,root_squash,no_subtree_check)


在client端执行
[nisuser1@client ~]$ showmount -e 192.168.80.129 #查看 server 端都开了哪些挂载点
Export list for 192.168.80.129:
/nishome 192.168.80.0/24
---------------------------

4.3 修改exports文件不需要重启 nfs 和 rpcbind,执行以下命令即可。
[root@server ~]# exportfs [-aruv]
选项与参数:
-a :全部挂载(或卸除) /etc/exports 档案内的设定
-r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports及 /var/lib/nfs/xtab 的内容!
-u :卸除某一目录
-v :在 export 的时候,将分享的目录显示到屏幕上!

# 1. 将已经分享的 NFS 目录资源,通通都卸除。
#client端已经挂载好的目录仍然可以看到,但是却不能进入,提示bash: cd: /nishome: Stale file handle
[root@server ~]# exportfs -auv
# 这时如果你再使用 showmount -e localhost 就会看不到任何资源了!

# 2. 重新挂载一次 /etc/exports 的设定。client端已经挂载好的目录可以直接进入,无需重新挂载
[root@server nfs]# exportfs -arv    
exporting 192.168.80.0/24:/tmp
exporting 192.168.80.0/24:/nishome

============值得注意的一些点==================================================

1) 使用all_squash参数时,加入anonuid和anongid,如anonuid=550,anongid=550(NFS服务器上需要有这个用户),1)在client上如果没有这个UID和用户,则挂载nfs以后,读写文件的用户会变成nobody;2)client上有这个UID,但是用户名和NFS服务器上的不一样,读写文件的用户也会变成nobody;3)client和NFS上的UID及用户名都一样,读写文件的用户会变成UID为550的指定用户。

阅读(1055) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~