公有云 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