FTPサーバー構築(vsftpd)
このページでは、vsftpd を使ってユーザーごとにアクセス先を分離した安全な FTP サーバーを構築し、 WinSCP を使って接続確認する手順をまとめています。Web サーバー(Apache)と組み合わせることで、 複数ユーザーが安全に Web コンテンツを管理できる環境を整えることができます。
最終更新:
【更新情報】2026年02月08日:ファイアウォール設定(PASV ポート開放)と WinSCP トラブルシューティングを追記しました。
目次
- 1. vsftpd のインストール
- 2. vsftpd の設定
- 2.5 ファイアウォール設定(重要)
- 3. PAM の設定確認
- 4. vsftpd の再起動
- 5. ftpuser(Webルート用ユーザー)の作成
- 6. /var/www/html の所有権変更
- 7. WinSCP から接続
- 7.1 WinSCP が固まる場合の原因と対処
- 7.2 Windows 側でポート確認(Test‑NetConnection)
- 7.3 ufw の誤設定を削除する方法
- 8. 180 フォルダの作成
- 9. ftp180 ユーザーの作成
- 10. 180 フォルダの所有権変更
- 11. vsftpd の再起動
- 12. ftp180 で接続
- 13. 最終構成まとめ
- 14. まとめ
1. vsftpd のインストール
sudo apt updatesudo apt install -y vsftpd
2. vsftpd の設定
設定ファイルを開きます。
sudo nano /etc/vsftpd.conf
以下の設定がすべて YES になっていることを確認します。
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES allow_writeable_chroot=YES pasv_enable=YES pasv_min_port=40000 pasv_max_port=40010
保存して終了(Ctrl+X → Y → Enter)
2.5 ファイアウォール設定(重要)
vsftpd は FTP の制御ポート(21番)に加えて、 PASV(パッシブ)モード用のポート 40000〜40010 を使用します。
Linux Mint で ufw が有効な場合、これらのポートを開放しないと
WinSCP が「接続中のまま」固まるため、必ず設定してください。
① ufw の状態確認
sudo ufw status numbered
② FTP 用ポートを開放
sudo ufw allow 21/tcp
sudo ufw allow 40000:40010/tcp
③ ufw を有効化(未使用の場合)
sudo ufw enable
④ 設定の再確認
sudo ufw status numbered
これで WinSCP が固まる問題の 8 割は防げます。
3. PAM の設定確認
nologin ユーザーを許可するため、次の行があればコメントアウトします。
sudo nano /etc/pam.d/vsftpd
#auth required pam_shells.so
FTP 専用ユーザーは /usr/sbin/nologin を使用するため、
Linux へのシェルログインは禁止されています。しかし、PAM の設定で
pam_shells.so が有効になっていると、nologin ユーザーは
FTP でもログインが拒否されてしまいます。
| 仕組み | 役割 | FTP との関係 | なぜ必要? |
|---|---|---|---|
| nologin | シェルログインを禁止 | FTP ではログインさせたい | Linux に直接ログインさせない安全対策 |
| pam_shells.so | 許可されたシェル以外を拒否 | nologin は拒否される | FTP 専用ユーザーも拒否されてしまう |
4. vsftpd の再起動
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
5. ftpuser(Webルート用ユーザー)の作成
Apache のドキュメントルートに接続する FTP ユーザーを作成します。
sudo useradd -m -d /var/www/html -s /usr/sbin/nologin ftpuser
sudo passwd ftpuser
6. /var/www/html の所有権変更
sudo chown -R ftpuser:ftpuser /var/www/html
7. WinSCP から接続
別PC(Windows)から WinSCP を使って接続します。 FileZilla など他の FTP クライアントでも同じ設定で接続できます。
- プロトコル:FTP
- 暗号化:なし
- ホスト:Linux Mint の IP
- ポート:21
- ユーザー名:ftpuser
- パスワード:設定したもの
/var/www/html に接続できれば成功です。
FTP 接続成功時の画面例
WinSCP で接続すると、次のように index.html が表示されます。
images/
css/
js/
※これは説明用に再現した画面です。実際の表示内容は環境によって異なります。
7.1 WinSCP が固まる場合の原因と対処
WinSCP が「接続中のまま」になる場合、次の原因がほとんどです。
| 症状 | 原因 | 対処 |
|---|---|---|
| 接続中のまま止まる | PASV ポート(40000–40010)が閉じている | ufw でポート開放(2.5 参照) |
| ログイン直後に固まる | chroot 設定ミス | vsftpd.conf を確認 |
| パスワード後に切断 | PAM の pam_shells.so が有効 | コメントアウト(sec3) |
| ディレクトリ一覧が出ない | WinSCP がアクティブモード | パッシブモードに変更 |
7.2 Windows 側でポート確認(Test‑NetConnection)
WinSCP が固まる場合、Windows から Linux の FTP ポートへ接続できているか確認します。
① 21番ポート(FTP制御)
Test-NetConnection -ComputerName 192.168.x.x -Port 21
② PASV ポート(40000–40010)
Test-NetConnection -ComputerName 192.168.x.x -Port 40000
Test-NetConnection -ComputerName 192.168.x.x -Port 40010
Result : True になれば通信可能です。
7.3 ufw の誤設定を削除する方法
① 現在のルールを確認
sudo ufw status numbered
② ルール番号を指定して削除
sudo ufw delete 2
sudo ufw delete 1
③ ufw を無効化したい場合(最終手段)
sudo ufw disable
8. 180 フォルダの作成
180 フォルダは、受講生専用の作業領域として利用するためのものです。
各受講生が自分の FTP アカウントで Web ページをアップロードし、
ローカル Web サーバーを通じて自作サイトを確認できるようにします。
また、ローカルと Web サーバーで挙動が異なるケース(例:CSS の引用符抜けによる文字化け)を体験し、 実践的な学習につなげることもできます。
フォルダ名(例:180)やユーザー名(例:ftp180)は自由に変更できます。 クラス名や受講生名など、分かりやすい名前で構いません。
sudo mkdir /var/www/html/180
9. ftp180 ユーザーの作成
sudo useradd -m -d /var/www/html/180 -s /usr/sbin/nologin ftp180
sudo passwd ftp180
10. 180 フォルダの所有権変更
sudo chown -R ftp180:ftp180 /var/www/html/180
11. vsftpd の再起動
sudo systemctl restart vsftpd
12. ftp180 で接続
WinSCP を例にしていますが、他の FTP クライアントでも同じ設定で接続できます。
- プロトコル:FTP
- 暗号化:なし
- ユーザー名:ftp180
- パスワード:設定したもの
ログインすると、自分専用のフォルダ(/var/www/html/180)のみが表示されます。
他の領域は見えないため、受講生ごとに安全に作業領域を分離できます。
13. 最終構成まとめ
| ユーザー | ホームディレクトリ | アクセス先 | 用途 |
|---|---|---|---|
| ftpuser | /var/www/html | Web ルート全体 | メインのアップロード |
| ftp180 | /var/www/html/180 | 180 フォルダのみ | サブサイト・個別領域 |
14. まとめ
このページでは、vsftpd を使った FTP サーバー構築と、ユーザーごとにアクセス先を分ける方法をまとめました。 Web サーバー(Apache)と組み合わせることで、複数ユーザーが安全に Web コンテンツを管理できる環境が整います。
必要に応じてユーザーを追加したり、フォルダを分けることで、より柔軟な運用が可能になります。
更新履歴
- 2026年02月08日:ファイアウォール設定と WinSCP トラブルシューティングを追加
- 2026年02月01日:初版公開