ショコラ
vsftpd で FTPサーバーを立てるには?
「vsftpdのドッカーファイル(作 もっさん先輩)」でキメマス。
もっさん先輩
手順
- Dockerfile と docker-compose.yml をダウンロードします。
curl -LO https://answorz.com/1973/Dockerfile -LO https://answorz.com/1973/docker-compose.yml
- docker-compose.yml の PUBLICHOST に外部からアクセスできるホスト名を設定します。
sed -i -e "s/PUBLICHOST=127.0.0.1/PUBLICHOST=`hostname -I | cut -d ' ' -f1`/" docker-compose.yml
- vsftpdを起動します。
docker-compose up -d
以上
vsftpd の Dockerfile の説明
## vsftpdコンテナ
FROM ubuntu:20.04
ARG FTP_USER_NAME=ftpuser
ARG FTP_USER_PASS=pass
ARG FTP_USER_HOME=/home/ftpuser/
ENV PUBLICHOST=127.0.0.1
ENV PASV_MIN_PORT=30000
ENV PASV_MAX_PORT=30099
EXPOSE 20 21
WORKDIR /etc/vsftpd
## パッケージをインストールします。
RUN apt-get update &&\
apt-get install -y --no-install-recommends vsftpd db-util gettext-base
## vsftpd.conf を設定します。
RUN cp /etc/vsftpd.conf /etc/vsftpd.conf.bak &&\
sed -i -e 's/listen=NO/listen=YES/' /etc/vsftpd.conf &&\
sed -i -e 's/listen_ipv6=YES/listen_ipv6=NO/' /etc/vsftpd.conf &&\
{ cat /etc/vsftpd.conf; echo -n '\
pasv_enable=YES\n\
pasv_address=${PUBLICHOST}\n\
pasv_min_port=${PASV_MIN_PORT}\n\
pasv_max_port=${PASV_MAX_PORT}\n\
write_enable=YES\n\
local_umask=022\n\
guest_enable=YES\n\
guest_username=root\n\
virtual_use_local_privs=YES\n\
user_config_dir=/etc/vsftpd/user_config\n\
chroot_local_user=YES\n\
chroot_list_enable=NO\n\
allow_writeable_chroot=YES\n\
'; } > /etc/vsftpd.conf.tmpl
## ディレクトリを作成します。
RUN mkdir -p /var/run/vsftpd/empty /etc/vsftpd/user_config
## pam を設定します。
RUN echo '\
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_users\n\
account required pam_userdb.so db=/etc/vsftpd/vsftpd_users\
' > /etc/pam.d/vsftpd
## ユーザーを作成します。
RUN \
echo "${FTP_USER_NAME}\n${FTP_USER_PASS}" >> vsftpd_users.txt &&\
echo "local_root=${FTP_USER_HOME}" > /etc/vsftpd/user_config/ftpuser &&\
mkdir -m a=+rw ${FTP_USER_HOME}
## パスワードを生成します。
RUN db_load -T -t hash -f vsftpd_users.txt vsftpd_users.db &&\
chmod 600 vsftpd_users.db
CMD envsubst '$$PUBLICHOST $$PASV_MIN_PORT $$PASV_MAX_PORT'\
< /etc/vsftpd.conf.tmpl\
> /etc/vsftpd.conf && vsftpd; tail -f /dev/null
vsftpd の docker-compose.yml の説明
version: '3'
services:
ftp:
build: .
environment:
- PUBLICHOST=127.0.0.1
- PASV_MIN_PORT=30000
- PASV_MAX_PORT=30099
volumes:
- /home/ftpuser/:/home/ftpuser/
ports:
- "20-21:20-21"
- "30000-30099:30000-30099"
PUBLICHOST には外部からアクセスできるホスト名を設定します。