CentOS7下使用vsftpd搭建FTP服务器

环境准备

FTP 是目前最常用的一种上传及下载文件的协议,因其通信内容没有加密考虑其安全性而产生了 SCPSFPT 等协议。我们也可以使用 FTPS(FTP Over SSL/TLS) 来更加安全的上传及下载文件。在这里介绍如何基于 vsftpd 实现 FTPS 服务。

1、Centos系统:CentOS7系统安装
2、Nginx软件: Nginx基本配置
3、FTp软件: vsftpd在github项目
4、OpenSSL: OpenSSL在github项目

软件安装

安装openssl

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL协议,并提供丰富的应用程序供测试或其它目的使用

1、安装OpenSSL,可以使用 yum 方式和 编译 方式安装。这里使用 yum 方式安装。(ps:大多数情况下,安装系统时已经安装最新版本的OpenSSL了)

yum install openssl

2、使用 easy-rsa 生成服务器证书。

yum install easy-rsa

安装Vsftpd软件

vsftpdvery 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            #启用日志
connect_from_port_20=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 认证

vim /etc/pam.d/vsftpd

#注释掉auth required 这一行
#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提示:连接超时,读取目录列表失败


本文结束
生产不易,搬运不易,如果对您有帮助,请打赏一下下。