【新手工程师备忘录】如何使用 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。
→ 减少所需工作量并轻松切换
备忘录
- 在安全组中配置 SFTP 端口
- 编辑 proftpd.conf
- 更改主机密钥权限
- 设置反映
并行操作流程(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
