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网页样式【待解决】


更新中......


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容