如何配置 ProFTPd 以使用 SFTP 而不是 FTP

金钱(警告)

状态: 被贬值

如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已於 2017 年 4 月 28 日到達終止期 (EOL) 並不再收到安全性修補或更新。

相反,请参阅: 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本编写的指南。

介绍


FTP,或文件传输协议,是传输文件在本地和远程服务器之间的一种流行的方式.虽然FTP在过去是传输的偏好方法,但它用简单的文本进行身份验证,使其不安全。

ProFTPd 是一个流行的FTP服务器,可以配置使用SFTP协议,一个安全的FTP替代方案,而不是FTP。

我们将向您展示如何在Ubuntu 12.04 VPS上配置此功能,但大多数发行版应该以类似的方式运行。

安装 ProFTPd


ProFTPd软件位于Ubuntu的默认存储库中,我们可以通过键入来安装:

1sudo apt-get update && sudo apt-get install proftpd

在安装过程中提示时选择单独站立

安装后,我们需要编辑一些基本的配置变量. 使用文本编辑器打开具有 root 特权的 ProFTPd 配置文件:

1sudo nano /etc/proftpd/proftpd.conf

更改ServerName参数以匹配您的域名或IP地址。

1ServerName      "yourDomainOrIPAddress"

DefaultRoot参数的前面删除# ,以解除评论:

1DefaultRoot     ~

保存并关闭文件。

配置 SFTP 访问与 ProFTPd


现在,我们需要配置服务以使用 SFTP。

默认文件在conf.d子目录中寻找额外的配置,我们将在那里创建一个文件,以允许使用 SFTP:

1sudo nano /etc/proftpd/conf.d/sftp.conf

ProFTPd 可以采用与 Apache 相同的格式配置。如果你熟悉 Apache,这应该看起来很熟悉。

将以下内容复制并粘贴到文件中:

 1<IfModule mod_sftp.c>
 2
 3        SFTPEngine on
 4        Port 2222
 5        SFTPLog /var/log/proftpd/sftp.log
 6
 7        # Configure both the RSA and DSA host keys, using the same host key
 8        # files that OpenSSH uses.
 9        SFTPHostKey /etc/ssh/ssh_host_rsa_key
10        SFTPHostKey /etc/ssh/ssh_host_dsa_key
11
12        SFTPAuthMethods publickey
13
14        SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u
15
16        # Enable compression
17        SFTPCompression delayed
18
19</IfModule>

解构 SFTP 配置


让我们把文件分成组件,以便我们更好地理解它。

整个部分被包裹在)。

*SFTPEngine on : 为服务器启用 SFTP 能力 *第2222号港 :指定接受SFTP连接的端口。 由于SSH已经在端口22上寻找连接,我们想要一个不同的端口. *SFTPLog :配置将要创建的日志文件的位置。 *SFTPHostKey :这两行指向SSH主机密钥. 服务器就是这样向客户端识别自己的. 大部分情况下,我们使用的台词应该是正确的. *SFTPAuth方法 : 此行将服务器配置为_只_ 接受与 SSH 密钥的连接 。 *SFTP授权 用户密钥 : 此参数命名了可用于认证某人的 SFTP 密钥的位置 。 "u" 部分将替换正在认证的用户名 。 *SFTP压缩延迟 : 这设定了文件传输过程中将使用的压缩机制. .

配置基于密钥的身份验证


ProFTPd 可以使用 SSH 密钥来验证用户,但必须将密钥转换为使用 RFC4716 格式。

开始创建一个目录来容纳这些文件:

1sudo mkdir /etc/proftpd/authorized_keys

现在,我们需要转换当前用于登录服务器的公共密钥. 如果您只有一个用户,您可以使用以下命令:

sudo ssh-keygen -e -f ~username/.ssh/authorized_keys | sudo tee /etc/proftpd/authorized_keys/username

如果您有多个用户,并且需要将其日志分离为凭证,则必须使用实际的公共密钥而不是授权_keys 文件,如下:

sudo ssh-keygen -e -f /path/to/id_rsa.pub | sudo tee /etc/proftpd/authorized_keys/username_who_owns_key

你可以添加你想要的多少钥匙。

完成后,重新启动 ProFTPd 服务器:

1sudo service proftpd restart

在 SSH 端口中禁用 SFTP 访问


现在我们已经通过ProFTPd启用了SFTP,我们可以在正常的SSH端口禁用它,这将使我们能够配置用户访问并锁定每个用户可以通过ProFTPd看到和操纵的内容,而不必担心人们可以离开他们的家庭目录。

打开 SSHD 配置文件:

1sudo nano /etc/ssh/sshd_config

在文件的底部,你应该看到一个看起来像这样的行:

1Subsystem sftp /usr/lib/openssh/sftp-server

在其前面放一个哈希(# ),以评论该行:

1# Subsystem sftp /usr/lib/openssh/sftp-server

保存并关闭文件。

现在,重新启动 SSH 服务器以启用您的更改:

1sudo service ssh restart

与客户连接


有很多FTP客户端,我们可以用来连接到我们的服务器. 好的客户端也实现SFTP功能. 我们将展示如何通过FileZilla连接,这是在所有主要平台上可用的。

打开 FileZilla 的偏好选项,在左侧菜单中找到SFTP部分。

FileZilla SFTP menu

点击添加 keyfile,然后导航到您的私钥的位置. 通常,这将是在 ~/.ssh/id_rsa. 您可能会收到一个消息说 FileZilla 将其转换为受支持的格式。

点击OK以退出偏好。

在主界面中,键入sftp://,然后在主机字段中键入您的服务器的域名或IP地址,将您的用户名放入用户名字段,然后填写您选择的端口字段的端口:

FileZilla SFTP information

点击快速连接,FileZilla 将使用您的 SSH 密钥自动连接。

结论


您的服务器现在应该配置为接受由 ProFTPd 管理的 SFTP 连接。您可以配置软件来管理用户以及哪些区域受到限制。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus