导出文件系统

来源:互联网 发布:韩剧秘密花园知乎 编辑:程序博客网 时间:2024/06/05 10:29

    NFS是Sun在上世纪80年代推出的一款网络文件系统,目前已经发展到了第四代。通过NFS文件系统,我们可以像访问本地文件一样访问其他主机上的文件。在客户端挂载NFS文件系统之前,服务器端需要进行一些设置。第一步操作就是指定导出的文件系统,这是在文件/etc/exports中配置的。导出文件系统时管理员可以设置一些参数,限制用户的访问权限。概括来说,管理员可以设置下列参数:


1.rw and ro

限制用户的访问权限。如果管理员设置了rw,则用户对NFS文件系统既有读权限,也有写权限。用户可以修改文件内容。如果管理员设置了ro,则用户对NFS文件系统只有读权限,没有写权限。


2.sync and async

这是和文件写操作相关的两个选项。写操作包含两个步骤:(1)数据从客户端传到服务器端缓存中;(2)数据从缓存中写到磁盘中。async表示异步请求,当NFS客户端向NFS服务器发送数据时,服务器在将数据写到磁盘之前就向客户端发送应答消息,这样可以提高系统性能。但是如果服务器出现故障,缓存中的数据将丢失。sync表示同步写请求,NFS服务器必须将数据写到磁盘后才能向客户端发送应答消息。默认选项是sync。


3.wdelay and no_wdelay

这也是和写操作相关的两个选项,只有在设置了sync选项时起作用。wdelay表示延迟写,当NFS服务器接收到客户端发送的写数据请求后,并不是马上将数据写到磁盘中,而是延迟一段时间。因为客户端可能连续向服务器发送多个写请求。服务器可以将多个写请求合并成一次对磁盘的写操作,这可以提高系统性能。no_wdelay表示立即写,当NFS服务器接收到写请求后,不要等待,马上将数据写入磁盘中。如果客户端向服务器发送的是一些不相关的数据,没有办法将这些请求合并成一次对磁盘的写操作。如果等待的话反而会降低系统性能。默认选项是delay。


4.hide and nohide

这是和文件系统隐藏相关的两个选项。如果管理员导出了两个文件系统,其中一个挂载在另一个上面。那么客户端需要在NFS客户端上挂载两次。

服务器端:

mkdir -p /tmp/nfs/root/dir1mkdir -p /tmp/nfs/root/mountmkdir -p /tmp/nfs/root/mount/dir2mkdir -p /tmp/mount/DIR2mount --bind /tmp/mount  /tmp/nfs/root/mount

/etc/exports文件内容如下

/tmp/nfs/root  192.168.1.0/16(sec=sys,rw,sync)/tmp/nfs/root/mount  192.168.1.0/16(hide,sec=sys,rw,sync)

客户端:

mount -t nfs nfs-server:/tmp/nfs/root  /mnt[root@localhost nfs]# ls /mntdir1  mount[root@localhost nfs]# ls /mnt/mountdir2

再次执行挂载命令

mount -t nfs nfs-server:/tmp/nfs/root/mount  /mnt/mount[root@localhost nfs]# ls /mnt/mountDIR2

因此我们需要挂载两次才能看到服务器端 /tmp/mount目录中的内容

如果/etc/exports文件内容修改如下

/tmp/nfs/root  192.168.1.0/16(sec=sys,rw,sync)/tmp/nfs/root/mount  192.168.1.0/16(nohide,sec=sys,rw,sync)

客户端:

mount -t nfs nfs-server:/tmp/nfs/root  /mnt[root@localhost nfs]# ls /mnt/mountDIR2

因此,客户端只需要执行一次挂载操作就可以看到服务器端/tmp/mount/目录中的内容。默认选项是hide。


5.crossmnt

这个选项的作用和nohide相同,但是nohide设置在子文件系统中,而nohide设置在父文件系统中。

/tmp/nfs/root  192.168.1.0/16(sec=sys,crossmnt,rw,sync)/tmp/nfs/root/mount  192.168.1.0/16(sec=sys,rw,sync)

等价于

/tmp/nfs/root  192.168.1.0/16(sec=sys,rw,sync)/tmp/nfs/root/mount  192.168.1.0/16(nohide,sec=sys,rw,sync)


6.fsid=num|root|uuid

这是标识文件系统时使用的一个参数。NFS服务器需要标识导出的每一个文件系统。一般情况下,NFS服务器采用UUID(如果文件系统有UUID)或者文件系统所在设备的设备号(如果文件系统存储在一个磁盘设备上)表示一个文件系统。然而,并不是所有的文件系统都具有UUID,也不是所有的文件系统都存储在一个磁盘设备上,这时候,我们需要明确告诉NFS服务器如何标识一个文件系统。这种情况下,就需要使用fsid选项。NFSv4中存在一个特殊的文件系统,称为根文件系统,根文件系统必须设置为fsid=root或者fsid=0,这两种设置方法完全相同。其他的文件系统用一个小的整数或者UUID标识。UUID是一个字符串,这个字符串中包含了32个16进制整数,还可以包含任意多的其他字符。


7.root_squash and no_root_squash

这是和用户映射相关的一个选项。NFS客户端向服务器发请求时,请求报文中会携带客户端用户的uid和gid,服务器根据接收到请求中的uid和gid判断客户端是否有权进行相应的操作。但是,客户端和服务器端的uid、gid编号不一定相同,特别地,当客户端发送的请求中uid和gid编号为0时,我们不能将它看作是服务器端的超级用户,否则容易存在安全问题。一般情况下,服务器端可以设置一个匿名uid (anonuid) 和匿名gid (anongid)。如果客户端请求中的uid和gid为0时,则分配映射成anonuid和anongid。默认情况下,anonuid和anongid编号为65534。如果设置了no_root_squash,则服务器不对编号是0的uid和gid进行映射,这样,客户端的超级用户就拥有了服务器端超级用户的权限。


8.all_squash and no_all_squash

all_squash表示服务器端将所有接收到的uid/gid映射成anonuid/anongid,no_all_squash表示不是将所有的uid/gid映射成anonuid/anongid,只将超级用户和不能识别的用户映射成anonuid/anongid。


9.anonuid and anongid

这两个选项分别指定了匿名映射的uid和匿名映射的gid。比如管理员在服务器端将/home/test导出,用户test的uid和gid都是500,并且导出文件系统时没有设置anonuid和anongid,并且没有设置no_root_squash。如果客户端不存在uid/gid=500的用户,则客户端对挂载的文件系统没有写权限,即使客户端使用root用户。为了使用这个文件系统,客户端必须创建一个uid/gid=500的用户。

groupadd -g 500 newgroupuseradd -u 500 -g 500 newuser

然后切换到newuser用户才可以使用挂载的文件系统。也就是说,客户端为了访问这个文件系统,需要创建一个新用户,这非常不方便。
如果服务器在导出文件系统时设置了anonuid=500,anongid=500,并设置了all_squash选项,无论客户端使用哪个用户挂载文件系统,当客户端向服务器发送请求时,服务器将请求中的uid/gid映射成500,这就是服务器上的test用户,具有访问权限。


原创粉丝点击