网络安全 频道

让NFS格式电脑更安全

前言
    NFS(network file system)是由SUN公司发展, 并於1985年推出,
  NFS是架构於的功能在於提供不同机器间的档案分享与共用,由
  於NFS规格完全公开,因此现在许多的作业系统都提供NFS的服务
  。传统NFS虽然使用UDP来传递档案资料(NFS Version 3以後支援
  TCP传送),但由於协定上的设计,大部分的安全问题都获得了
  解决。然而除了少数被发现存在不同平台的程式错误外,会影
  响系统安全的往往是管理者错误的设定。本文主要为探讨NFS
  Server端的设定,以避免系统被入侵或系统资料被窃取。  

NFS相关程式
  (1)biod:此程式是用来建立NFS Client端的cache,处理在Client
          上的读写动作。
   
  (2)mountd:此程式是用来回应要求Mount的讯息。
   
  (3)nfsd:此程式是用来处理NFS Client端的要求。   

NFS Server设定
  (1)限定读写的权限
    大部分系统的NFS服务并不会限定你新增的分享资源为唯读,除
    非你自己设定,否则都是以可读可写的模式分享资料。要设读
    写限制请参考以下例:
    *AIX,FreeBSD,Linux:
      於/etc/exports中,使用-ro的参数,如:
        /export -ro  # 将/export以唯读的模式分享
     
    *Solaris:
      於/etc/dfs/dfstab中,使用-o ro的参数,如:
        share -F nfs -o ro /export  # 将/export以唯读的模式分享
         
    当然,假如你的分享资源是唯读的设备,那是不用考虑这个
    问题的。
         
  (2)限定分享的机器
    让我们看看以下用"showmount -e xxx.xxx.xxx.xxx"得到的结果:
     export list for xxx.xxx.xxx.xxx:
     /home (everyone)
    这表示任何一台机器都可以将/home里的资料挂(mount)在自己的
    机器上,假如里面的资料具有私密性,那就危险了。所以下面的
    例子显示如何设定分享的机器:
    *AIX
      於/etc/exports中,加入-access=[host name]:
        /export -ro,access=www  # 允许www用唯读的模式分
                                # 享/export

    *FreeBSD:
      於/etc/exports中,加入host name:
        /export -ro www bbs  # 允许www和bbs用唯读的模式分
                             # 享/export
        /u -network 1.2.3 -mask 255.255.255.0 # 允许1.2.3.x
                                              # 读写/u
         
    *Solaris:
      於/etc/dfs/dfstab中,加入host name:
        share -F nfs -o ro=www /export  # 允许www以唯读的模式
                                        # 分享/export
     
    事实上我们发现,有部份的管理者用domain name当做限定NFS
    Client机器的资料,这样并非不可以,然而却是不安全的做法
    ,因为NFS是透过Client的IP查出Domain Name,故假造Domain  
    Name便会骗过NFS Server。所以我们建议您将欲分享的Client
    端资料写在/etc/hosts中,并於NFS的设定档中使用登录於
    /etc/hosts中Client的host name,这是比较安全的做法,如下:
     
        */etc/hosts内容:
          140.117.1.1    cc
         
        */etc/exports内容:
          /export -ro,access=cc    #AIX
           
        */etc/dfs/dfstab内容(Solaris):
          share -F nfs -o ro=cc /export

    当然,像FreeBSD的/etc/exports内容允许IP限定也是一个不错的
    做法。
     
  (3)将重要资料档拥有者设为root
    早期NFS并没有对root(uid 0)这个帐号做特别处理,因而一些
    拥有者为root的档案会被删除,後来便改为如果不做任何设定
    的话,NFS client端的root是没什麽权限的,意即对远端的档
    案权限可能比一般使用者还低。换句话说NFS Server端的档案
    若是拥有者为root,将有较高的安全性,如下所示:
     
      -rwxr-xr-x   1 root  wheel     5584 11 Oct 23:38 ypwhich
      -rwxr-xr-x   1 root  wheel     2405 11 Oct 23:38 yyfix
      -rwxr-xr-x   4 root  wheel   100200 11 Oct 23:34 zcat
      -rwxr-xr-x   2 root  wheel     2049 11 Oct 23:34 zcmp
     
    若NFS Client端所看到的目录内容如上,即使是可读写的分享,
    只要你没开放root的权限,对方也无法更改档案内容。所以除
    非万不得已,否则我们建议您不要开启NFS Client拥有root的权
    限。    
     
  (4)分享的档案系统不要有太多的不同拥有者的档案
    这里会提出此建议,主要是考量系统管理上的问题。假如你的
    分享无法将拥有者都设成root,可能会遇到NFS Server和NFS  
    Client上的使用者uid不一致的状况,而产生使用者间互相修改
    对方的档案,当然假如你确定两个系统的id和uid都是相同,那
    就不用担心此问题的。以下举例说明:
     
    *NFS Server
     -rw-r--r--   1 adm      other         292 Oct 25 07:25 Makefile
     -rwxr--r--   1 adm      other         362 Jul 11 13:21 a.out   
     -rwsr--r--   1 root     other       17390 Oct 26 09:19 mount  
     
    *NFS Client
     -rw-r--r--   1 bin      other         292 Oct 25 07:25 Makefile
     -rwxr--r--   1 bin      other         362 Jul 11 13:21 a.out   
     -rwsr--r--   1 root     other       17390 Oct 26 09:19 mount      
     
    以上adm与bin为不同的两个人在不同机器上,但uid相同,故使用者
    bin有可能更动NFS Server上属於使用者adm的档案。       
          
结语
    NFS设定注意事项以上共分成四个要点,当然已知的漏洞修正程式
    您必须自己安装它,不然即使设定无误,仍不能保系统安全,另外
    本文不代表包含所有NFS的问题,由於各作业系统在NFS的设定上各有
    异同,如使用secure-RPC或Kerberos来建置NFS以及NFS client注意事项
    等等
0
相关文章