You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ProFTPD配置咨询:仅允许对新文件启用STOR追加及REST+STOR续传功能的实现方案

ProFTPD配置咨询:仅允许对新文件启用STOR追加及REST+STOR续传功能的实现方案

嗨,我来帮你解决这个ProFTPD的配置需求~

首先得明确:ProFTPD自带的AllowStoreRestart选项是全局开关,没法直接按文件年龄来区分是否允许续传。不过我们可以通过自定义脚本结合ProFTPD的模块来实现这个精准控制,比你提到的日志监控脚本要更高效、实时。

推荐方案:用mod_exec模块事前检查文件年龄

ProFTPD的mod_exec模块允许我们在执行特定FTP命令前调用外部脚本,刚好可以用来在用户发起STOR(包括续传场景的REST+STOR)前检查目标文件的新旧程度:

  1. 第一步:启用mod_exec模块
    在你的proftpd.conf配置文件中添加以下内容,确保模块被加载:
LoadModule mod_exec.c
  1. 第二步:编写文件年龄检查脚本
    创建一个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
  1. 第三步:配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:34:52