加固FTP服务器
在众多网络应用中,FTP有着非常重要的地位。互联网一个十分重要的资源就是软件资源,而各种各样的软件资源大多数都放在FTP服务器中。
FTP服务器端软件三剑客,也是Linux下的FTP软件目前使用较多的是Wu-ftpd、ProFTPD和Vsftpd。
FTP服务面临的安全隐患主要包括缓冲区溢出攻击(Buffer Overflow)、数据嗅探和匿名访问缺陷等。
◆ 缓冲区溢出攻击。缓冲区溢出漏洞是一个困扰了安全专家30多年的难题,是现在入侵的一个重要手段。缓冲区溢出好比是将十公斤货物放进一个只能装五公斤的容器里,简单说是由于编程机制而导致的在软件中出现的内存错误。这样的内存错误使得黑客可以运行一段恶意代码来破坏系统的正常运行。
◆ 数据嗅探。FTP是传统的网络服务程序,在本质上是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。截获这些口令的方式主要为暴力破解,另外使用sniffer程序监视网络封包捕捉FTP开始的会话信息,也可顺手截获root密码。
◆ 匿名访问缺陷。匿名访问方式在FTP服务当中被广泛支持,但是由于匿名FTP不需要真正的身份验证,因此很容易为入侵者提供一个访问通道,配合缓冲区溢出攻击,会造成很严重的后果。例如,Linux下 第一个病毒Ramen蠕虫就是利用匿名访问和缓冲区溢出攻击的。
Wu-ftpd服务器安全策略
1.版本升级和安全自定义
升级陈旧的Wu-ftpd版本,因为早期版本(2.6.1以前)存在安全漏洞。
特别是对于一个新配置的Wu-ftpd服务器来说,使用稳定版本是明智的选择,可以在其官方网站下载其源代码进行编译。编译命令是:
./configure option1 option2
其中,option1是第一个选项,option2是第二个选项,依此类推可以包括多个选项。
Option主要安全相关选项说明:enable-paranoid,启用paranoid模式可以去除一些安全隐患,如不规范的站点地址命令、文件覆盖和删除等;disable-upload,使文件上传功能无效;disable-overwrite,使文件覆盖功能 无效;disable-anonymous,使匿名FTP功能无效;disable-virtual,使虚拟FTP功能无效。
说明:如果您不希望提供匿名FTP功能,使用命令:“./configure--disable-anonymous”,然后执行 “make;make install”命令完成安装。
2.使用/etc/ftpaccess文件中的选项保护Wu-ftpd
etc/ftpaccess文件中提供了一些选项,可以提高Wu-ftpd的安全性。
(1)增强日志系统
尽量记录所有日志,一般情况Wu-ftpd会记录所有用户类别(real,真实;anonymous,匿名;guest,来宾)的上传和下载情况。下面是常用的日志设定方法,如果希望了解所有数据传输情况,可以 在/etc/ftpaccess加入一行:
log transfers anonymous,real,guest inbound,outbound
(2)限制对敏感文件和目录的访问
可以在/etc/ftpaccess文件中使用noretrieve目录限制对敏感文件和目录的访问。如果希望禁止用户修改核心目录“:/etc”下的任何文件,可以在/etc/ftpaccess加入一行:
noretrieve /etc
如果Wu-ftpd服务器同时运行Apache服务器,同样要确保其配置文件不能被匿名用户下载,可以 在/etc/ftpaccess加入:
noretrieve noretrieve .htaccess .htpasswd class=anonymous
(3)限制匿名FTP用户的上传权限
在网络上,匿名FTP是一个很常用的服务,常用于软件下载网站、软件交流网站等。为了提高匿名FTP服务开放过程中的安全性,我们希望修改匿名FTP用户的上传权限。匿名FTP的根目录(~ftp)和其子目录的拥有者不能为FTP账号,或与FTP相同群组的账号。这是一般常见的设定问题。
假如这些目录被FTP或与FTP相同群组的账号所拥有,又没有做好防止写入的保护,入侵者便可能在其中增加文件(例如:.rhosts)或修改其他文件。方法为:
upload /var/ftp * no
upload /var/ftp/incoming yes nobody ftp 0440 nodirs
noretrieve /var/ftp/incoming
说明:第一个命令首先禁止匿名FTP账户向所有目录上传,接着建立一个目录:/var/ftp/incoming。然后设定这个目录的文件属于nobody用户的FTP用户组。文件权限设置为:0440(-r--r-----),使匿名用户无法创建任何目录。最后设定/var/ftp/incoming目录中文件不可恢复。
(4)限制普通FTP用户可以访问的目录
通常我们希望普通FTP用户在自己的目录下操作,但是一些FTP用户总是喜欢到其他目录(特别是在根目录、系统目录或其他用户的目录中)读取一些不该他读取的文件。下面我们需要把这些用户限制在自己目录中:
◆ 创建一个组,用groupadd命令,一般可以就用ftpuser组:
groupadd ftpuser
◆ 创建一个用户如mytestuser,建立用户可用adduser命令:
Adduser mytestuser
◆ 修改/etc/ftpaccess文件,加入guestgroup的定义:
chmod yes guest
delete yes guest
overwrite yes guest
rename yes guest
guestgroup ftpuser
说明:除了加guestgroup ftpuser这行,其他四行也要加上,否则用户登录后,将只能上传,不能覆盖、删除自己的文件。
◆ 向该用户根目录下拷贝必要文件:
cp -rf /home/ftp/lib/home/mytestuser
cp -rf/home/ftp/bin/home/mytestuser
通常把/home/ftp/下的bin、lib两个目录拷贝到这个用户的根目录下,因为一些命令(例如ls命令)需要Lib库支持,否则不能列目录。
◆ 关闭用户的telnet权限:
adduser mytestuser -g ftpuser -s /dev/null
经过以上设置,mytestuser这个用户的所有FTP操作将限制在他自己的/home/mytestuser目录中。
(5)通过IP地址进行限制访问
我们要经常监控/var/log/secure日志,并且注意那些来路不明的FTP连接,可以使用命令:“/usr/bin/host IP_address”解析可疑IP地址,使用命令“/usr/sbin/traceroute IP_address”获取该IP地址的网络路径。
如果您在一个地区根本没有一个用户,使用命令“/usr/sbin/traceroute IP_address”却发现它来自这个地区,就要使用命令阻止它的FTP连接企图,只需在/etc/ftpaccess加入一行:
deny 10.1.2.125
这样,来自10.1.2.125的主机不能进行FTP连接。
3.通过用户名称限制FTP访问
Wu-ftpd可以加入嵌入式认证模块,成为PAM-aware的FTP服务器(相关知识和配置请查看相关资料)。这样用户连接到FTP服务器时都由PAM使用/etc/pam.d/ftp文件进行认证。
(1)使用黑名单方法
如果要禁止某个用户连接FTP服务器,只要将他的用户名称加入/etc/ftpusers文件中即可。当一个被禁止访问FTP服务器的用户cjh1试图访问FTP服务器时,日志文件/var/log/messages会发出错误信息:
Dec 1 13:11:36 k2 ftpd[1988]: PAM-listfile: Refused user cjh1 for service ftp
(2)使用白名单方法
这种方法更加安全,不会发生遗漏现象。您只要把允许访问FTP服务器的用户列出即可,其他用户一律不能访问。方法如下,在/etc/pam.d/ftp中加入:
auth required /lib/security/pam_listfile.so item=user
sense=allow file=/etc/userlist.ftp onerr=fail
然后创建一个文本文件:/etc/userlist.ftp。文件格式每行包括一个用户名称即可。
提示:如果允许访问FTP服务器的用户比较多,手工建立/etc/userlist.ftp很麻烦,可以使用命令:awk -F:‘{print $1}’ /etc/passwd> /etc/userlist.ftp。这个命令会产生基于/etc/passwd的/etc/userlist.ftp用户列表,然 后进行一些修改即可。
4.修改Wu-FTP端口
Wu-FTP使用xinetd守护进程来控制服务,可以通过它进行相应管理,如通过修改/etc/services控制其端口。
标准FTP主要使用的端口为21(通信端口)和20(数据端口)。如果在/etc/services中将这两个端口改为20000和20001,并重新启动xinetd服务,Wu-FTP进程将工作在这两个端口。这样即便有人扫描到这些端口,也很难猜到这些端口的用途,更无法进一步行动。
文章转载地址:http://www.365master.com/kt_article_show.php?article_id=1947&categ_code=10041003