FTPサーバー構築(vsftpd)
このページでは、vsftpd を使ってユーザーごとにアクセス先を分離した安全な FTP サーバーを構築し、 WinSCP を使って接続確認する手順をまとめています。Web サーバー(Apache)と組み合わせることで、 複数ユーザーが安全に Web コンテンツを管理できる環境を整えることができます。
最終更新:
目次
1. vsftpd のインストール
sudo apt update sudo 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)
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 でもログインが拒否されてしまいます。
そのため、vsftpd の PAM 設定ファイルで pam_shells.so を
コメントアウトし、FTP 専用ユーザーが正しくログインできるようにします。
| 仕組み | 役割 | FTP との関係 | なぜ必要? |
|---|---|---|---|
| nologin | シェルログインを禁止 | FTP ではログインさせたい | Linux に直接ログインさせない安全対策 |
| pam_shells.so | 許可されたシェル以外を拒否 | nologin は拒否される | FTP 専用ユーザーも拒否されてしまう |
| pam_shells.so をコメントアウト | シェルチェックを無効化 | nologin でも FTP ログイン可能 | 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/
※これは説明用に再現した画面です。実際の表示内容は環境によって異なります。
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 コンテンツを管理できる環境が整います。
必要に応じてユーザーを追加したり、フォルダを分けることで、より柔軟な運用が可能になります。