当前位置:操作系统 > Unix/Linux >>

NFS和NIS安全

[ 简介 ]

  为什么几乎所有关于Solaris安全的书籍和文章都会非常明确地写到:关闭NFS和NIS服务?虽然如此,但有些系统管理员却无法关闭这些服务,因为已经有些网络应用必需它们。虽然NFS和NIS的安全问题存在于其服务结构中,是与生俱来的,然而仍然可以通过一些方法使其变得相对更安全些。

  --[ 什么是NFS ]----------------------------

  基于RPC(remote procedure call)协议的网络文件系统是由Sun Microsystems公司最早于1980年实现的,用于在异种UNIX操作系统共享文件。NFS的客户端/服务器实现结构使得远程磁盘对于本地客户端是透明可见的。它通过几个守护进程和配置文件来实现文件共享。缺省地,整个过程没有使用独立的认证方法,从而

  造成了NFS的安全问题。(参见图1)

  NIS NFS

  RPC

  XDR- External Data Representation

  Internet Protocol

  Network Transport (e.g. Ethernet)

  图 1-NFS协议栈

  它是如何工作的呢?由于NFS运行于面向无连接(不需要对传输数据包进行任何确认)的UDP协议上,NFS则试图易做图对它发送的每一个命令进行确认。如果收到确认,则继续发送数据。如果在特定时间内未收到确认,数据将被重传。

  

  NFS不单包括NFS协议,还包括MOUNT协议。这些协议在NFS中以服务器端守护进程的方式实现:rcp.mountd、nfsd和portmap。 mountd进程通知nfsd进程哪些文件系统可以被安装到本地主机中。portmap负责操纵基于rpc的服务。在客户端,nfs的实现由biod、 rpc.statd和rpc.lockd守护进程完成。boid完成在运行着多实例的客户端的性能优化:read-ahead和write- behind。rpc.statd和rpc.lockd负责文件的加锁和解锁。

  NFS的一个关键文件是/etc/exports,它定义了哪些共享和对谁是可用的。另一个文件是/etc/fstab,它包含了在客户端上被安装的文件系统列表。

  --[ 什么是NIS ]----------------------------

  Network Information Service(网络信息服务),通常还称为Yellow Pages(黄页),是一种集中管理系统通用访问文件(如/etc/passwd、/etc/group或/etc/hosts)的分布式数据库系统。 master服务器存放这些文件,而客户端则通过网络访问其中的信息。

  在NIS中被访问的信息存放在被称为maps的多个文件中。对于位于中心的master服务器,必须维护所有的maps,而客户端则访问它们。同时还有 slave服务器也保存有备份,这些slave服务器可以处理客户端的map请求访问,但不允许修改maps信息。所有对于maps的修改只能在 master服务器上进行,然后再由master分发到各个slave服务器上。(参见图2)

  -----------------Master-----------------

  | | |

  Slave | Slave

  | | |

  Client Client Client

  图 2-NIS客户端/服务器结构

  当一个'+'号被添加到本地文件中时,客户端知道应该去访问NIS系统。同时,/etc/nsswitch.conf文件指定了查询名字服务信息的次序:DNS(域名服务)、NIS或本地文件。

  NIS的实现也是通过几个守护进程。ypserv是服务器守护进程,而ypbind是客户端进程以构造NIS请求。maps可以在更新后手工(使用 yppush)传送到slave服务器,或者通过ypxfrd进程自动(slave服务器检查服务器上的时间戳以进行正确的更新)传送。

  --[ NFS和NIS的安全问题 ]----------------------------

  为什么这两个服务存在如此多的安全问题?在过去几年里,有关这两个服务的安全问题不断被发现,这似乎与其设计有关。NFS使用AUTH_UNIX的认证方法,即非显式信任NFS客户端在服务器的UID(用户ID)和GID(组ID)。对于文件系统共享输出(export)时被明确地指定了允许root用户访问的权限,任何在NFS客户端获取了root权限的攻击者都可能会轻易控制NFS服务器。另外,攻击者通过编写设置UID和GID值的程序,使其有访问 NFS服务器端任何用户的文件。同时,NFS守护进程服务器还不时被发现存在缓冲区溢出漏洞。

  NIS服务常见的安全问题有:DoS攻击(在多台客户端上使用finger服务)、缓冲区溢出攻击(libnasl)、NIS maps查询弱认证和其各个守护进程也存在各自的安全问题,等等。此外NIS或netgroups的错误配置也会产生严重的安全问题。任何人均有可能轻易就可以访问NIS数据库。方法?只要猜测NIS域的名字,绑定其客户端到该域,然后运行ypcat命令来获取所需信息。

  NFS和NIS都运行在非特权端口上,这意味着系统中的任何用户都能运行它们。如果原先的守护进程程序被恶意程序替换了,攻击者就可以获得分配给这些守护进程的资源的访问权限。

  --[ 保护NFS ]----------------------------

  要保护NFS,下面的checklist可对保护NFS服务提供帮助

  第一步:你首先需要确定安装了最新的NFS补丁。面对漏洞攻击程序的频繁发布,Sun也较快地提供相应的安全补丁程序。第二步:检查NFS的设置。首先检查/etc/exports文件。其中的所有主机和网络组是否都是最新、最正确的?用户和主机有可能会曾经移动或改变,因此经常检验该文件以保证其内容正确是非常重要的。注意检查网络组的正确性。(提示:这些网络组可在/etc/netgroup文件中找到。)

  不过,在离开/etc/exports文件前,还有其它项目需要检查。由于文件系统的访问权限也是在这里定义的,所以需要小心检查它们。如果对于一个文件系统未指定任何的访问权限,则存在问题。这意味该文件系统可被任何人从任何地方访问。对于输出共享的文件系统均应明确指定允许访问的主机或网络组,和访问权限(例如只读)。这样使得攻击者要想入侵系统必须突破更多的安全限制。对于该文件还要注意一点:确保NFS服务器不要存在自引用,和指定主机时要使用全称域名(FQDN)。

  第三步是确保所有被共享的文件名不超过256字符。当修改完/etc/exports文件后,要记住运行/etc/exportfs使修改生效。然后运行 showmount -e来校验被共享输出的文件系统访问权限。第四步是确保/etc/exports和/etc/netgroups的访问权限为644,属主为root,组用户为root或sys(或适当的组用户)。

  第五步是在被输出文件系统机器上运行fsirand,而且在cron服务中设置其周期性自动运行。安装了fsirand的系统会为文件系统生成随机性的节点数值。虽然在运行fsirand前必须先unmount共享的文件系统,这可能会造成一些不便,但它能使恶意攻击者更难以猜测文件句柄。

  最后一步是激活NFS的端口监视。在前面我们曾提到NFS缺省时运行在非特权端口。在Solaris系统中可以通过在/etc/system文件中添加以下内容来修补:

  set nfssrv:nfs_portmon = 1

  这会使NFS服务器仅接受来自特权端口的客户端请求。不要忘了添加该参数后要

  重启机器。

  --[ 保护NIS ]----------------------------

  要保护NIS安全,checklist的第一步也是确定安装了最新的NFS补丁。第二步是了解NIS的结构是如何设置的。如果是在两个或多个网络上运行 NIS服务器,或许应该考虑使NIS服务仅运行于一个网络。其中的原因是对于基于多网络的服务器需要路由功能支持,这样的话任何人都可能绑定到NIS域并读取所有的NIS maps。如果NIS服务器在路由器后运行,则此建议也是适用的。

  检查NIS结构的另一个方面是确保NIS maps是否与本地口令文件是相互独立的。这条策略可以使恶意攻击者更难从NIS主服务器获取口令信息。同时要确保root口令也不包含在NIS map。checklist的第三步是检查用户口令强度,即是否符合安全策略?是否过于简单?等等。不符合口令安全策略的口令会破坏NIS安全性,因为恶意攻击者可能通过猜测用户口令来登录到系统中。所以要密切关注用户口令的安全性。

  checklist的第四步是检查空口令。这只要运行以下命令即可:

  #!/bin/sh

  ( cat /etc/passwd; ypcat passwd ) | awk -F':' '{if $2 == ""} print $1)' [2]

  第五步是确保口令域中'*'的正确使用。在客户端的口令文件中设置如下内容:

  +:*:0:0:::

  然后试着登录该客户端。正确的结果应该是不能成功登录。然后把"+"号后面的"*"号去掉,此时如果以"+"帐号能和其它NIS用户一样成功登录,则该NIS服务器版本存在安全问题,应下载安装最新补丁。这是旧版本ypbind的一个安全漏洞。

  第六步是检查服务器数据库maps是如何创建的。创建DBM文件时可以有一个特定的关键字是YP_SECURE,它可以使NIS服务器仅回答来自特权端口的客户端请求。另外,被信任的主机或网络可在/var/yp/securenets文件中指定,ypserver和ypxfrd会读取该文件。

  --[ Netgroups ]----------------------------

  netgroups是包含特定主机的限制组,用于限制到特定主机的NFS访问和定义特定域管理员的用户。netgroups可能也是系统管理的讨论焦点,然后如果你真的需要增加对NFS和NIS的攻击难度,那么或许就需要使用它。通过定义netgroups,能够指定文件可以被企业网内什么用户和哪里访问。netgroups的主要数据库存放在NIS主服务器的/etc/netgroup文件中。

  如果使用netgroups,注意确保实施以下策略:

  * 禁止本地系统rlogin和rsh的使用,特别是对服务器。如果不能禁止,则尽可能限制这些服务的

  使用和.rhosts文件的管理。

  * 检查/etc/netgroup文件的语法错误。

  * 全面测试netgroups中定义的组的访问权限。
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,