Docker | 搭建一个ftp服务器

Docker | 搭建一个ftp服务器

 


目录


前期准备

名称 地址 说明
阿里云服务器 阿里云翼计划 系统镜像选择Ubuntu1604 server版
Xshell+Xftp Xshell和Xftp免费试用 分别用于ssh、ftp连接服务器

安装docker

  • 更新软件源
    apt update
  • 更新软件
    apt upgrade -y
  • 使用官方安装脚本自动安装最新版docker客户端docker-ce
    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • 查看docker-ce版本
    docker --version


配置docker镜像加速器

  • 创建docker文件夹
    mkdir -p /etc/docker

说明:

  • 一般安装docker后会默认存在
  • 创建daemon.json

tee /etc/docker/daemon.json <<-'EOF'

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

EOF

提示:

  • 加速地址可以更换为下面的
国内 镜像源地址
官方中国区 https://registry.docker-cn.com
网易 http://hub-mirror.c.163.com
USTC https://docker.mirrors.ustc.edu.cn
阿里云  
DaoCloud https://www.daocloud.io/mirror

  • 重新载入加速器
    systemctl daemon-reload
  • 重启docker
    systemctl restart docker

安装vsftpd

参阅:

  • 搜索vsftpd镜像
    docker search vsftpd

  • pull最新版镜像到本地
    docker pull fauria/vsftpd

  • 运行docker镜像并创建对应的Container
    包含用户名和密码
    docker run -d -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -v /Ftpfile:/home/vsftpd -e FTP_USER=user -e FTP_PASS=userpwd -e PASV_ADDRESS=<宿主机ip> -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
    不包含用户名和密码
    docker run -d -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -v /Ftpfile:/home/vsftpd -e PASV_ADDRESS=<宿主机ip> -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd

提示:

  • PASV_ADDRESS需改为自己的宿主机ip
  • -p 进行端口绑定映射
  • -v 进行文件目录的映射
  • FTP_UESR 和FTP_PASS如果设定了会在container的
    /etc/vsftpd/virtual_users.txt里面
  • PASV_ADDRESS指的的宿主机地址
  • PASV_MIN_PORT和PASV_MAX_PORT映射的是被动模式下端口使用范围
  • 必须在服务器的防火墙中开启20、21、22和21100/21110端口
  • 进入vsftpd镜像对应的container中
    docker exec -i -t vsftpd bash
  • 编辑配置文件写入用户名和密码
    vi /etc/vsftpd/virtual_users.txt

提示:

  • 注意使用vi编辑指令,其中奇数行为用户名,临近的下一个偶数行为密码,创建container时参数未加入用户名和密码,系统会默认创建admin和随机密码.
  • 添加新用户的文件夹,以用户名命名
    mkdir -p /home/vsftpd/<新用户名>

  • hash处理登录的验证信息并写入数据库
    /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

  • 退出container
    exitCtrl+D

  • 重启container
    docker restart vsftpd

  • 验证ftp
    ftp://<宿主机ip>

提示:

  • 一般新搭建的ftp里面的内容为空,出现上图结果即搭建成功

Docker常用命令

命令 作用
docker search <镜像名> 搜索在线可用镜像名
docker pull <镜像名:tag> 从官网拉取镜像
docker images -a 查询所有的镜像,默认是最近创建的排在最上
docker ps 查看正在运行的容器
docker ps -a 查看所有容器
docker rmi -f <镜像ID> 删除单个镜像
docker start <容器名or ID> 启动某个容器
docker stop <容器名or ID> 停止某个容器
docker kill <容器名or ID> 杀掉某个容器
docker logs {容器ID或容器名称} 查询某个容器的所有操作记录。
docker commit <容器ID> <镜像名称> 制作镜像 使用以下命令,根据某个“容器 ID”来创建一个新的“镜像”
docker run -d -p 58080:8080 --name javaweb wsl/javaweb:0.1 /root/run.sh 启动一个容器,其中-d:表示以“守护模式”执行/root/run.sh脚本; -p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。 -name:为容器命名
service docker start 启动docker服务的命令

参阅:


FTP管理

1. CMD访问FTP

  • 调用ftp
    ftp

  • 访问ftp服务器(其中需要输入用户名和密码)
    open <宿主机ip>

  • 查看远程根目录下文件情况,默认为空
    ls

     

  • 上传D盘test文件下的文件到ftp服务器(put或mput指令)
    lcd D:\test
    put a.txt

  • 再次查看
    lsdir

  • 下载ftp服务器的文件到D盘test文件下(get或mget指令)

单次下载
lcd D:\test
get test.zip

