FTPS是在安全套接层使用标准的FTP协议和指令的一种增强型TFP协议,为FTP协议和数据通道增加了SSL安全功能。FTPS也称作“FTP-SSL”和“FTP-over-SSL”。SSL是一个在客户机和具有SSL功能的服务器之间的安全连接中对数据进行加密和解密的协议。
FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)
主动模式:FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
被动模式:FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
1)安装 vsftpd
apt-get install vsftpd
2)创建用户并在/home 目录下建立一个用户目录username
useradd -m test
passwd test
若是想更改用户登录目录,则执行命令
usermod -d /newpath test
3)更改配置文件
vi /etc/vsftpd.conf
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
#主动式连接使用的数据通道
connect_from_port_20=NO
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#启用被动连接模式
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=10100
allow_writeable_chroot=YES
ssl_enable=YES
ssl_sslv2=YES
ssl_sslv3=YES
ssl_tlsv1=YES
4)重启ftps
service vsftpd restart
5)FTP服务被动模式命令端口默认是21号端口,这里我们开放21号端口和数据端口范围
ufw allow from any to any port 21,10000:10100 proto tcp
或者直接关闭防火墙
ufw disable
6)测试能否连接
apt install lftp
lftp ftp://username@ip:21
安装自己的openssl证书
$ sudo openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
上面的命令用于生成证书和 key 并保存在 vsftpd.pem
运行后会提示你输入相关组织名称、常用名称等信息(可以随便填写,不要留空):
将上面的配置文件vsftpd.conf中的rsa_cert_file和rsa_private_key_file的值改成
/etc/ssl/private/vsftpd.pem
首先安装openssl。这里不提。
1)设置防火墙
systemctl stop firewalld.service #停止firewall(防火墙)
systemctl disable firewalld.service #禁止firewall开机启动
vi /etc/sysconfig/selinux
SELINUX=disabled
然后执行:setenforce 0
2)安装vsftpd
yum install -y vsftpd
3)创建用户名和密码
useradd user1
echo “123” |passwd --stdin user1
4)启动
service vsftpd start
5).配置本地CA证书服务器,修改配置文件:
这里默认openssl安装在/etc/pki/tls/目录下,openssl.cnf默认路径是/usr/local/openssl/ssl
注意证书有效日期设置 default_days = 3650
vi /etc/pki/tls/openssl.cnf
42 dir = /etc/pki/CA # Where everything is kept
85 countryName = optional
86 stateOrProvinceName = optional
87 organizationName = optional
cd /etc/pki/CA/
mkdir certs newcerts crl
touch index.txt serial
echo “01” >serial
openssl genrsa 1024 > private/cakey.pem
chmod 600 private/cakey.pem
ll private/cakey.pem
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
会打印
Country Name (2 letter code) [GB]:cn
State or Province Name (full name) [Berkshire]:shandong
Locality Name (eg, city) [Newbury]:jinan
Organization Name (eg, company) [My Company Ltd]:hello
Organizational Unit Name (eg, section) []:soft
Common Name (eg, your name or your server’s hostname) []:ca.hello.com
Email Address []:[email protected]
6)为ftp服务器创建证书
mkdir /etc/vsftpd/certs
cd /etc/vsftpd/certs
openssl genrsa 1024 >vsftpd.key
openssl req -new -key vsftpd.key -out vsftpd.csr
依次输入地区单位等信息
openssl ca -in vsftpd.csr -out vsftpd.cert
选择y
chmod 600 *
7)ftp服务应用证书
vim /etc/vsftpd/vsftpd.conf
rsa_cert_file=/etc/vsftpd/certs/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/certs/vsftpd.key
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_enable=YES
ssl_sslv2=YES
ssl_sslv3=YES
ssl_tlsv1=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
anonymous_enable=NO
ascii_upload_enable=YES
ascii_download_enable=YES
#锁定用户到各自的根目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_port=21 #端口号自己定义
listen_ipv6=NO
pam_service_name=vsftpd
#local_root=/ftpdata/ #用户路径
user_config_dir=/etc/vsftpd/userconfig #用户配置文件目录,里面以用户名创建文件,并输入local_root=/path
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=59000
pasv_max_port=60000
reverse_lookup_enable=NO
max_clients=1000
max_per_ip=1000
8)重启服务
systemctl restart vsftpd.service
9)测试
yum -y install lftp
lftp ftp://username@ip:21
注意openssl的有效时间设置长一些。否则修改比较麻烦。
查看openssl的有效时间方法:
openssl x509 -in /etc/ssl/private/vsftpd.pem -noout -dates
特别注意:linux使用命令连接ftps(基于SSL的FTP),以下是ChatGPT的回答
非常抱歉,我之前的回答有误。实际上,lftp命令不直接支持FTPS(基于SSL的FTP)连接。它只支持普通FTP和SFTP(SSH File Transfer Protocol)连接。
如果您需要使用SSL加密与FTPS服务器进行连接,并且希望在命令行中执行操作,可以考虑使用curl命令。下面是使用curl命令进行FTPS连接的示例:
首先,请确保系统上已安装curl工具包。如果没有安装,可以使用以下命令进行安装:
sudo apt-get update
sudo apt-get install curl
然后,使用以下命令连接到FTPS服务器:
curl --ftp-ssl -u : ftp://
在这个命令中,和是您的FTP凭据,是FTPS服务器的主机名或IP地址。
这样,curl命令将使用SSL加密与FTPS服务器进行连接。
不得不说,在网上自己很难找到类似的答案