linux下使用docker安装ftp

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

 

posted @ 2020-10-11 10:59  陌小但  阅读(1129)  评论(0编辑  收藏  举报