---
author: Aaron Kili
category: 系统运维
comments_data: []
count:
  commentnum: 0
  favtimes: 5
  likes: 0
  sharetimes: 0
  viewnum: 12353
date: '2017-03-12 13:35:00'
editorchoice: false
excerpt: 安装 FTP 服务器而不启用加密服务具有某些安全隐患。 正如我们在本教程中解释的，您可以在 Ubuntu 16.04 / 16.10 中配置 FTP
  服务器使用 SSL / TLS 连接来实现安全性。
fromurl: http://www.tecmint.com/secure-ftp-server-using-ssl-tls-on-ubuntu/
id: 8295
islctt: true
largepic: /images/p/201703/12/104507p0fbu1w81fmed8io.jpg
permalink: /article-8295-1.html
pic: /images/p/201703/12/104507p0fbu1w81fmed8io.jpg.thumb.jpg
related: []
reviewer: ''
selector: ''
summary: 安装 FTP 服务器而不启用加密服务具有某些安全隐患。 正如我们在本教程中解释的，您可以在 Ubuntu 16.04 / 16.10 中配置 FTP
  服务器使用 SSL / TLS 连接来实现安全性。
tags:
- FTPS
- FTP
- SSL
thumb: false
title: 在 Ubuntu 上使用 SSL/TLS 搭建一个安全的 FTP 服务器
titlepic: true
translator: DockerChen
updated: '2017-03-12 13:35:00'
---

在本教程中，我们将介绍如何使用 Ubuntu 16.04 / 16.10 中的 SSL / TLS 保护 FTP 服务器（FTPS）。


