1. vsftpd のインストール
sudo apt update
sudo apt install -y vsftpd
- vsftpd(Very Secure FTP Daemon)をインストール
- バージョン例:3.0.5
設定ファイルのバックアップ
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
- オリジナル設定を /etc/vsftpd.conf.orig として残す
/etc/vsftpd.conf の基本設定
# 匿名ログインの無効化
anonymous_enable=NO
# ローカルユーザーのログイン許可
local_enable=YES
# ファイル書き込み許可
write_enable=YES
# ユーザーをホームディレクトリ以下に拘束
chroot_local_user=YES
allow_writeable_chroot=YES # Ubuntu 22.04 以降で必要
# 新規ファイルのパーミッション
local_umask=022
# 転送ログの出力
xferlog_enable=YES
log_ftp_protocol=YES
# パッシブモードの設定
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40010
# 外部公開IPを固定したい場合
# pasv_address=YOUR.SERVER.IP
allow_writeable_chroot=YES は、ホーム直下が書き込み可能な chroot 環境に必要
必要に応じて pasv_address を設定
FTP 用ローカルユーザーの作成
# (任意) FTP専用グループ作成
sudo groupadd ftpusers
# シェルを /usr/sbin/nologin にしてユーザー作成
sudo useradd -m -s /usr/sbin/nologin -G ftpusers ftpuser
# パスワード設定
sudo passwd ftpuser
- /usr/sbin/nologin でシェルログイン不可に(後述の設定変更が必要)
- グループ ftpusers を作成し、管理しやすく
/etc/shells の調整
vsftpd は PAM 認証時に /etc/shells にあるシェルのみ許可します。
シェルを /usr/sbin/nologin のまま使う場合、以下を追記してください。
# /etc/shells に追記(なければ)
grep -Fxq "/usr/sbin/nologin" /etc/shells \
|| echo "/usr/sbin/nologin" | sudo tee -a /etc/shells
- ファイル末尾に /usr/sbin/nologin が追加される
- あるいは、ftpuser のシェルを /bin/bash//bin/false に変更しても可
FTP ディレクトリ&パーミッション設定
# FTPルートディレクトリを作成
sudo mkdir -p /home/ftpuser/ftp/upload
# 所有権を ftpuser:ftpusers に変更
sudo chown -R ftpuser:ftpusers /home/ftpuser/ftp
# ディレクトリ権限設定
sudo chmod 755 /home/ftpuser/ftp
sudo chmod 755 /home/ftpuser/ftp/upload
- upload 以下だけ書き込み可能に(必要なら 755→775 など調整)
ファイアウォール設定
UFW を利用する場合
sudo apt install -y ufw
sudo ufw enable
sudo ufw allow 21/tcp
sudo ufw allow 40000:40010/tcp
sudo ufw reload
iptables-persistent を利用する場合
sudo apt install -y iptables-persistent
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A INPUT -p tcp --match multiport --dports 40000:40010 -j ACCEPT
sudo netfilter-persistent save
vsftpd サービスの再起動
sudo systemctl restart vsftpd
sudo systemctl status vsftpd
- 設定変更後は必ず再起動して反映を確認
CLI での接続テスト
FTP クライアントのインストール
sudo apt install -y inetutils-ftp
- 接続とログイン
ftp localhost
# Name: ftpuser
# Password: (設定したパスワード)
WSL2 環境での GUI 接続(WinSCP)
WSL2 の IP 確認
hostname -I | awk '{print $1}'
WinSCP や FileZilla で接続
-ホスト名:WSL2 の IP(例 172.19.6.250)
-ポート :21
-プロトコル:FTP
-ユーザー名/パスワード:ftpuser / ****