状态: 已弃用
本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.
请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。
介绍
FTP 或文件传输协议是一种在本地和远程服务器之间传输文件的流行方式。 虽然 FTP 过去是首选的传输方法,但它以纯文本形式进行身份验证,使其不安全。
ProFTPd 是一种流行的 FTP 服务器,可以配置为使用 SFTP 协议,这是一种安全的 FTP 替代方案,而不是 FTP。 本文将向您展示如何配置 ProFTPd 以使用该协议来避免 FTP 的不安全性。
我们将向您展示如何在 Ubuntu 12.04 VPS 上进行配置,但大多数发行版应该以类似的方式运行。
安装 ProFTPd
ProFTPd 软件位于 Ubuntu 的默认存储库中。 我们可以通过键入来安装它:
sudo apt-get update && sudo apt-get install proftpd
在安装过程中出现提示时选择“独立”。
安装后,我们需要编辑一些基本的配置变量。 使用文本编辑器以 root 权限打开 ProFTPd 配置文件:
sudo nano /etc/proftpd/proftpd.conf
更改 ServerName
参数以匹配您的域名或 IP 地址。
ServerName "yourDomainOrIPAddress"
从 DefaultRoot
参数前面删除 #
以取消注释:
DefaultRoot ~
保存并关闭文件。
使用 ProFTPd 配置 SFTP 访问
现在,我们需要将服务配置为使用 SFTP。
默认文件在 conf.d
子目录中查找其他配置。 我们将在那里创建一个文件以启用 SFTP:
sudo nano /etc/proftpd/conf.d/sftp.conf
ProFTPd 可以采用与 Apache 相同的格式进行配置。 如果您熟悉 Apache,这应该看起来很熟悉。 如果你不熟悉,很容易弄清楚。
将以下内容复制并粘贴到文件中:
<IfModule mod_sftp.c> SFTPEngine on Port 2222 SFTPLog /var/log/proftpd/sftp.log # Configure both the RSA and DSA host keys, using the same host key # files that OpenSSH uses. SFTPHostKey /etc/ssh/ssh_host_rsa_key SFTPHostKey /etc/ssh/ssh_host_dsa_key SFTPAuthMethods publickey SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u # Enable compression SFTPCompression delayed </IfModule>
解构 SFTP 配置
让我们将文件分解为其组成部分,以便我们更好地理解它。
整个部分都包含在 IfModule
标记中,以确保配置选项仅在 SFTP 模块可用(确实如此)时应用。
- SFTPEngine on:为服务器启用 SFTP 功能
- Port 2222:指定将接受 SFTP 连接的端口。 由于 SSH 已经在端口 22 上寻找连接,我们需要一个不同的端口。
- SFTPLog:配置将要创建的日志文件的位置。
- SFTPHostKey:这两行指向 SSH 主机密钥。 这就是服务器向客户端标识自己的方式。 在大多数情况下,我们使用的线条应该是正确的。
- SFTPAuthMethods:此行将服务器配置为 only 接受使用 SSH 密钥的连接。
- SFTPAuthorizedUserKeys:此参数命名可用于对某人进行身份验证的 SFTP 密钥的位置。
%u
部分将替换验证用户的名称。 - SFTPCompression delay:设置文件传输期间将使用的压缩机制。
配置基于密钥的身份验证
ProFTPd 可以使用 SSH 密钥对用户进行身份验证,但必须将密钥转换为使用 RFC4716 格式。 幸运的是,SSH 套件能够本地转换这些文件。
首先创建一个目录来存放这些文件:
sudo mkdir /etc/proftpd/authorized_keys
现在,我们需要转换当前用于登录服务器的公钥。 如果您只有一个用户,则可以使用以下命令:
sudo ssh-keygen -e -f ~用户名/.ssh/authorized_keys | sudo tee /etc/proftpd/authorized_keys/用户名
如果您有多个用户并且需要分开他们的登录凭据,则必须使用实际的公钥而不是 authorized_keys 文件,如下所示:
sudo ssh-keygen -e -f /path/to/id_rsa.pub | sudo tee /etc/proftpd/authorized_keys/ username_who_owns_key
您可以根据需要添加任意数量的密钥。
完成后,重新启动 ProFTPd 服务器:
sudo service proftpd restart
在 SSH 端口上禁用 SFTP 访问
现在我们已经通过 ProFTPd 启用了 SFTP,我们可以在普通的 SSH 端口上禁用它。 这将允许我们配置用户访问并锁定每个用户可以通过 ProFTPd 看到和操作的内容,而不必担心人们能够离开他们的主目录。
打开 SSHD 配置文件:
sudo nano /etc/ssh/sshd_config
在文件的底部,您应该会看到如下所示的一行:
Subsystem sftp /usr/lib/openssh/sftp-server
在其前面放置一个井号 (#) 以注释掉该行:
# Subsystem sftp /usr/lib/openssh/sftp-server
保存并关闭文件。
现在,重新启动 SSH 服务器以启用您的更改:
sudo service ssh restart
与客户联系
有很多 FTP 客户端可以用来连接我们的服务器。 好的也实现了 SFTP 功能。 我们将演示如何通过在所有主要平台上都可用的 FileZilla 进行连接。
打开 FileZilla 的首选项。 在左侧菜单中找到“SFTP”部分。
单击“添加密钥文件”,然后导航到您的私钥的位置。 通常,这将在 ~/.ssh/id_rsa
中。 您可能会收到一条消息,说明 FileZilla 会将其转换为受支持的格式。
按“确定”退出首选项。
在主界面中,在“主机”字段中键入 sftp://
,然后输入您服务器的域名或 IP 地址。 将您的用户名放在“用户名”字段中,并填写您为“端口”字段选择的端口:
单击“快速连接”,FileZilla 应该会使用您的 SSH 密钥自动连接。
结论
您的服务器现在应该配置为接受由 ProFTPd 管理的 SFTP 连接。 您可以配置软件来管理用户以及限制哪些区域。 通常,由于缺乏适当的安全性,应不惜一切代价避免使用 FTP。