ProFTPD配置咨询:仅允许对新文件启用STOR追加及REST+STOR续传功能的实现方案
ProFTPD配置咨询:仅允许对新文件启用STOR追加及REST+STOR续传功能的实现方案
嗨,我来帮你解决这个ProFTPD的配置需求~
首先得明确:ProFTPD自带的AllowStoreRestart选项是全局开关,没法直接按文件年龄来区分是否允许续传。不过我们可以通过自定义脚本结合ProFTPD的模块来实现这个精准控制,比你提到的日志监控脚本要更高效、实时。
推荐方案:用mod_exec模块事前检查文件年龄
ProFTPD的mod_exec模块允许我们在执行特定FTP命令前调用外部脚本,刚好可以用来在用户发起STOR(包括续传场景的REST+STOR)前检查目标文件的新旧程度:
- 第一步:启用mod_exec模块
在你的proftpd.conf配置文件中添加以下内容,确保模块被加载:
LoadModule mod_exec.c
- 第二步:编写文件年龄检查脚本
创建一个bash脚本(比如/usr/local/bin/check_ftp_file_age.sh),逻辑是判断目标文件的修改时间是否超过你设定的阈值(比如24小时),如果是旧文件就阻止续传:
#!/bin/bash # 目标文件路径,ProFTPD会通过%f参数传递过来 TARGET_FILE="$1" # 允许续传的文件最大年龄(单位:秒,这里设为24小时=86400秒) MAX_ALLOWED_AGE=86400 # 如果文件存在,检查它的修改时间 if [ -f "$TARGET_FILE" ]; then # 计算文件的年龄(当前时间戳 - 文件修改时间戳) FILE_TIMESTAMP=$(stat -c %Y "$TARGET_FILE") CURRENT_TIMESTAMP=$(date +%s) FILE_AGE=$((CURRENT_TIMESTAMP - FILE_TIMESTAMP)) # 如果文件超过设定年龄,返回FTP错误码阻止操作 if [ "$FILE_AGE" -gt "$MAX_ALLOWED_AGE" ]; then echo "550 Restart/append not allowed for files older than 24 hours" >&2 exit 1 fi fi # 文件是新文件(不存在或未超期),允许操作 exit 0
给脚本添加执行权限:
chmod +x /usr/local/bin/check_ftp_file_age.sh
- 第三步:配置ProFTPD调用脚本
在proftpd.conf中添加配置,让ProFTPD在执行STOR命令前调用这个脚本:
# 在STOR命令执行前触发脚本检查 ExecBeforeCommand STOR /usr/local/bin/check_ftp_file_age.sh %f
关于你提到的日志监控脚本方案
这个方案确实可行,但属于事后补救——用户已经完成续传后才去修改/删除文件,不仅有延迟,还可能浪费服务器资源。相比之下,上面的mod_exec方案是事前拦截,能直接阻止不符合条件的续传操作,体验和效率都更好。
最后验证
配置完成后重启ProFTPD服务,测试两种场景:
- 上传新文件中断后尝试续传:应该可以正常进行
- 对超过24小时的旧文件尝试续传:会收到550错误提示,操作被阻止
备注:内容来源于stack exchange,提问作者Znik
相关产品推荐
相关产品推荐

