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

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/moxiaodan/p/13796575.html
Copyright © 2011-2022 走看看