公有雲 docker 搭建 ftp
1,拉取鏡像 :docker pull fauria/vsftpd
2,啟動容器: 參數說明
- /home/ftp:/home/vsftpd:映射 docker 容器 ftp 文件根目錄(冒號前面是宿主機的目錄)
- -p:映射 docker 端口(冒號前面是宿主機的端口)
- -e FTP_USER=test -e FTP_PASS=test :設置默認的用戶名密碼(都為 test)
- PASV_ADDRESS:宿主機 ip,當需要使用被動模式時必須設置
- PASV_MIN_PORT~ PASV_MAX_PORT:給客服端提供下載服務隨機端口號范圍,默認 21100-21110,與前面的 docker 端口映射設置成一樣
- -d 后台運行, 20:20分別為宿主機端口和容器端口,容器端口可重復,宿主機端口不能重復 , -v 掛載目錄,將宿主機的 /home/ftp 掛載到容器中的 /home/vsftpd
- -e 設置環境變量(以下是被動模式) –network 連接容器到一個網絡 , --name 給容器取個名稱,容器重啟策略 --restart=always表示在容器退出時總是重啟容器
docker run -d -v /home/ftp:/home/vsftpd -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -e FTP_USER=test -e FTP_PASS=test -e PASV_ADDRESS=192.168.60.128 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
3,控制台安全組配置開放端口范圍 21100-21110
4,新建用戶文件夾
1)進入到容器里面 docker exec -it vsftpd bash
2)可以看到在 /home/vsftpd/ 文件夾下面有個 test 文件夾,啟動的時候設置用戶名為 test 已經自動創建了對應的 test 用戶文件夾
3)在 test 用戶文件夾下新建一個 1.txt 文件,用來訪問該文件, vi /home/vsftpd/test/1.txt (由於掛載到了宿主機的 /home/ftp 目錄,所以也可以在容器外面的 /home/ftp 目錄下創建文件)
5,使用瀏覽器進行訪問
6,如果不想使用 test 用戶,可以新增一個用戶
1)進入到容器里面: docker exec -it vsftpd bash
2)創建新用戶的文件夾: mkdir /home/vsftpd/payne
3)編輯用戶配置文件: vi /etc/vsftpd/virtual_users.txt 里面已經有了 test test ,添加一個 payne 123456 保存
4)執行以下命令,把登錄的驗證信息寫入數據庫: /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
5)退出重啟 exit docker restart vsftpd
7,使用 FileZilla 連接的話,站點管理器中選擇如下
8, 如果在 test 目錄下新建一個文件夾 sca_2/ ,
chown -R 設置目錄以及其子目錄下的所有文件的獨寫權限,需要超級用戶 root 的權限才能執行此命令。
chown root /home/vsftpd/test 更新 test 所屬者為 root ,更新 test 所屬組為 chgrp newgroup /home/vsftpd/test,
如果在宿主機上使用 root 用戶建的目錄,掛載對應的容器里面的 test 目錄的權限就是 root ,此時使用 test 用戶登錄到 ftp 由於 test 目錄(所屬 root 用戶)的權限限制會無法操作,
需要在 /home/vsftpd/test 目錄下 chmod -R 777 sca_2/ 修改權限,公共獨寫執行權限, test 連接上 ftp 后就能夠操作該目錄
chmod -R 777,第一個7代表文件所屬者的權限,第二個7代表文件所屬者所在組的權限,第三個7代表其它用戶的權限 775 中 5表示讀和執行 4 是讀 2 寫 1 執行
-R 是遞歸遍歷子目錄
9,使用 compose,在 /data/compose/bin/docker-compose.yml 中:
version: '2'
services:
ftp:
image: fauria/vsftpd
container_name: ftpnw
restart: always
networks:
smart-network:
aliases:
- ftpnw
ports:
- 20-21:20-21
- 21100-21200:21100-21200
environment:
TZ: "Asia/Shanghai"
PASV_ENABLE: "YES"
PASV_ADDR_RESOLVE: "YES"
PASV_ADDRESS: 172.26.83.31
PASV_MIN_PORT: "21100"
PASV_MAX_PORT: "21200"
FTP_USER: admin
FTP_PASS: admin
IDLE_SESSION_TIMEOUT: 0
volumes:
- ../ftp/data:/home/vsftpd
- ../ftp/logs:/log/vsftpd
- ../ftp/conf/vsftpd.conf:/etc/vsftpd/vsftpd.conf
networks:
smart-network:
driver: bridge
../ftp/conf/vsftpd.conf 的內容:
# Run in the foreground to keep the container running:
background=NO
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
# Uncomment this to allow local users to log in.
local_enable=YES
## Enable virtual users
guest_enable=YES
## Virtual users will use the same permissions as anonymous
virtual_use_local_privs=YES
# Uncomment this to enable any form of FTP write command.
write_enable=YES
## PAM file name
pam_service_name=vsftpd_virtual
## Home Directory for virtual users
user_sub_token=$USER
local_root=/home/vsftpd/$USER
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES
# Workaround chroot check.
# See https://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/
# and http://serverfault.com/questions/362619/why-is-the-chroot-local-user-of-vsftpd-insecure
allow_writeable_chroot=YES
## Hide ids from user
hide_ids=YES
## Enable logging
xferlog_enable=YES
xferlog_file=/var/log/vsftpd/vsftpd.log
## Enable active mode
port_enable=YES
connect_from_port_20=YES
ftp_data_port=20
##?Disable seccomp filter sanboxing
seccomp_sandbox=NO
pasv_addr_resolve=YES
pasv_enable=YES
pasv_address=172.26.83.31
pasv_max_port=21200
pasv_min_port=21100
idle_session_timeout=0
pasv_enable=YES
xferlog_std_format=NO
reverse_lookup_enable=YES
pasv_promiscuous=NO
pasv_address=172.26.83.31
pasv_max_port=21200
pasv_min_port=21100
pasv_addr_resolve=YES
pasv_enable=YES
file_open_mode=0666
local_umask=077
xferlog_std_format=NO
reverse_lookup_enable=YES
pasv_promiscuous=NO
port_promiscuous=NO