1.安装vsftpd
sudo apt update
sudo apt install vsftpd
2.配置 vsftpd
sudo vim /etc/vsftpd.conf
将以下参数修改为对应值:
# 基本设置
anonymous_enable=NO # 禁用匿名登录
local_enable=YES # 允许本地用户登录
write_enable=YES # 启用写入权限
local_umask=022 # 设置文件创建掩码
dirmessage_enable=YES # 启用目录消息
use_localtime=YES # 使用本地时间
xferlog_enable=YES # 启用传输日志
connect_from_port_20=YES # 启用端口 20 用于数据传输
# 增强安全性
chroot_local_user=YES # 限制用户在其主目录内
allow_writeable_chroot=YES # 允许可写的 chroot 目录
pasv_enable=YES # 启用被动模式
pasv_min_port=40000 # 被动模式最小端口
pasv_max_port=40500 # 被动模式最大端口
ssl_enable=YES # 启用 SSL/TLS
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
重启vsftpd 服务
sudo systemctl restart vsftpd
3.创建ftp用户
sudo adduser --force-badname aovx_l76k
接下来会让你输入密码,你可以填写自己的密码,如:3ycb1k5h
sudo chown -R aovx_l76k:aovx_l76k /home/aovx_l76k
sudo chmod -R 755 /home/aovx_l76k
重启 vsftpd 服务
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd # 设置开机自启
4.安装 FTP 客户端工具lftp
sudo apt-get install lftp
5.编写 FTP 自动下载脚本
创建一个 Shell 脚本(例如ftp_sync.sh),用于连接远程 FTP 服务器并将文件下载到本地目录。
sudo vim /usr/local/bin/sync_ftp.sh
内容如下:
#!/bin/bash
# 远程FTP信息
REMOTE_FTP="ftp://agnss.queclocator.com"
USERNAME="L76K_yunxi"
PASSWORD="3yCB1K5h"
# 本地目录(确保目录已存在,不存在则创建)
LOCAL_DIR="/home/aovx_l76k"
mkdir -p $LOCAL_DIR
# 使用lftp连接FTP服务器,递归下载所有文件(覆盖本地旧文件)
lftp -u $USERNAME,$PASSWORD $REMOTE_FTP << EOF
mirror --delete --verbose / $LOCAL_DIR
exit
EOF
# 记录日志(可选,便于排查问题)
echo "[$(date "+%Y-%m-%d %H:%M:%S")] FTP同步完成" >> /var/log/ftp_sync.log
设置脚本权限
chmod +x /usr/local/bin/sync_ftp.sh
6.配置定时任务(crontab)
使用crontab设置每 1 小时执行一次脚本,步骤如下:
打开定时任务编辑界面:
crontab -e
在文件末尾添加以下内容(表示每小时的第 0 分钟执行脚本):
0 * * * * /usr/local/bin/sync_ftp.sh
保存并退出(若使用 nano 编辑器,按Ctrl+O保存,Ctrl+X退出)。
7.排查与验证
- 手动执行脚本测试是否正常运行:/usr/local/bin/sync_ftp.sh,检查本地目录是否成功下载文件。
- 查看日志确认定时任务执行情况:cat /var/log/ftp_sync.log(若脚本中配置了日志)。
- 若下载失败,可检查 FTP 地址、账号密码是否正确,或远程 FTP 服务器是否允许匿名 / 指定账号访问。
- 获取详细错误信息
sudo /usr/sbin/vsftpd /etc/vsftpd.conf
- 示例错误及解决(根据实际输出调整):
若提示 500 OOPS: bad bool value in config file for: allow_writeable_chroot
原因:allow_writeable_chroot 后的值不是 YES 或 NO(如拼写错误 YSE)。
解决:确保配置为 allow_writeable_chroot=YES(大小写敏感,必须全大写)。 - 若提示 500 OOPS: cannot locate user specified in ‘chroot_list_file’
原因:启用了 chroot_list_enable=YES 但未创建 /etc/vsftpd.chroot_list 文件。
解决:要么注释掉 chroot_list_enable=YES,要么创建空文件:sudo touch /etc/vsftpd.chroot_list。 - 若提示 500 OOPS: invalid pasv_min_port value
原因:被动模式端口范围设置无效(如 pasv_min_port 大于 pasv_max_port)。
解决:确保 pasv_min_port=40000 且 pasv_max_port=40100(小值在前,大值在后)。 - 若提示 500 OOPS: secure_chroot_dir not owned by root
原因:/var/run/vsftpd/empty 目录的所有者不是 root。
解决:sudo chown root:root /var/run/vsftpd/empty。
作者:admin 创建时间:2025-08-12 19:39
最后编辑:admin 更新时间:2025-08-12 21:02
最后编辑:admin 更新时间:2025-08-12 21:02