引言:网络安全的问题日趋严峻,各种网络应用不得不越来越多地考虑安全问题。Linux作为互联网上应用得最广泛的一种操作系统,对安全问题也极为重视,并且随着内核的不断升级,其安全性能也在不断提升。
随着Linux内核不断升级,其安全性能也在不断提升。在内核2.6及以后版本中增加的SELinux安全机制,更是添加了一道安全屏障。以vsftpd为例,vsftpd是提供FTP服务器的软件,由以下三级安全策略来进行控制。
第一级安全控制是服务器的配置文件,即/etc/vs ftpd/vsftpd.conf。其中相应配置项决定了哪些用户能登录,哪些不能登录以及用户登录后能进行哪些操作。
anonymous_enable和local_enable两个配置项分别控制着匿名用户和本地用户是否能登录服务器。匿名用户和本地用户默认登录点分别/var/ftp和用户自己对应的家目录,登录成功后默认的权限是只读,即能从登录目录下完成资源下载。
如果要实现文件上传、创建目录等写权限,还必须设置write_enable、anon_upload_enable和anon_mkdir_write_enalbe等 配置项。其中,write_enable控制着所有形式的写开关,如果是本地用户登录系统打开这个开关,用户即拥有所有形式的写权限;如果是匿名登录用户,则还必须打开anon_upload_enable开关才能上传文件,打开anon_mkdir_write_enalbe开关才能在主目录下创建目录。
仅仅考虑配置文件所设置的权限还不够,在应用过程中还应兼顾登录主目录本地权限设置。如果本地权限相应的用户组没有相应权限,则登录用户仍然不能完成相应的功能。
如在打开了配置文件中的write_enable和anon_mkdir_write_enable开关情况下,匿名用户的登录主目录下的pub目录的权限列表:dr-xr-xr-x5root root 4096 05-05 10:53 pub。
匿名的FTP用户划分到 了others组,由权限列表可知,FTP用户对该目录不具有写权限,当进入该目录执行创建目录的写操作时,出现如下提示,说明创建目录的动作失败:
若要成功创建目录,需修改pub目录权限为others组可写:drwxrwxrwx5root root 4096 05-05 10:53 pub。
再到该目录下可创建子目录。可见配置文件的访问权限设置项必须与登录点的本地权限结合才可以让登录用户有相应操作权限。
以上两级安全控制都属于DAC(自主存取控制)范畴,即根据程序运行时的身份来决定其权限,对于通过setuid/setgid的程序就会产生严重的安全隐患,甚至一些错误的配置可引发巨大漏洞。在此情形下,SELinux应运而生。
SELinux依据条件决定是否有存取权限。即使是root用户,在使用不同程序时,所能取得的权限也未必是最高的,而要依据当时该程序的设定而定。这样可以规范个别细致的项目进行存取控制,提供完整的彻底化规范限制。
SELinux的应用将Linux的安全级别由C2级提升到了B1级。SELinux策略分为目标(targeted)策略和多层(MLS)策略,下面以目标策略为例来看SELinux如何保护FTP服务器上的资源。
在开启SELinux策略,并且,FTP服务器的配置文件及登录主目录的本地权限允许匿名写情况下,以匿名方式登录FTP服务器并尝试创建目录,则出现之前创建目录失败的提示。进一步,查看目录/var/log下的日志文件messages中的相关信息,得到如图1的提示信息。
图1 日志文件提示信息
图2 共享目录默认的SELinux权限
图3 SELinux提示信息
日志文件中的提示信息说明 :SELinux策略阻止了FTP进程对共享目录的写操作,要想获取完整的信息,运行sealert -l 0841a6cd-b35b-4859-908c-23df68777b55命令。
首先,用命令ls -lZ来看看默认的共享目录/var/ftp默认的SELinux权限,结果如图2所示。
共享目录/var/ftp默认SELinux策略是系统public_content_t,即系统进程的只读权限。
按照图1的提示运行命令。将执行结果的关键信息截取如图3所示。详细信息进一步说明,因ftpd进程对共享目录没有匿名写权限,以上的写操作则被当作一个入侵的企图。要想让ftpd进程对该目录有写权限,应该改变共享目录上下文为public_content_rw_t,并设置allow_ftpd_anon_write布尔值为1。改变上下文的命令为chcon –t public_content_rw_t
依据以上提示命令对共享目录的SELinux策略进行修改,再以匿名登录FTP服务器,然后创建目录的写操作,则可成功创建。
以上的操作都是匿名方式下在默认共享目录/var/ftp中进行,如果在配置文件中通过配置项anony_root改变了匿名帐号的登录点,则必须要改变目录的上下文为 public_content_t(登录后只读)或public_content_rw_t(登录后读写)。若是本地用户登录至个人家目录,还需用命令setsebool -P ftp_home_dir=1来修改上下文的布尔值,让用户能通过FTP进程登录至家目录。