Dockerfile构建vsftpd服务

Dockerfile构建vsftpd服务

  1. mkdir /dece && cd /dece创建文件夹并进入
  2. vim Dockerfile编辑dockerfile
  3. 复制下面代码到Dockerfile中
    # 使用docker官方的基础镜像
    FROM docker.io/centos:latest
    
    # 维护者信息
    MAINTAINER decezz [email protected]
    
    # 设置环境变量
    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 && \
        # 关闭匿名访问
        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 20
    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:20 \
        -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
    

猜你喜欢

转载自blog.csdn.net/qq_39309714/article/details/86624740