Dockerfile构建vsftpd服务

10 篇文章 0 订阅
3 篇文章 0 订阅

Dockerfile构建vsftpd服务

  1. mkdir /dece && cd /dece创建文件夹并进入
  2. vim Dockerfile编辑dockerfile
  3. 复制下面代码到Dockerfile中
    # 使用docker官方的基础镜像
    FROM docker.io/centos:latest
    
    # 维护者信息
    MAINTAINER decezz decezz@qq.com
    
    # 设置环境变量
    ENV FTP_USER admin
    ENV FTP_PASS **Random**
    ENV FTP_GROUP www
    ENV PASV_MIN_PORT 10030
    ENV PASV_MAX_PORT 10060
    ENV LOCAL_UMASK 077
    
    # 镜像的操作指令
    RUN yum -y install vsftpd* && \
        yum -y install pam libdb-utils libdb --skip-broken && \
        # 配置vsftpd pam认证
        mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak && \
        echo 'auth    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_users' > /etc/pam.d/vsftpd && \
        sed -i '$a account required        pam_userdb.so   db=/etc/vsftpd/vsftpd_users' /etc/pam.d/vsftpd && \
        mkdir -p /etc/vsftpd/vsftpd_user_conf && \
        # 将用户限制在家目录
        echo 'chroot_local_user=YES' >> /etc/vsftpd/vsftpd.conf && \
        echo 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf && \
        # POST模式端口调整
        sed -ri 's/connect_from_port_20=YES/connect_from_port_20=NO/g' /etc/vsftpd/vsftpd.conf && \
        echo -e "port_enable=YES" >> /etc/vsftpd/vsftpd.conf && \
        echo -e "ftp_data_port=10020" >> /etc/vsftpd/vsftpd.conf && \
        # 关闭匿名访问
        sed -ri 's/anonymous_enable=YES/anonymous_enable=NO/g' /etc/vsftpd/vsftpd.conf && \
        sed -ri "s/local_umask=022/local_umask=$LOCAL_UMASK/g" /etc/vsftpd/vsftpd.conf
    # 添加脚本
    ADD run.sh /usr/local/vsftpd/run.sh
    # 修改权限
    RUN chmod -R 755 /usr/local/vsftpd/run.sh
    
    # 容器暴露的端口号
    EXPOSE 10020
    EXPOSE 21
    EXPOSE $PASV_MIN_PORT-$PASV_MAX_PORT
    
    # 容器启动时执行命令
    CMD ["/usr/local/vsftpd/run.sh"]
    
  4. vim run.sh编辑run.sh
    #!/bin/bash
    
    if [ "$FTP_PASS" = "**Random**" ]; then
        export FTP_PASS=`cat /dev/urandom | tr -dc A-Z-a-z-0-9 | head -c${1:-16}`
    fi
    
    # add home group
    groupadd $FTP_GROUP
    # add nologin user
    useradd -u 1000 -d /home/vsftpd -g $FTP_GROUP -s /sbin/nologin $FTP_GROUP
    # build home
    mkdir -p /home/vsftpd/$FTP_GROUP
    # change auth
    chown -R $FTP_GROUP:$FTP_GROUP /home/vsftpd/
    
    # build virtual user
    echo -e "$FTP_USER" > /etc/vsftpd/vsftpd_users.txt
    echo -e "$FTP_PASS" >> /etc/vsftpd/vsftpd_users.txt
    
    # create text db
    /usr/bin/db_load -T -t hash -f /etc/vsftpd/vsftpd_users.txt /etc/vsftpd/vsftpd_users.db
    
    # add user conf info
    echo -e "local_root=/home/vsftpd/$FTP_GROUP" > /etc/vsftpd/vsftpd_user_conf/$FTP_USER
    sed -i '$a write_enable=YES' /etc/vsftpd/vsftpd_user_conf/$FTP_USER
    
    # add vsftpd config
    # start pasv mode
    echo -e "pasv_enable=YES" >> /etc/vsftpd/vsftpd.conf
    echo -e "pasv_min_port=$PASV_MIN_PORT" >> /etc/vsftpd/vsftpd.conf
    echo -e "pasv_max_port=$PASV_MAX_PORT" >> /etc/vsftpd/vsftpd.conf
    # start virtual mode
    echo -e "pam_service_name=vsftpd" >> /etc/vsftpd/vsftpd.conf
    echo -e "guest_enable=YES" >> /etc/vsftpd/vsftpd.conf
    echo -e "guest_username=$FTP_GROUP" >> /etc/vsftpd/vsftpd.conf
    echo -e "user_config_dir=/etc/vsftpd/vsftpd_user_conf" >> /etc/vsftpd/vsftpd.conf
    echo -e "virtual_use_local_privs=YES" >> /etc/vsftpd/vsftpd.conf
    
    cat << EOB
        *************************************************
        *                                               *
        *    Docker image: dece/vsftpd                  *
        *                                               *
        *                                               *
        *************************************************
        SERVER SETTINGS
        ---------------
        · FTP User: $FTP_USER
        · FTP Pass: $FTP_PASS
        · FTP group: $FTP_GROUP
    EOB
    
    # run vsftpd
    &>/dev/null /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
    
    
  5. docker build -t vsftpd:dece .构建docker镜像
  6. 创建vsftpd容器
    docker run -itd --name vsftpd \
        -p 10021:21 \
        -p 10020:10020 \
        -p 10030-10060:10030-10060 \
        -v /home/test:/home/vsftpd/www \
        -e FTP_USER=theftp \
        -e FTP_PASS=theftp123456 \
        -e FTP_GROUP=www \
        vsftpd:dece /bin/bash
    
  7. 如果容器内进程没启动,手动进入启动即可
    /usr/local/vsftpd/run.sh
    
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值