Dockerfile构建vsftpd服务
编程语言
2019-01-24 21:23:33
阅读次数: 0
Dockerfile构建vsftpd服务
mkdir /dece && cd /dece
创建文件夹并进入
vim Dockerfile
编辑dockerfile
- 复制下面代码到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"]
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
docker build -t vsftpd:dece .
构建docker镜像
- 创建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
- 如果容器内进程没启动,手动进入启动即可
/usr/local/vsftpd/run.sh
转载自blog.csdn.net/qq_39309714/article/details/86624740