一、环境准备
FTP
是目前最常用的一种上传及下载文件的协议,因其通信内容没有加密考虑其安全性而产生了 SCP
及 SFPT
等协议。我们也可以使用 FTPS(FTP Over SSL/TLS)
来更加安全的上传及下载文件。在这里介绍如何基于 vsftpd
实现 FTPS
服务。
1、Centos系统:CentOS7系统安装
2、Nginx软件: Nginx基本配置
3、FTp软件: vsftpd在github项目
4、OpenSSL: OpenSSL在github项目
二、 软件安装
2.1 安装openssl
OpenSSL
是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL
协议,并提供丰富的应用程序供测试或其它目的使用.
1、安装OpenSSL
,可以使用 yum
方式和 编译
方式安装。这里使用 yum
方式安装。(ps:大多数情况下,安装系统时已经安装最新版本的OpenSSL了)
yum install openssl
2、使用 easy-rsa
生成服务器证书。
yum install easy-rsa
2.2 安装Vsftpd软件
vsftpd
是 very secure FTP daemon
的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX
等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP
服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
1、使用yum
方式安装
yum install vsftpd
2、服务启动并加入自启动项,可以待修改配置后执行。
systemctl start vsftpd #服务启动
systemctl enable vsftpd #加入启动项
systemctl stop vsftpd #服务关闭
systemctl disable vsftpd #删除启动项
systemctl status vsftpd #查看服务状态
3、添加ftp用户
useradd -s /sbin/nologin ftpuser # 添加不能登录SHELL的用户,保证安全。
passwd ftpuser # 修改用户密码
软件配置
证书配置
使用 easy-rsa
生成服务端证书
1、复制 esay-rsa
的文件到指定目录,并进入目录;
cp -a /usr/share/easy-rsa/3.0.3 /etc/vsftpd/easyrsa
cd /etc/vsftpd/easyrsa
2、添加 vars
文件
cp /usr/share/doc/easy-rsa-3.0.3/vars.example /etc/vsftpd/easyrsa/vars
3、初始化 pki
目录
./easyrsa init-pki
4、以无密码方式,创建 服务端CA
文件
./easyrsa build-ca nopass
5、、以无密码方式,创建 服务端key
文件
./easyrsa gen-req longserver nopass
6、注册服务端CN
名,生成服务端crt
文件
./easyrsa sign server longhserver
7、生成dh.pem
文件
./easyrsa gen-dh
查看证书目录下的文件
使用 easy-rsa
生成客户端证书
1、复制esay-rsa
的文件到指定目录,并进入目录;
cp -a /usr/share/easy-rsa/3.0.3 /etc/vsftpd/clientrsa
cd clientrsa
2、添加 vars
文件
cp /usr/share/doc/easy-rsa-3.0.3/vars.example /etc/vsftpd/easyrsa/vars
3、初始化 pki
目录
./easyrsa init-pki
4、以无密码方式,创建 客户端req
文件
./easyrsa gen-req longclient nopass
5、进入 服务端 key
目录,关联客户端req
,使之向服务端注册
cd /etc/vsftpd/easyrsa/
./easyrsa import-req /etc/vsftpd/clientrsa/pki/reqs/longclient.req longclient
6、注册客户端CN
名,生成客户端key
文件
./easyrsa sign client longclient
vsftpd配置
1、修改配置文件
cp -a /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak # 备份原始配置文件
vi /etc/vsftpd/vsftpd.conf
修改成如下内容:
anonymous_enable=NO #不允许匿名用户登录
local_enable=YES #vsftpd所在系统的用户可以登录ftp
write_enable=YES #允许使用任何可以修改文件系统的FTP指令
local_umask=022 #匿名用户新增文件的umask数值
anon_upload_enable=NO #匿名用户不可以上传文件
anon_mkdir_write_enable=NO #匿名用户不可以修改文件
dirmessage_enable=YES #信息显示
xferlog_enable=YES #开启数据传输端口,默认为20
xferlog_file=/var/log/xferlog #日志保存位置
xferlog_std_format=YES #日志使用标准格式
idle_session_timeout=600 #登录超时时间60秒,不操作,即断开。
data_connection_timeout=7200 #传输超时时间
ftpd_banner=Welcome to blah FTP service . #登录欢迎语
chroot_local_user=YES #锁定用户目录
allow_writeable_chroot=YES #允许对家目录的写权限
listen=YES #开启IPV4监听
listen_ipv6=NO #关闭IPV6监听
pam_service_name=vsftpd #验证文件名字
userlist_enable=YES #允许userlist_file文件中的用户访问FTP.
userlist_deny=NO #如果为NO,则将需要登录的用户添加到/etc/vsftpd/user_list。
tcp_wrappers=YES #支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny
rsa_cert_file=/etc/vsftpd/easyrsa/pki/issued/longclient.crt #SSL/Tls证书保存位置(可以是默认位置,路径写对就行)
rsa_private_key_file=/etc/vsftpd/clientrsa/pki/private/longclient.key #私钥文件
allow_anon_ssl=NO #不允许匿名用户登录
force_local_data_ssl=YES #对数据加密
force_local_logins_ssl=YES #使用SSL登录
ssl_sslv2=YES #开启SSLv2
ssl_sslv3=YES #开启SSLv2
ssl_tlsv1=YES #开启Tls
pasv_promiscuous=YES #开启被动上传模式
pasv_min_port=65000 #被动上传模式最小端口
pasv_max_port=65001 #被动上传模式最大端口
pasv_addr_resolve=YES #被动上传模式地址转换
保存退出
2、将用户添加允许登录列表
vim /etc/vsftpd/user_list
ftpuser1 # 每个用户一行
ftpuser2
3、关闭pam
认证
# auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
3、启动或重启vsftp
服务
systemctl restart vsftpd
systemctl status vsftpd
通过防火墙
1、Centos7以来,默认使用firewalld
防火墙,这里我们以此为例修改防火墙规则。
firewall-cmd --permanent --zone=public --add-service=ftp #添加FTP端口规则到防火墙
firewall-cmd --reload #重新加载防火墙
firewall-cmd --list-all #查看防火墙规则
2、现在这种状态,如果不添加SSL认证就能够正常使用FTP了,但是如果启用了SSL认证(FTP to SSL)会出现不能读取列表。
3、因为动态端口
的规则和ftp pasv
模式,我们找到vsftpd.conf
这个文件,可以看到已经定义`ftp pasv’端口,但是在防火墙没有打开(测试停用防火墙可以正常使用)
firewall-cmd --permanent --zone=public --add-port=65001/tcp
firewall-cmd --permanent --zone=public --add-port=65000/tcp
firewall-cmd --reload
4、现在看一下完成的状态
文章引用
http://blog.csdn.net/pojun_gufeiyang/article/details/70158074 Linux中FTP安装与配置
http://www.linuxidc.com/Linux/2012-09/71129p2.htm Linux下ftp+SSL实现ftps
https://www.olinux.org.cn/linux/1000.html Centos下vsftpd提示:连接超时,读取目录列表失败
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin