【新手工程师备忘录】如何使用 proftpd 将 FTP 切换到 SFTP

介绍

在解释如何进行更改之前,让我先简单介绍一下……
proftpd (专业FTP守护进程)”是
一种FTP服务器软件,用于建立FTP连接(使用FTP协议进行文件传输)。
然而,由于FTP协议采用明文传输而非加密,因此安全风险存在
这次,我尝试使用proftpd将FTP(明文)更改为SFTP(加密)!

前提

环境

云平台:AWS
FTP服务器软件:proftpd
proftpd版本:1.3.8b
端口:21(FTP)

*请注意,某些版本的proftpd可能不支持SFTP。

参考资料:
① ProFTPD 官方文档
http://www.proftpd.org/docs/
② ProFTPD 模块:mod_sftp:
http

状况

① 使用现有的proftpd FTP服务器软件。②
切换到SFTP通信,使用现有的用户名和密码。③
SFTP端口应为8022。

→ 减少所需工作量并轻松切换

备忘录

  1. 在安全组中配置 SFTP 端口
  2. 编辑 proftpd.conf
  3. 更改主机密钥权限
  4. 设置反映

并行操作流程(FTP + SFTP)

1. 配置安全组以允许 SFTP 端口
→ 允许目标 IP 地址使用 SFTP 端口 (8022)。

2. 编辑 proftpd.conf 文件
2.1. 备份目标文件

cp -ip /etc/proftpd.conf /etc/proftpd.conf_$(date +"%Y%m%d")

请比较一下区别:

diff /etc/proftpd.conf /etc/proftpd.conf_$(date +"%Y%m%d")

2.2 添加 SFTP 设置
→ 在最后一行添加以下内容

LoadModule mod_sftp.c # 加载 SFTP 模块<IfModule mod_sftp.c><VirtualHost 0.0.0.0>SFTPEngine on # 启用 SFTP 引擎 SFTPLog /var/log/sftp.log # 指定日志文件 DefaultRoot ~ # 指定默认根目录 # 虚拟用户设置 AuthUserFile /etc/ftppasswd # 指定包含用于身份验证的用户信息的文件路径 AuthGroupFile /etc/ftpgroup # 指定包含用于身份验证的组信息的文件路径 AuthOrder mod_auth_file.c # 指定身份验证顺序 Port 8022 # 指定 SFTP 端口 # 使用 sshd 的主机密钥 SFTPHostKey /etc/ssh/ssh_host_rsa_key # 指定 SFTP 主机密钥</VirtualHost></IfModule>

3. 更改主机密钥权限

chmod 600 /etc/ssh/ssh_host_rsa_key

→ 确认 /etc/ssh/ssh_host_rsa_key 的权限 是否设置为 600。

4. 应用设置
4.1 语法检查

proftpd -t

4.2 检查端口

netstat -lntp

预期结果:

tcp6 0 0 :::21 :::* 监听 PID/proftpd

4.3 检查过程

ps auuxf | grep proftpd

预期结果:

nobody 1140 0.0 0.1 52348 39724 ? SLs 2024 8:28 proftpd: (接受连接)

检查状态

systemctl status proftpd

4.5. 重启 proftpd

systemctl restart proftpd

4.6 检查端口

netstat -lntp

预期结果:

tcp6 0 0 :::8022 :::* 监听 PID/proftpd

5. 连接检查
→ 使用 WinSCP 等工具确认 FTP 和 SFTP 连接是否可行,以及编辑、删除和上传功能是否可行。

・FTP

传输协议 FTP
主机名 目标主机IP
端口号 21
用户名 目标 FTP 用户名
密码 目标FTP用户的密码

SFTP

传输协议 SFTP
主机名 目标主机IP
端口号 8022
用户名 目标 FTP 用户名
密码 目标FTP用户的密码

▶ 支持FTP和SFTP连接!

 

问题

如果出于安全原因想要停止 FTP 通信,
可以通过使用 LIMIT 限制 FTP 通信,并移除安全组中相关端口的 IP 权限来实现。
但是,我无法关闭端口的 LISTEN 状态……
(好吧,既然 FTP 连接本来就不可能建立,我们就忽略这一点吧。)

 
# FTP<Limit LOGIN> DenyAll # 拒绝 FTP 连接</Limit>LoadModule mod_sftp.c # 加载 SFTP 模块 # SFTP<IfModule mod_sftp.c><VirtualHost 0.0.0.0><Limit LOGIN> AllowAll # 允许 SFTP 连接</Limit>SFTPEngine on # 启用 SFTP 引擎 SFTPLog /var/log/sftp.log # 指定日志文件 DefaultRoot ~ # 指定默认根目录 # 虚拟用户设置 AuthUserFile /etc/ftppasswd # 指定包含用于身份验证的用户信息的文件路径 AuthGroupFile /etc/ftpgroup # 指定包含用于身份验证的组信息的文件路径 AuthOrder mod_auth_file.c # 指定身份验证顺序 Port 8022 # 指定 SFTP 端口 # 使用 sshd 的主机密钥 SFTPHostKey /etc/ssh/ssh_host_rsa_key # 指定 SFTP 主机密钥</VirtualHost></IfModule> 

即使您已停止 FTP 通信,也请使用 winscp 等工具检查连接是否按预期受到限制!

最后

我惊讶地发现从 FTP 切换到 SFTP 通信竟然如此简单!🙌
而且可以同时使用这两种方式也很棒,这样你就可以在切换到加密之前先检查 SFTP 连接是否存在任何问题。
如果你担心 FTP 通信的安全性,不妨试试看。
感谢阅读到最后!

如果您觉得这篇文章对您有帮助,请点个“赞”!
2
加载中...
2票,平均分:1.00/12
437
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

小鸡

我是一名应届毕业生工程师,2024年加入公司。我
拥有文科背景,没有任何工作经验。我在系统解决方案部门工作。