【新手工程师备忘录】如何使用 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://www.proftpd.org/docs/contrib/mod_sftp.html
状况
① FTP 服务器软件将使用现有的 proftpd。②
我们希望切换到 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
| 传输协议 | 文件传输协议 |
| 主机名 | 目标主机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 通信的安全性,不妨一试。
感谢您阅读到最后!
1