vsftpd で FTPサーバーを立てるには?

ショコラ
ショコラ

vsftpd で FTPサーバーを立てるには?

「vsftpdのドッカーファイル(作 もっさん先輩)」でキメマス。

もっさん先輩
もっさん先輩

手順

  1. Dockerfile と docker-compose.yml をダウンロードします。
curl -LO https://answorz.com/1973/Dockerfile -LO https://answorz.com/1973/docker-compose.yml
  1. docker-compose.yml の PUBLICHOST に外部からアクセスできるホスト名を設定します。
sed -i -e "s/PUBLICHOST=127.0.0.1/PUBLICHOST=`hostname -I | cut -d ' ' -f1`/" docker-compose.yml
  1. 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 には外部からアクセスできるホスト名を設定します。

Scroll to Top