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 が表示されます。

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 コンテンツを管理できる環境が整います。

必要に応じてユーザーを追加したり、フォルダを分けることで、より柔軟な運用が可能になります。