情况:
不是同一个用户,需要两个用户,一个来自宝塔面板,另一个是linux用户。Pure-FTPd 已经将用户从Linux系统中解耦了。
理由
Pure-FTPd,理论上最快。因为数据明文传输,没有加密解密的CPU开销,能最大程度利用网络带宽。但是不安全。用户名、密码和文件内容都以明文传输,在公网上极易被窃取。相对复杂。需要开放多个端口(默认21和20或动态端口),在防火墙和NAT环境下容易出问题。取决于客户端和服务器是否支持断点续传与恢复,协议本身不原生支持。
SFTP,相对较慢。CPU(尤其是性能较弱的设备)会成为瓶颈,因为所有数据都需要实时加密和解密。但是安全。所有数据通过SSH加密通道传输,能有效防止窃听和篡改。简单稳定。仅需一个端口(默认22),穿透防火墙容易,连接更稳定。协议原生支持断点续传与恢复,可以从中断处继续传输,对于200GB的文件非常关键。
总的来说,SFTP天生安全,无需额外配置。SFTP更省心。SFTP在对于200GB的文件场景下优势明显。
宝塔面板配置
先在宝塔面板中创建一个ftp用户,这没啥难度。

Linux配置
这个相对比较复杂。
bash
# 创建系统用户 ftp(解决:Pure-FTPd 在启动时找不到系统用户 ftp,导致服务运行异常)
useradd -r -s /bin/false ftp
# 创建用户(bak135),指定家目录(/bak135/AutoBackUp),并禁止其登录shell(/usr/sbin/nologin)
useradd -d /bak135/AutoBackUp -s /usr/sbin/nologin bak135
# 设置用户密码
passwd bak135
# 创建一个组,比如叫 sftp_group
groupadd sftp_group
# 将 bak135 用户加入 sftp_group 组
groups bak135
# 将系统用户 bak135 加入 sftp_group
usermod -aG sftp_group www
#先查看 sftp_group 的 GID
getent group sftp_group
# 输出 sftp_group:x:1004:bak135
#修改虚拟用户 bak135 的 GID(上面的 1004)
/www/server/pure-ftpd/bin/pure-pw usermod bak135 -g 1004
# 修改后必须更新数据库
/www/server/pure-ftpd/bin/pure-pw mkdb
# 设置目录的组权限
chown -R :sftp_group /bak135/AutoBackUp
# 设置目录权限
chmod -R 775 /bak135/AutoBackUp
chmod g+s /bak135/AutoBackUp
修改 SSH 配置
bash
vi /etc/ssh/sshd_config
bash
# 在文件末尾添加以下配置
Match User bak135
ChrootDirectory /bak135
ForceCommand internal-sftp -d /AutoBackUp
AllowTcpForwarding no
X11Forwarding no
PasswordAuthentication yes
bash
systemctl restart ssh
systemctl restart pure-ftpd