linux下vsftpd的安全设置方法(2)

实例剖析开源系统中vsftpd的安全设置方法(一)中,我们介绍到了用户访问权限管理中的使用nologin禁止FTP帐户登录Linux服务器,下面我们继续介绍如何安全配置开源系统中vsftpd。

3)使用chroot控制用户访问权限

  假设FTP用户根目录在/ftproot/game,那我们就要在配置文件中添加local_root=/ftproot/game。然后激活 chroot,编辑添加chroot_list_enable=YES,把允许访问FTP的用户加到/etc/vsftpd/chroot_list这个 文件中去,即:chroot_list_file=/etc/vsftpd/chroot_list。修改后的配置文件如图4:

图4

  值得注意的是:这里所介绍的/etc/vsftpd/chroot_list文件系统默认是没有的,需要手工创建,命令如下:

#touch /etc/vsftpd/chroot_list
#echo xiaowang > /etc/vsftpd/chroot_list
#echo xiaowang1 >> /etc/vsftpd/chroot_list

上述命令添加了两个用户,分别是xiaowang和xiaowang1。重新启动vsftpd服务即可。

  这个时候再从客户端来访问一下FTP服务器,发现需要输入用户名密码。如图5:

图5

  下面进一步使用WinSCP这个传输工具来看看上传下载的情况如何。如图6:

图6

  可以看到,本地的文件都传输到服务器上去了。如图7:


图7

  以上需要说明一点的是:必须先确定FTP根目录没有权限问题,否则将会出现如下问题(见图8)。如果出现该问题,可以使用chmod 757 /ftproot/game这个命令来设定权限。

图8

  (2)如何限制恶意占有带宽的用户

如果所在公司或单位服务器性能够强,带宽够多,带宽限制这方面的需求可能不是特别地突出。然而,如果下载量特别大,人也特别多,就有必要进行一下安全的设置。

在vsftp中,匿名用户和本地用户的速度限制是分开的。前者是anon_max_rate,后者是local_max_rate。 它们的单位都是byte(字节)。

如果让匿名用户和本地的用户都以最高100KB的速度下载,所以这个数字应该是1024×100=102400。在vsftpd.conf文件末尾中加入下面的两行即可:

anon_max_rate=102400
local_max_rate=102400

然后重启vsftpd服务即可。

另外,还可以限制FTP的最大连接数和每个IP的最大连接数。这两个参数分别是Max_clients和Max_per_ip。和上面一样,也只需要在vsftpd.conf文件末尾添加参数即可,如下设成了最大连接数100,每个IP的最大连接数5个:

max_clients=100
max_per_ip=5

(3)如何防止FTP密码被恶意嗅探

由于vsftpd发送的数据是以明文方式传输,尤其是密码容易被恶意的嗅探(Sniffering)到,所以企业通常会采用SSL(Secure Sockets Layer,安全套接字层)技术,配置使得vsftpd支持SSL加密传输,以此来抵御恶意嗅探攻击。

SSL是一种国际标准的加密及身份认证通信协议,用户采用的浏览器就 支持此协议。SSL最初是由美国Netscape公司研究出来的,后来成为了Internet网上安全通讯与交易的标准。比如,当IE浏览器需要通过不可 靠的互联网,与服务器安全地连接时,我们通常可以看到SSL技术被使用于其中。同样,这类技术也可以灵活地运用到邮件服务或FTP服务中去。SSL协议使 用通讯双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通讯,在通讯双方间建立起了一条安全的、可信任的通讯通道。它具备以下 基本特征:信息保密性、信息完整性、相互鉴定。该协议主要使用Hash编码、加密技术。

使用SSL技术,依赖于另外一个软件:OpenSSL,它是一个可以自由使用的SSL实现,首先需要安装这个软件。用户可以从网站 http://www.openssl.org/source/上下载Linux下OpenSSL的稳定版本,比如:openssl-0.9.8e- 7.el5.i686.rpm,然后执行命令生成密钥:

# openssl req –new –x509 –nodes –out vsftpd.pem –keyout vsftpd.pem

接着,把生成的vsftpd.pem复制到/usr/share/ssl/certs的目录中:

#cp vsftpd.pem /usr/share/ssl/certs/vsftpd.pem

然后,修改/etc/vsftpd/vsftpd.conf文件。在末尾添加SSL相关配置。如图9:

图9

  保存后重启vsftpd服务。下面就可以用客户端来尝试进行SSL加密连接了。这里使用的客户端是Core FTP,选择SSL加密登录后,会出现如下提示,如图10:

客户端尝试进行SSL加密连接 图10

  选择Accept之后我们即可登入远程的ftp服务器。如图11:

图11

  若使用不支持SSL的客户端工具访问时有可能会出现:530 Non-anonymous sessions must use encryption.的错误提示。所以提醒用户尽量选择flashfxp或CoreFtp这类的多功能客户端。

到这里为止,采用SSL机制保护下的vsftpd就算配置完成了。其中DES-CBC3-SHA是默认的加密方式,用户可以修改“ssl_ciphers=xxx”的方式来选择想要的加密方式。关于vsftpd对SSL的支持选项设置,可以参见表1。

主要选项

功能

ssl_enable

是否启用 SSL,默认为no

allow_anon_ssl

是否允许匿名用户使用SSL,默认为no

rsa_cert_file

rsa证书的位置

dsa_cert_file

dsa证书的位置

force_local_logins_ssl

非匿名用户登陆时是否加密,默认为yes

force_local_data_ssl

非匿名用户传输数据时是否加密,默认为yes

force_anon_logins_ssl

匿名用户登录时是否加密,默认为no

force_anon_data_ssl

匿名用户数据传输时是否加密,默认为no

ssl_sslv2

是否激活sslv2加密,默认no

ssl_sslv3

是否激活sslv3加密,默认no

ssl_tlsv1

是否激活tls v1加密,默认yes

ssl_ciphers

默认是DES-CBC3-SHA

表1

本文摘自TechTarget中国由网络安全攻防研究室(www.91ri.org) 信息安全小组收集整理.转载本文请著名原文地址及原作者版权信息。