码农的自留地

2021-08-08

FTP服务搭建

前言

在工作中linux自带的ftp服务可能会出于各种原因无法使用,这是就需要安装第三方的ftp服务

开源的fclairamb/ftpserver是一个不错的选择

本文服务器环境为armv8指令集架构,离线环境,Docker版本为V19.03.9

  • 安装与使用足够简单
  • 不依赖宿主机的vsftpd服务
  • github长期保持更新
  • issues没有积压
  • 支持docker
  • 支持sftp

前置条件

ftpserver开源地址 fclairamb/ftpserver

准备数据卷

数据卷根据实际情况调整即可

# 创建ftp根目录
mkdir /ftp
# 进入目录
cd /ftp
# 创建ftp服务配置文件
# 修改配置文件, 具体参考下文的配置文件
touch ftpserver.json
# 创建ftp存储目录
mkdir data

ftp配置文件参考如下

{
   // 配置文件版本
   "version": 1,
   // ftp被动模式随机端口范围
   "passive_transfer_port_range": {
      "start": 2122,
      "end": 2130
   },
   // 可连接用户
   "accesses": [
      {
         "user": "test", // 用户名
         "pass": "test", // 密码
         "fs": "os", // 使用存储方式,os为本地存储, 其他支持类型具体参考开源主页
         "params": { // 存储配置参数
            // 本地存储该用户的根路径
            // 注意: 该配置路径为容器内路径,并非宿主机路径,服务默认配置根路径为/tmp
            // 一般建议每个用户分配单独根路径以作为区分
            "basePath": "/tmp/test" 
         }
      }
     // 需要增加用户如上添加即可
   ]
}

启动容器

docker run --rm -d \ 
# 端口映射需要注意与配置文件一致,既为主动模式端口+被动模式随机端口范围
# 默认配置主动模式2121端口,被动模式范围为2122-2130
# 如果修改需要保持一致,防止被动模式随机端口未对外映射导致的链接失败
-p 2121-2130:2121-2130 
# ftp目录映射
-v /ftp/data:/tmp \
# ftp配置文件映射
-v /ftp/ftpserver.json:/app/ftpserver.json \
--name=ftpserver
fclairamb/ftpserver

验证

在任意一个可访问服务环境进行如下测试

# 创建文件
echo ftpuploadtest > ftpupload.txt
# 上传
curl -v -T ftpupload.txt ftp://test:test@ip:2121
# 下载
curl ftp://test:test@ip:2121/ftptest.txt -o ftpdownload.txt
# 对比
diff ftpupload.txt ftpdownload.txt