如果你想为基于 CentOS 的发行版安装一个安全的 FTP 服务器，你可以阅读 – [在 CentOS 上使用 SSL / TLS 保护 FTP 服务器](http://www.tecmint.com/axel-commandline-download-accelerator-for-linux/)。


在遵循本指南中的各个步骤之后，我们将了解在 FTP 服务器中启用加密服务的基本原理，以确保安全的数据传输至关重要。


![](/images/p/201703/12/104507p0fbu1w81fmed8io.jpg)


### 要求


* 你必须已经[在 Ubuntu 上安装和配置好一个 FTP 服务器](http://www.tecmint.com/install-ftp-server-in-ubuntu/)


在我们进行下一步之前，确保本文中的所有命令都将以root身份或者 [sudo 特权账号](http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/)运行。


### 第一步：在 Ubuntu 上为 FTP 生成 SSL/TLS 证书


1、我们将首先在 `/etc/ssl/` 下创建一个子目录来存储 SSL/TLS 证书和密钥文件，如果它不存在的话这样做：



```
$ sudo mkdir /etc/ssl/private

```

2、 现在我们在一个单一文件中生成证书和密钥，运行下面的命令：



```
$ sudo openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048

```

上面的命令将提示你回答以下问题，不要忘了输入合适于你情况的值：



```
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Lower Parel
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:tecmint
Email Address []:admin@tecmint.com

```

### 第二步：在 Ubuntu 上配置 vsftpd 来使用 SSL/TLS


3、在我们进行 vsftpd 配置之前，对于那些[已启用 UFW 防火墙](/article-8087-1.html)的用户，你们必须打开端口 `990` 和 `40000` - `50000`，来在 vsftpd 配置文件中分别启用 TLS 连接端口和被动端口的端口范围：



```
$ sudo ufw allow 990/tcp
$ sudo ufw allow 40000:50000/tcp
$ sudo ufw status

```

4、现在，打开 vsftpd 配置文件并定义 SSL 详细信息：



```
$ sudo vi /etc/vsftpd/vsftpd.conf
或
$ sudo nano /etc/vsftpd/vsftpd.conf

```

然后，添加或找到选项 `ssl_enable`，并将它的值设置为 `YES` 来激活使用 SSL ，同样，因为 TLS 比 SSL 更安全，我们将通过启用 `ssl_tlsv1` 选项限制 vsftpd 只使用 TLS：



```
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

```

5、 接下来，使用 `＃` 字符注释掉下面的行，如下所示：



```
#rsa_cert_file=/etc/ssl/private/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

```

然后，添加以下行以定义 SSL 证书和密钥文件的位置（LCTT 译注：或径直修改也可）：



```
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

```

6、现在，我们也可以阻止匿名用户使用 SSL 登录，并且迫使所有的非匿名登录使用安全的 SSL 链接来传输数据和在登录期间发送密码：



```
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

```

7、此外，我们可以使用以下选项在 FTP 服务器中添加更多的安全功能 。对于选项 `require_ssl_reuse=YES`，它表示所有的 SSL 数据链接都需重用已经建立的 SSL 会话（需要证明客户端拥有 FTP 控制通道的主密钥），但是一些客户端不支持它，如果没有客户端问题，出于安全原因不应该关闭（默认开启）。（LCTT 译注：原文此处理解有误，译者修改。）



```
require_ssl_reuse=NO

```

此外，我们可以通过 `ssl_ciphers` 选项来设置 vsftpd 允许使用那些加密算法。 这将有助于挫败攻击者使用那些已经发现缺陷的加密算法的尝试：



```
ssl_ciphers=HIGH

```

8、 然后，我们定义被动端口的端口范围（最小和最大端口）。



```
pasv_min_port=40000
pasv_max_port=50000

```

9、 要启用 SSL 调试，把 openSSL 连接诊断记录到 vsftpd 日志文件中，我们可以使用 `debug_ssl` 选项：



```
debug_ssl=YES

```

最后，保存配置文件并且关闭它。然后重启 vsftpd 服务：



```
$ systemctl restart vsftpd

```

### 第三步：在 Ubuntu 上使用 SSL / TLS 连接验证 FTP


10、 执行所有上述配置后，通过尝试[在命令行中使用 FTP](http://www.tecmint.com/sftp-command-examples/) 来测试 vsftpd 是否现在使用了 SSL / TLS 连接，如下所示。


从下面的输出来看，这里有一个错误的信息告诉我们 vsftpd 仅允许用户（非匿名用户）从支持加密服务的安全客户端登录。



```
$ ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>

```

该命令不支持加密服务从而导致了上述错误。因此，要安全连接到启用了加密服务的 FTP 服务器，我们需要一个默认支持 SSL/TLS 连接的 FTP 客户端，例如 FileZilla。


### 第四步：在客户端上安装FileZillaStep来安全地连接FTP


11、FileZilla 是一个强大的，广泛使用的跨平台 FTP 客户端，支持在 SSL/TLS 上的 FTP。为了在 Linux 客户端机器上安装 FileZilla，使用下面的命令。



```
--------- On Debian/Ubuntu ---------
$ sudo apt-get install filezilla   
--------- On CentOS/RHEL/Fedora --------- 
# yum install epel-release filezilla
--------- On Fedora 22+ --------- 
$ sudo dnf install filezilla

```

12、 一旦安装完成，打开它然后点击File=>Sites Manager或者（按Ctrl+S）来获取下面的Site Manager。


![Filezilla Site Manager](/images/p/201703/12/104520xyzixqhlnzit3jyi.png)


*Filezilla Site Manager*


13、 现在，定义主机/站点名字，添加 IP 地址，定义使用的协议，加密和登录类型，如下面的屏幕（使用适用于你方案的值）：


点击 New Site 按钮来配置一个新的站点/主机连接。


* Host: 192.168.56.10
* Protocol: FTP – File Transfer Protocol
* Encryption: Require explicit FTP over #推荐
* Logon Type: Ask for password #推荐
* User: 用户名


![在Filezilla上配置新的FTP站点](/images/p/201703/12/104521l0qnn2c9envfnvsn.png)


*在 Filezilla 上配置新的 FTP 站点*


14、 然后从上面的界面单击连接以输入密码，然后验证用于 SSL / TLS 连接的证书，并再次单击确定以连接到 FTP 服务器：


![验证FTP的SSL证书](/images/p/201703/12/104522vpereboblhcloh0o.png)


*验证 FTP 的 SSL 证书*


15、现在，你应该通过 TLS 连接成功地登录到了 FTP 服务器，检查连接状态部分，来获取有关下面接口的更多信息。


![连接Ubuntu的FTP服务器](/images/p/201703/12/104523p4vercn6rv6lrbj7.png)


*连接 Ubuntu 的 FTP 服务器*


16、 最后，让我们在文件夹中从本地的机器传送文件到 FTP 服务器, 查看 FileZilla 界面的下端来查看有关文件传输的报告。


![使用Filezilla安全的传输FTP文件](/images/p/201703/12/104524blnz0orr55on1la2.png)


*使用 Filezilla 安全的传输 FTP 文件*


就这样！ 始终记住，安装 FTP 服务器而不启用加密服务具有某些安全隐患。 正如我们在本教程中解释的，您可以在 Ubuntu 16.04 / 16.10 中配置 FTP 服务器使用 SSL / TLS 连接来实现安全性。


如果你在 FTP 服务器上设置 SSL/TLS 遇到任何问题，请使用以下评论表单来分享您对本教程/主题的问题或想法。




---


作者简介：


Aaron Kili 是 Linux 和 F.O.S.S 爱好者，即将成为 Linux SysAdmin 和网络开发人员，目前是 TecMint 的内容创作者，他喜欢在电脑上工作，并坚信分享知识。




---


via: <http://www.tecmint.com/secure-ftp-server-using-ssl-tls-on-ubuntu/>


作者：[Aaron Kili](http://www.tecmint.com/author/aaronkili/) 译者：[DockerChen](https://github.com/DockerChen) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出