利用vsftpd搭建ftpes

  |   0 评论   |   2,313 浏览

前言

FTPS与FTPES

FTPS 是一种扩展的FTP协议,它支持Transport Layer Security (TLS) 和Secure Sockets Layer (SSL) 加密协议。

当使用FTPS与服务器连接时,有两种方法:显式和隐式。

简单来说:

显式 又叫FTPES, FTPS客户端跟FTPS服务器必须显式使用一种同样的加密方法。如果客户端不要求加密,服务器也允许非加密通讯。

隐式 就是客户端直接通过TSL/SSL加密与服务器联系,如果服务器无响应,则停止通讯。

选择vsftpd的原因

正如vsftpd官方网站所说

Probably the most secure and fastest FTP server for UNIX-like systems.

安装

yum安装组件

yum install openssl vsftpd

准备证书

[root@nn0 vsftpd]# cd /etc/pki/tls/certs
[root@nn0 certs]# make vsftpd.pem
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
cat $PEM1 > vsftpd.pem ; \
echo "" >> vsftpd.pem ; \
cat $PEM2 >> vsftpd.pem ; \
rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
....+++
..+++
writing new private key to '/tmp/openssl.JUbiDi'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:CXY7
Organizational Unit Name (eg, section) []:CXY7
Common Name (eg, your name or your server's hostname) []:cxy7.com
Email Address []:cxy@cxy7.com
[root@nn0 certs]# cp -a vsftpd.pem /etc/vsftpd/

修改vsftpd配置文件

[root@nn0 vsftpd]# mv vsftpd.conf vsftpd.conf.bak
[root@nn0 vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=000
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_port=33
pasv_address=192.168.14.4
pasv_addr_resolve=yes
pasv_min_port=60000
pasv_max_port=60005
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
guest_enable=YES
guest_username=vftp
user_config_dir=/etc/vsftpd/vuser_conf
ssl_enable=YES
allow_anon_ssl=YES
force_local_data_ssl=YES
force_anon_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/vsftpd/vsftpd.pem

创建用户认证文件

[root@nn0 vsftpd]# vim vftpuser.txt
cxy
bglVUkLGfRn6d9se
[root@nn0 vsftpd]# db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
[root@nn0 vsftpd]# mkdir /etc/vsftpd/vuser_conf

指定虚拟用户对应的本地目录

[root@nn0 vsftpd]# vim /etc/vsftpd/vuser_conf/cxy
local_root=/data/ftp/cxy
virtual_use_local_privs=YES
write_enable=YES
anon_umask=770
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
download_enable=YES

创建ftp根目录

[root@nn0 vsftpd]# mkdir -p /data/ftp/cxy

添加必要的用户,注意此处的密码与vftpuser.txt中相同

[root@nn0 vsftpd]# useradd vftp
[root@nn0 vsftpd]# useradd cxy
[root@nn0 vsftpd]# passwd cxy
更改用户 cxy 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

测试

使用FileZilla Client客户端测试

可能出现的问题

vsftpd: cannot locate user specified in 'guest_username'

状态: 正在连接 192.168.14.4:33...
状态: 连接建立,等待欢迎消息...
响应: 500 OOPS: vsftpd: cannot locate user specified in 'guest_username':vftp
错误: 严重错误: 无法连接到服务器
状态: 已从服务器断开

解决办法

[root@nn0 vsftpd]# useradd vftp

530 Login incorrect.

状态: 正在连接 192.168.14.4:33...
状态: 连接建立,等待欢迎消息...
状态: 初始化 TLS 中...
状态: 正在验证证书...
状态: TLS 连接已建立。
命令: USER cxy
响应: 331 Please specify the password.
命令: PASS ****************
响应: 530 Login incorrect.
错误: 严重错误: 无法连接到服务器
状态: 已从服务器断开

查看原因

[root@nn0 vsftpd]# tail -f /var/log/secure
Oct 27 15:30:28 nn0 vsftpd[4831]: pam_unix(vsftpd:auth): check pass; user unknown
Oct 27 15:30:28 nn0 vsftpd[4831]: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=cxy rhost=192.168.130.6 
Oct 27 15:30:28 nn0 vsftpd[4831]: pam_succeed_if(vsftpd:auth): error retrieving information about user cxy

解决办法

[root@nn0 vsftpd]# useradd cxy
[root@nn0 vsftpd]# passwd cxy
更改用户 cxy 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。


读后有收获可以支付宝请作者喝咖啡