Linux操作系统利用 NFS 来实现文件共享 (1)

ZDNet软件频道 时间:2009-12-02 作者: | IT专家网 我要评论()
本文关键词:Linux
在Linux系统下有很多工具可以实现文件共享。从上面的描述中我们可以看出,NFS网络文件系统的实质就是在服务器上共享一些目录,然后挂载到客户端上。其中参数rw表示用户对这个共享目录具有可读写权限;而ro表示用户对共享文件具有只读权限。

  在Linux系统下有很多工具可以实现文件共享。不过NFS(网络文件系统)无疑是到目前为止最成功的一个。利用网络文件系统,可以把文件服务器上的共享目录通过网络挂载到本地操作系统。如此的话,用户可以在本地操作系统上像操作本地分区一样来对远程服务器的共享目录进行操作。

  那么NFS到底可以实现哪些用途呢?到目前为止,笔者至少已经通过NFS网络文件系统实现了两个功能,一是为企业搭建了一个文件服务器;二是部署一个Linux开发编译平台。

  利用NFS网络文件系统可以很容易的为企业用户搭建一个文件共享的平台。如只需部署一个Linux服务器,并配置NFS文件系统。然后再在服务器上根据部门或者其他规则设立一些共享的文件夹,并配置好相关的权限。如可以为每个部门设置一个用户和一个共享文件夹,然后让每个部门可以对自己部门的文件夹进行读写等操作。而对于其他部门的文件夹则只具有读的权限。然后在客户端上,就可以像挂载分区一样,把服务器的共享文件夹挂载到本地主机上。企业员工若需要对文件服务器上的共享文件进行操作,就可以像操作本地分区一样的容易。而且还可以配置启动文件,让客户端电脑每次启动的时候,都自动挂载这个文件服务器上的共享目录。另外现在微软操作系统也支持这个NFS网络文件系统,所以微软的操作系统也可以通过创建“快捷方式”的途径来挂在NFS共享文件。所以利用NFS网络文件系统实现文件共享,还不受客户端的限制。另外,系统管理员也不必在每个Linux操作系统中都设置一个home目录。Home目录可以被放在NFS服务器上并且在网络上处处可用。

  利用NFS网络文件系统还可以实现Linux系统交叉开发的编译平台。在嵌入Linux操作系统的开发过程中,程序开发者需要在Linux开发服务器上进行所有的软件开发工作。开发完成后再进行交叉编译,然后在利用FTP方式将可执行文件下载到嵌入式系统运行。但这种方式效率比较低,而且无法实现在线调试。为此这种Linux系统开发方式正在逐渐淘汰中。现在程序开发人员可以通过建立NFS网络文件系统,把Linux 服务器上的特定分区共享到待调试的嵌入式目标系统上。此时用户就可以直接在嵌入式目标系统上操作Linux服务器的共享目录,还可以实现在线对程序进行调试和修改,大大的方便了软件的开发。因此,现在NFS网络文件系统的是嵌入式Linux操作系统开发的一个很重要的组成部分。有了NFS文件系统的帮助,可以大大提高Linux操作系统开发的效率。

  不过要使用好这个NFS网络文件系统,Linux系统管理员还是需要花点时间的。具体来说,在部署NFS网络文件系统的时候,需要注意如下几个方面的问题。

  一、要小心NFS网络文件系统带来的安全隐患。

  从上面的描述中我们可以看出,NFS网络文件系统的实质就是在服务器上共享一些目录,然后挂载到客户端上。也就是说,是基于共享目录而实现的。但是,众所周知,共享目录其对服务器会带来比较大的安全隐患。为此当管理员需要通过NFS技术把服务器上的目录共享出来的话,出于安全的考虑,那么就需要配置服务器上的/etc/exports文件,让这个共享文件的访问权限受到限制。如不允许对根目录具有写的权限;不用使用通配符;不能够任意删除建立共享目录等等。

  如上图,就是exports文件设置的实例。上面这个例子中,表示只允许192.168.0.5 的客户端可以访问这个共享文件夹,而且对于共享文件夹只具有只读的权限。另外参数root_squash表示不允许对根目录进行写操作。这个文件的具体设置,笔者在后面一部分内容中会具体进行讲解。笔者之所以在这里把这个权限问题拿出来独立进行说明,就是希望能够引起大家对NFS网络共享文件系统安全性的关注。

  二、配置/etc/exports文件。

  要在Linux上实现网络共享文件系统,主要是通过配置系统中的/etc/exports文件来实现的。当Linux服务器重新启动时操作系统会自动读取这个文件,从而告诉操作系统内核要输出的文件系统以及相关的访问权限控制。从上面这个示意图中大家看到,这个配置文件主要设置了共享目录、访问者、访问权限等几部分内容。

  第一部分的内容是定义要共享的文件目录。注意,在这里必须使用绝对路径,而不能够使用符号连接。如在Linux系统中有一个文件夹为share,其真正的保存路径为/dir/share。但是可能为了管理的方便,用户会为其在桌面上创建一个快捷方式(/home/user/Desktop/share)。这个快捷方式在Linux操作系统下就叫做符号连接。虽然实际上他们是等价的,通过快捷方式也可以访问这个Share文件夹,他们都是指向同一个文件夹。但是在利用网络文件系统共享目录的时候,必须采用绝对路径。否则的话,系统不能够正确找到共享目录。

  第二部分是对访问主机的限制。在这里系统管理员可以允许局域网内所有的主机都可以访问共享目录;也可以设置某个网段或者某几个特定的IP才可以访问。具体需要怎么配置需要系统管理员根据企业的实际情况来判断。如果NFS网络文件系统主要用来实现文件服务器,在通常情况下企业全部员工都需要访问这个NFS服务器,此时就可以通过IP网络的形式来定义,如192.168.1.0等等。如果NFS网络文件系统是用来实现一个Linux平台的开发编译工作,那么往往只允许一些特定的IP地址可以访问。此时可以指定具体的IP地址或者通过通配符来实现。

  第三部分为具体的权限问题。关于权限的重要性笔者在第一点已经有所阐述,笔者这里也就不过多说明了。笔者这里就谈谈共享目录权限配置的具体问题。笔者认为,在配置共享目录权限的时候需要分情况来对待。首先需要考虑普通共享目录的权限。如共享目录对用户是只读的呢,还允许其可以向共享目录中写入文件。其中参数rw表示用户对这个共享目录具有可读写权限;而ro表示用户对共享文件具有只读权限。笔者利用NFS为企业实现过一个文件服务器。在配置这个权限的时候,笔者允许其他部门的员工以只读的形式访问不是本部门的共享目录;而对于本部门的用户则可以以读写的形式来进行访问。

  其次需要关注root这个特殊的帐户。系统默认情况下,root是不受权限访问的控制。如果在本机上,即时文件所有者对root帐户进行了权限控制,但是root帐户仍然可以对这个文件具有完全控制的权限。为此现在系统管理员就需要考虑,如果当访问NFS服务器共享目录的用户是root时该如何处理?如上面的示意图,如加入no_root_squash参数时,表示当登录NFS主机使用共享目录的使用者是root时,则其权限将被转换为匿名使用者。如使用的是root_squash,则表示如果登录NFS服务器使用共享目录的使用者是root时,那么对于这个共享目录来说,它具有root权限。也就会说,即使这个共享目录有严格的权限限制(如所有用户对这个共享目录都是只读),这个访问者仍然对这个共享目录有完全控制的权限。通常情况下,笔者是建议采用no_root_squash参数,限制客户端root帐户的权限。

  第三可以设置共享目录的工作方式。如参数sync表示当用户在客户端上往这个共享目录中创建文件时同步写入文件到内存与硬盘中。而参数async则表示文件会先暂时存储于内存中,等到一个合适的时候再写入到硬盘中。具体采用哪种方式主要是根据性能与安全性来考虑。同步写入到内存与硬盘中安全性会高一点,如果NFS服务器突然断电或者其他意外原因重新启动时文件不会丢失;但是由于内存与硬盘的效率是不同的,故其执行性能会稍微慢一点。而如果先把数据存储在内存中,而非直接写入硬盘,可以提高NFS服务器的性能,但是如果NFS服务器意外关机或者重新启动时会导致数据的丢失。具体采用哪一种方式,则需要系统管理员权衡利弊,选择合适的处理方式。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134