提示:

  • get <文件名1> <文件名2>等价于下载文件1并重命名为文件名2

批量下载
lcd D:\test
mget a.txt test.zip

提示:

  • 默认情况下,prompt是打开的;在传输多个文件期间,ftp 的提示将允许您选择性地检索或存储文件;如果 prompt 是关闭的,则 mget 和 mput 将传输所有文件
  • prompt关闭/开启prompt,一般选择关闭
  • cmd的ftp命令行

help

 

部分命令

参阅:


2. Ubuntu访问FTP

  • 与第一种CMD访问是基本一样的.

Q&A

第一种情况

Q:ls/dir无法使用

A:passive


3. FTP客户端访问FTP

  • Filezilla
  • Xftp
  • Winscp
  • .......

优化FTP

注意:

  • 修改完后重启vsftpd服务
  • docker restart vsftpd

1. 支持中文字符集

  • 进入docker的vsftpd容器
    docker exec -i -t vsftpd bash
    vi /etc/profile
export LANG=en_US.utf8

source /etc/profile

参阅:

2. 允许 FTP 匿名登陆

vi /etc/vsftpd/vsftpd.conf

3. 设置欢迎词,最大连接数

vi /etc/vsftpd/vsftpd.conf

##  欢迎词
ftpd_banner=welcome to here!  
##  最大同时访问用户数
Max_clients=50     

4. 添加用户到黑名单中

vi /etc/vsftpd/ftpusers

<userName>

默认

5. 只允许user_list的用户登录

第一种
vi /etc/vsftpd/vsftpd.conf

userlist_deny=NO

vi /etc/vsftpd/user_list

<userName>

第二种
vi /etc/vsftpd/vsftpd.conf

userlist_deny=NO
userlist_file=/etc/ftpuser/user_list

vi /etc/ftpuser/user_list

<userName>

默认

6. 限速

vi /etc/vsftpd/vsftpd.conf

##  注册的用户下载速度 200k 
Local_max_rate=200000 
##  匿名用户下载速度20K
Anon_max_rate=20000 

7. 因人限速

vi /etc/vsftpd/vsftpd.conf

##  用户的配置文件
User_config_dir=/etc/vsftpd

vi /etc/vsftpd/user1

 Local_max_rate = 3000

vi /etc/vsftpd/user2

Local_max_rate = 30000

提示:

  • user1和user2需要添加到virtual_users.txt并存储到数据库中
  • vi /etc/vsftpd/virtual_users.txt
  • /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

8. 建立虚拟的用户可以登陆 FTP ,但不能登陆我的 linux 系统【待认证】

  • 建立虚拟用户
    vi /etc/vsftpd/virtual_users.txt
  • 生产vsftpd 的认证数据库
    /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
  • 改数据库权限
    chmod 600 /etc/vsftpd/virtual_users.db
  • 虚拟用户及所要访问的目录并设置相应的权限
  •  

vi /etc/vsftpd/vsftpd.conf
guest_enable=YES
anon_world_readable_only=NO

9. 虚拟用户管理

user1 有浏览目录、上传、改名、删除等权限
user2 有浏览目录、上传权限
user3 有浏览目录、下载的权限(且只能在 /misc/abc 目录下,速度为 20k )

  • 编辑 vsftpd 的主配置文件
    vi /etc/vsftpd/vsftpd.conf
User_config_dir=/etc/vsftpd

user1
vi /etc/vsftpd/user1

// 开放读的权限(如果没有添加此项,用户看到的目录是隐藏的)      
Anon_world_readable_only=NO
Anon_upload_enable=YES 
Anon_mkdir_write_enable=YES 
Anon_other_write_enable=YES 

user2
vi /etc/vsftpd/user2

// 开放读的权限(如果没有添加此项,用户看到的目录是隐藏的) 
Anon_world_readable_only=NO    
Anon_upload_enable=YES

user3
vi /etc/vsftpd/user3

// 开放读的权限(如果没有添加此项,用户看到的目录是隐藏的) 
Anon_world_readable_only=NO   
// 设置目录为本地
Local_root=/misc/abc
Anon_max_rate=20000 

10. 设置匿名的用户可以上传以及删除的权限

vi /etc/vsftpd/vsftpd.conf

Anon_upload_enable=YES 
Anon_mkdir_write_enable=YES 
Anon_other_write_enable=YES
  • 改变 pub 目录的权限
    chmod - R 777 /var/ftp/pub

参阅:

11. 定义ftp网页样式【待解决】


更新中......

 

原文摘自:https://www.jianshu.com/p/c84f6e6de002

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章