PAYATHON 2026

ProFTPD 的 .ftpaccess 规则未生效,如何对指定用户隐藏文件?

数据小陈

应删除两段 <Files> 配置,使用 HideFiles 按文件名和登录用户设置隐藏规则。如果还要禁止通过已知文件名下载,可配合使用 IgnoreHidden on。ProFTPD 的标准配置不支持这里使用的 Apache 风格 <Files> 容器,调整它与 <Limit> 的嵌套顺序也无法解决问题。

为什么原配置没有达到预期

.ftpaccess 的用途类似 Apache 的 .htaccess,但两者支持的指令不同。ProFTPD 将 .ftpaccess 中的规则视为所在目录的配置,只允许使用该上下文支持的指令,不能直接套用 Apache 的文件匹配写法。参见 ProFTPD 的 .ftpaccess 说明 和 核心指令文档。

原配置还涉及两个用户:

  • 第一段 DenyUser temp_user 限制 temp_user 的上传、删除、重命名等操作,与 myuser 的文件可见性无关。
  • 后两段试图通过 <Files "denied.txt"> 限定文件,再拒绝 myuser 执行相关命令,但这个文件匹配容器不适用于这里的 ProFTPD 配置。

LIST、NLST 用于列出目录内容,RETR 用于下载。文件没有出现在列表中,并不代表用户知道文件名后无法下载。

如何修改 .ftpaccess

将下面的配置放到 denied.txt 所在目录的 .ftpaccess 中,替换原来的两段 <Files> 规则:

HideFiles ^denied[.]txt$ user myuser

<Limit DIRS READ>
  IgnoreHidden on
</Limit>

配置中的各项含义如下:

  • ^denied[.]txt$ 精确匹配文件名 denied.txt,其中 [.] 表示字面量句点。
  • user myuser 将隐藏规则限定为登录用户 myuser。
  • IgnoreHidden on 使匹配的隐藏对象在指定命令范围内被当作不存在处理。
  • DIRS READ 是命令组,覆盖目录相关操作和读取操作,范围比原来的 LIST NLST RETR 更广。

HideFiles 的用户限定参数可以在 ProFTPD 核心模块源码 的 set_hidefiles 实现中核对;隐藏文件与 IgnoreHidden 的配合方式见 核心指令文档中的说明和示例。

如果只要求从目录列表中隐藏文件,可以先仅配置:

HideFiles ^denied[.]txt$ user myuser

仅使用 HideFiles 时,在其他权限允许的情况下,用户仍可能直接执行 RETR denied.txt 下载文件。

原来针对 temp_user 的限制可以单独保留:

<Limit STOR STOU APPE DELE RNFR RNTO MKD RMD>
  DenyUser temp_user
</Limit>

这段规则适用于当前目录及适用的下级目录中的相应操作,范围不限于 denied.txt。

修改后仍不生效,应检查什么

  1. 确认服务器允许读取 .ftpaccess:检查实际生效的主配置及对应虚拟主机中是否存在 AllowOverride off。需要启用时,在允许该指令的主配置上下文中设置 AllowOverride on,不能依靠被禁用的 .ftpaccess 自行开启。该行为由 AllowOverride 指令 控制。
  2. 确认文件位置和读取权限:.ftpaccess 应位于目标目录或适用的父目录中,并能被服务器读取。若使用了 chroot,应核对 FTP 会话中看到的目录对应哪个实际目录。
  3. 查看实际请求产生的日志:重新登录并访问目标目录,检查是否出现未知指令、参数错误或读取失败。原问题没有提供版本和日志,无法进一步判断运行环境中的失败原因。
  4. 分别测试列表和下载:使用 myuser 刷新目录列表,再直接请求下载 denied.txt;随后换一个不受该隐藏规则限制的用户比较结果。若客户端使用 MLSD,也应检查该命令下的列表结果,避免只验证 LIST。
  5. 检查继承和其他隐藏规则:父目录配置及其他 .ftpaccess 可能影响最终行为。例如,下级目录中的 HideFiles none 可以清除继承的隐藏设置。

使用时的注意事项

IgnoreHidden on 会作用于同一配置范围内由其他规则标记为隐藏的对象。因此,采用 DIRS READ 前,应确认这些文件也需要受到相应限制。

如果这是一项必须由管理员保证的访问限制,应避免受限用户自行修改或替换 .ftpaccess。可以将规则放入管理员控制的主配置 <Directory> 段,并结合实际文件系统权限管理访问。

备注:内容仅供参考。