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

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