Linux下vsftpd的安装、用户管理和SSL安全配置

一、安装

Debian下使用apt-get命令安装vsftp
#apt-get install vsftpd -y

二、ftp用户配置

1.先检查一下nologin的位置,通常是/usr/sbin/nologin或者/sbin/nologin。

2.接着创建系统账户

#useradd -d /home/www/ftproot -s /usr/sbin/nologin ftpuser
/home/www/ftproot 为该系统用户家(home)目录,ftpuser为用户名
为该帐户设置密码:
#passwd ftpuser
输入两次相同密码即可

3.然后修改指定目录的权限

#chown -R ftpuser.ftpuser /home/www/ftproot

chown -R命令改变文档/目录所有者。详解

4.配置vsftp

编辑vsftp配置文件,命令如下:
#vi /etc/vsftpd.conf
将配置文件中”anonymous_enable=YES “改为 “anonymous_enable=NO”
删除如下配置前的注释符号(#):
local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
:wq 保存退出

接着创建vsftpd.chroot_list文件,并将ftp用户名添加进去
#touch /etc/vsftpd.chroot_list && echo ftpuser > /etc/vsftpd.chroot_list

5.修改shell配置

vi编辑/etc/shells,如果该文件里没有/usr/sbin/nologin或者/sbin/nologin(具体看当前系统配置)则追加进去

6.重启vsftp服务并测试登录

#service vsftpd restart
然后用帐号ftpuser测试下是否可以登陆ftp。目录是/home/www/ftproot

三、vsftp安全配置

前面配置了用户访问权限管理中的使用nologin禁止FTP帐户登录Linux服务器,现在再配置些更安全的。

1.限制恶意占有带宽的用户

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

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

anon_max_rate=307200
local_max_rate=307200

然后重启vsftpd服务即可。

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

max_clients=100
max_per_ip=5

2.防止FTP密码被恶意嗅探

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

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

#wget http://www.openssl.org/source/openssl-1.0.1f.tar.gz
#tar -xvzf openssl-1.0.1f.tar.gz
#cd openssl-1.0.1f
#./config
#make
#make install

安装成功!
success

接下来开始生成密钥

1.检查

/etc/ssl/private

目录是否存在,不存在就创建

mkdir -p /etc/ssl/private
chmod 700 /etc/ssl/private

2.执行命令生成密钥

#openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

3.修改vsftpd配置文件

#vi /etc/vsftpd.conf
在末尾增加如下代码

# Turn on SSL
ssl_enable=YES

# Allow anonymous users to use secured SSL connections
allow_anon_ssl=YES

# All non-anonymous logins are forced to use a secure SSL connection in order to
# send and receive data on data connections.
force_local_data_ssl=YES
force_anon_data_ssl=YES

# All non-anonymous logins are forced to use a secure SSL connection in order to send the password.
force_local_logins_ssl=YES
force_anon_logins_ssl=YES

# Permit TLS v1 protocol connections. TLS v1 connections are preferred
ssl_tlsv1=YES

# Permit SSL v2 protocol connections. TLS v1 connections are preferred
ssl_sslv2=NO

# permit SSL v3 protocol connections. TLS v1 connections are preferred
ssl_sslv3=NO

# Disable SSL session reuse (required by WinSCP)
require_ssl_reuse=NO

# Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla)
ssl_ciphers=HIGH

# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem

然后重启vsftp
#service vsftpd restart

打开FTP工具(我用的是FlashFXP),连接类型选择“FTP使用公开SSL(验证TLS)” 如下图
类型选择

连接,会弹出是否接受证书,选择“接受并保存”之后我们即可登入远程的ftp服务器。
连接成功!
连接成功

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

到这里为止,采用SSL机制保护下的vsftpd就算配置完成了。用户使用FTP登录和上传下载数据的过程都将是加密传输的,其中AES256-SHA是默认的加密方式,用户可以修改“ssl_ciphers=xxx”的方式来选择想要的加密方式。

参考文章

《linux下vsftpd的安全设置方法》
《Setting Up vsftpd + TLS On Debian Squeeze》

标签: linux, Debian, vsftp, ssl, openssl

添加新评论