如何在 Termux 中使用 pure-ftpd 搭建一个安全的 FTP 服务。

1. 安装 pure-ftpd

在 Termux 中使用 pkg install 命令安装 pure-ftpd

pkg install pure-ftpd

2. 创建 FTP 用户并设置密码

使用 pure-pw 命令创建一个新的 FTP 用户。以下是命令的含义:

pure-pw useradd tianya -u 1001 -g 1001 -d /sdcard/Download
  • pure-pw useradd tianya:添加用户名为 tianya 的 FTP 用户。
  • -u 1001 -g 1001:指定此用户的 UID 和 GID。通常,Termux 中默认用户的 UID 和 GID 是 1001
  • -d /sdcard/Download:设置该用户的主目录为 /sdcard/Download,即该用户登录 FTP 后只能访问这个目录。

执行后系统会提示输入密码。输入你希望为 djd1226 用户设置的 FTP 密码,并确认密码。

3. 生成 pure-ftpd 用户数据库

每次添加或更新用户后,都需要使用以下命令更新数据库:

pure-pw mkdb

该命令会生成一个 pureftpd.pdb 文件(即 pure-ftpd 用户数据库文件),存放在 $PREFIX/etc 目录中,这样 pure-ftpd 才能识别你创建的用户。

4. 启动 pure-ftpd 服务

最后,使用以下命令启动 pure-ftpd 服务:

pure-ftpd -B -E -l puredb:$PREFIX/etc/pureftpd.pdb -S 0.0.0.0,2121

以下是各个参数的含义:

  • -B:在后台运行 pure-ftpd,这样它不会占用终端。
  • -E:禁止匿名用户登录。
  • -l puredb:$PREFIX/etc/pureftpd.pdb:指定使用 pure-ftpd 的用户数据库文件(即我们在前面生成的 pureftpd.pdb)。
  • -S 127.0.0.1,2121:指定服务监听的 IP 地址和端口,这里是 127.0.0.1:2121,即仅允许本地连接。你可以更改为 0.0.0.0,2121 以允许局域网内其他设备访问。

测试 FTP 连接

在同一台设备上使用 127.0.0.1:2121 进行测试,或者在局域网中使用 Termux 设备的 IP 地址连接。

例如,在 FTP 客户端中连接:

  • 服务器地址ip:2121(或使用局域网 IP)
  • 用户名tianya
  • 密码:你在创建用户时设置的密码

1. 服务启动配置 (run 脚本)

这是解决“服务自动崩溃”的关键。使用 termux-services 时,脚本必须在前台运行(不能-B)。

  • 脚本位置$PREFIX/var/service/pureftpd/run
  • 编辑命令nano $PREFIX/var/service/pureftpd/run
  • 正确内容
#!/data/data/com.termux/files/usr/bin/sh
# 注意:
# 1. 必须用 exec
# 2. 绝对不能加 -B 参数
# 3. 端口建议使用 2121 (大于1024)
exec pure-ftpd -E -l puredb:$PREFIX/etc/pureftpd.pdb -S 2121

2. 服务控制命令

日常开启、停止或重启 FTP 服务的命令。

  • 查看状态sv status pureftpd

  • 正常状态应显示 run: ... 且时间在持续增加。

  • 启动服务sv up pureftpd

  • 停止服务sv down pureftpd

  • 重启服务sv restart pureftpd (修改配置后必须执行)


3. 用户管理 (虚拟用户模式)

这是你目前使用的模式,配置保存在数据库中,修改后必须更新数据库

当前你的 UID: 10083 (用于解决文件读写权限问题)

A. 常用操作

操作命令示例备注
列出所有用户pure-pw list查看有哪些账号
查看用户详情pure-pw show djd1226查看特定用户的路径、UID等
更新数据库pure-pw mkdb每次修改用户后必做!
修改密码pure-pw passwd djd1226修改后记得 mkdb

B. 添加/修改用户 (Copy & Paste)

  • 添加新用户 (指定你的 UID 10083):
pure-pw useradd 新用户名 -u 10083 -d /storage/你的路径/
pure-pw mkdb
  • 修改现有用户路径 (比如修改 djd1226):
pure-pw usermod djd1226 -d /storage/新的路径/
pure-pw mkdb
  • 修复现有用户权限 (如果无法上传文件):
pure-pw usermod djd1226 -u 10083 -g 10083
pure-pw mkdb

4. 常见问题排查 checklist

  1. 连不上?
  • 检查手机是否连在同一 WiFi。
  • 检查端口是否是 2121 (默认 FTP 是 21,Termux 通常用 2121)。
  • 检查是否开启了被动模式 (Passive Mode),有时需要在客户端设置。
  1. 上传报错 (Permission Denied)?
  • 检查该用户的 UID 是否为 10083 (pure-pw show 用户名)。
  • 检查目录是否存在 (ls -ld /storage/你的路径/)。
  1. 服务一直 Down?
  • 检查是否有残留进程占用端口:pkill -9 pure-ftpd,然后 sv restart pureftpd