VPS 上的 Ubuntu 系统中搭建安全的 FTP 服务
本文目标旨在 VPS 的 Ubuntu 系统中安装 VSFTPD(Very Secure FTP Deamon)服务,并调整配置文件提高 ftp 访问的安全性。
一、在 Ubuntu 中安装 VSFTPD 服务器
使用 root 用户登录 VPS 服务器
更新系统安装包列表,安装 VSFTPD 二进制包:
1 2
apt-get update apt-get install vsftpd
手动开启服务,并使得在下次开机时能够自动开启服务:
1 2
systemctl start vsftpd systemctl enable vsftpd
二、在 Ubuntu 中配置 VSFTPD 服务器
创建一个原始配置文件
/etc/vsftpd/vsftpd.conf
的备份文件:1
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
打开 vsftpd 配置文件
1
vi /etc/vsftpd.conf
把下面的这些选项添加 / 改成所展示的值:
1 2 3 4 5 6 7 8 9 10 11
anonymous_enable=NO # 关闭匿名登录 local_enable=YES # 允许本地用户登录 write_enable=YES # 启用可以修改文件的 FTP 命令 local_umask=022 # 本地用户创建文件的 umask 值 dirmessage_enable=YES # 当用户第一次进入新目录时显示提示消息 xferlog_enable=YES # 一个存有详细的上传和下载信息的日志文件 connect_from_port_20=YES # 在服务器上针对 PORT 类型的连接使用端口 20(FTP 数据) xferlog_std_format=YES # 保持标准日志文件格式 listen=NO # 阻止 vsftpd 在独立模式下运行 pam_service_name=vsftpd # vsftpd 将使用的 PAM 验证设备的名字 tcp_wrappers=YES # 打开 tcp 包装器
继续增加配置 ,使得服务器可以基于用户列表文件
/etc/vsftpd.userlist
来允许或拒绝用户访问 FTP1 2 3
userlist_enable=YES # vsftpd 将会从所给的用户列表文件中加载用户名字列表 userlist_file=/etc/vsftpd.userlist # 存储用户名字的列表 userlist_deny=NO # 允许列表中的用户访问 ftp 服务器
注意:
- 在默认情况下,如果通过
userlist_enable=YES
启用了用户列表,且设置userlist_deny=YES
时,那么,用户列表文件/etc/vsftpd.userlist
中的用户是不能登录访问的。但是,选项userlist_deny=NO
则反转了默认设置,这种情况下只有用户名被明确列出在/etc/vsftpd.userlist
中的用户才允许登录到 FTP 服务器。 - 另外,如果
pam_service_name=vsftpd
被设置,则还要查看/etc/pam.d/vsftpd
的内容包含sense=deny
时,/etc/pam.d/vsftpd
中列出的用户仍然不可访问 ftp 服务器
- 在默认情况下,如果通过
建立新的用户用以访问 ftp 服务器
1 2
useradd -m -c "Ciel Yang, owner of the server" -s /bin/bash ciel passwd
重启服务后,测试 ftp 服务器连通性(这里使用 Windows 下的 FileZilla FTP Client 测试)
1
systemctl restart vsftpd
注意:一定不要忘记测试匿名用户能否登录 ftp 服务器,防止粗心大意造成的安全隐患。
三、使用 SSL/TLS 保护 ftp 服务器
首先在
/etc/ssl/
下创建一个子目录来存储 SSL/TLS 证书和密钥文件,如果它不存在的话这样做:1
mkdir /etc/ssl/private
在一个单一文件中生成证书和密钥,运行下面的命令:
1
openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
注意:上述命令执行后会出现多行提示,要求输入个人信息以便登录方确认服务器的证书提供者信息,根据自己实际情况输入即可。(自用服务器可随意)
打开 vsftpd 配置文件并定义 SSL 详细信息:
1
vi /etc/vsftpd.conf
添加或找到选项
ssl_enable
,并将它的值设置为YES
来激活使用 SSL ,同样,因为 TLS 比 SSL 更安全,启用ssl_tlsv1
选项限制 vsftpd 只使用 TLS:1 2 3 4
ssl_enable=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
接下来,使用#字符注释掉证书设置的行然后进行修改(或径直修改也可),如下所示:
1 2 3 4 5
#rsa_cert_file=/etc/ssl/private/ssl-cert-snakeoil.pem #rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
阻止匿名用户使用 SSL 登录,并且迫使所有的非匿名登录使用安全的 SSL 链接来传输数据和在登录期间发送密码:
1 2 3
allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
提高加密算法等级:
1
ssl_ciphers=HIGH
重启服务
1
systemctl restart vsftpd
测试 ftp 服务器连通性,FileZilla 中选择“站点管理器”以新建站点进行测试,站点信息如下(其他信息无限更改):
- 协议:FTP - 文件传输协议
- 加密:要求显式的 FTP over TLS