zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    大厂的面试官是如何挑人的?
    搞懂这7个Maven问题,带你吊打面试官!
    Spring Cloud Eureka 注册安全一定要做到位!
    09 webpack的介绍
    08 node.js 的使用
    07 Node.js安装及环境配置
    06-Nodejs介绍
    05-面向对象
    Mysql 的使用方法
    04-对象的单体模式
  • 原文地址:https://www.cnblogs.com/moxiaodan/p/13796575.html
Copyright © 2011-2022 走看看