サーバー設定 · 2 min read · Feb 11, 2026
Debian Squeeze における vsftpd と MySQL を使用した仮想ホスティング
Vsftpd は Linux 用の最も安全で高速な FTP サーバーの 1 つです。通常、vsftpd はシステムユーザーと連携するように構成されています。この文書では、実際のシステムユーザーの代わりに MySQL データベースからの仮想ユーザーを使用する vsftpd サーバーのインストール方法について説明します。これにより、パフォーマンスが大幅に向上し、単一のマシン上で数千の FTP ユーザーを持つことができます。
MySQL データベースの管理には、phpMyAdmin のような Web ベースのツールを使用できます。この手順でも phpMyAdmin をインストールします。phpMyAdmin は、コマンドラインをいじる必要がない快適なグラフィカルインターフェースです。
このチュートリアルは Debian Squeeze (Debian 6.0) に基づいています。基本的な Debian Squeeze システムをすでにセットアップしている必要があります。
この手順は実用的なガイドとして意図されており、理論的な背景はカバーしていません。理論的な背景については、Web 上の他の多くの文書で扱われています。
この文書には、いかなる種類の保証もありません!これは、このようなシステムを設定する唯一の方法ではないことをお伝えしたいと思います。この目標を達成する方法はたくさんありますが、これは私が取る方法です。これがあなたにとって機能することを保証するものではありません!
1 前書き
このチュートリアルでは、ホスト名 server1.example.com と IP アドレス 192.168.0.100 を使用します。これらの設定はあなたの環境によって異なる場合があるため、適宜置き換えてください。
2 vsftpd、MySQL、および phpMyAdmin のインストール
Vsftpd には MySQL サポートが組み込まれていないため、PAM を使用して MySQL データベースに対して認証を行う必要があります。したがって、vsftpd、MySQL、および phpMyAdmin に加えて libpam-mysql をインストールします:
apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin次の質問が表示されます:
MySQL “root” ユーザーの新しいパスワード: <– yourrootsqlpassword
MySQL “root” ユーザーのパスワードを再入力してください: <– yourrootsqlpassword
自動的に再構成する Web サーバー: <– apache2
phpmyadmin のデータベースを dbconfig-common で構成しますか? <– No
3 vsftpd 用の MySQL データベースを作成
次に、vsftpd という名前のデータベースと、vsftpd デーモンが後で vsftpd データベースに接続するために使用する vsftpd という名前の MySQL ユーザーを作成します:
mysql -u root -pCREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;文字列 ftpdpass を、MySQL ユーザー vsftpd に使用するパスワードに置き換えてください。MySQL シェルにまだいる間に、必要なデータベーステーブルを作成します(はい、テーブルは 1 つだけです!):
USE vsftpd;CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;quit;お気づきかもしれませんが、quit; コマンドで MySQL シェルを終了し、Linux シェルに戻りました。
ちなみに、(あなたの FTP サーバーシステムのホスト名が server1.example.com であると仮定しています)ブラウザで http://server1.example.com/phpmyadmin/ にアクセスし、ユーザー vsftpd としてログインできます。(server1.example.com の代わりに IP アドレスを使用することもできます。)その後、データベースを確認できます。後で phpMyAdmin を使用して vsftpd サーバーを管理できます。
4 vsftpd の設定
まず、nogroup グループに属する vsftpd という名前の特権のないユーザーを作成します(ホームディレクトリは /home/vsftpd)。このユーザーの下で vsftpd を実行し、仮想ユーザーの FTP ディレクトリは /home/vsftpd ディレクトリに配置されます(例:/home/vsftpd/user1、/home/vsftpd/user2 など)。
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd次に、元の /etc/vsftpd.conf ファイルのバックアップを作成し、自分のファイルを作成します:
cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
cat /dev/null > /etc/vsftpd.conf
vi /etc/vsftpd.confファイルには次の内容が含まれている必要があります:
| listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf |
設定オプションの説明は http://vsftpd.beasts.org/vsftpd_conf.html にあります。仮想セットアップにとって重要なオプションは chroot_local_user、guest_enable、guest_username、user_sub_token、local_root、および virtual_use_local_privs です。
user_config_dir オプションを使用すると、グローバル設定の一部をオーバーライドするユーザーごとの設定ファイルのディレクトリを指定できます。この機能を使用するかどうかは完全に任意です。ただし、今すぐそのディレクトリを作成する必要があります:
mkdir /etc/vsftpd_user_conf次に、PAM を構成して、/etc/passwd および /etc/shadow の代わりに MySQL データベースを使用して仮想 FTP ユーザーを認証する必要があります。vsftpd の PAM 設定は /etc/pam.d/vsftpd にあります。元のファイルのバックアップを作成し、次のように新しいファイルを作成します:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
cat /dev/null > /etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd| auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 |
MySQL パスワードを自分のものに置き換えることを忘れないでください!
その後、vsftpd を再起動します:
/etc/init.d/vsftpd restart5 最初の仮想ユーザーを作成
データベースをポピュレートするには、MySQL シェルを使用できます:
mysql -u root -pUSE vsftpd;次に、パスワード secret を持つ仮想ユーザー testuser を作成します(これは MySQL の PASSWORD 関数を使用して暗号化されて保存されます):
INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;testuser のホームディレクトリは /home/vsftpd/testuser です。残念ながら、vsftpd はそのディレクトリが存在しない場合、自動的に作成しません。したがって、今手動で作成し、vsftpd ユーザーと nogroup グループの所有にします:
mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser今、作業ステーションの FTP クライアントプログラム(FileZilla や FireFTP など)を開き、接続を試みてください。ホスト名には server1.example.com(またはシステムの IP アドレス)を使用し、ユーザー名は testuser、パスワードは secret です。
接続できた場合は、おめでとうございます!接続できない場合は、何かがうまくいかなかったということです。
6 データベース管理
ほとんどの人にとって、MySQL のグラフィカルフロントエンドがある方が簡単です。したがって、vsftpd データベースを管理するために phpMyAdmin(この例では http://server1.example.com/phpmyadmin/)を使用することもできます。

ユーザーを作成または変更するたびに、そのユーザーのパスワードを暗号化するために MySQL の PASSWORD 関数を使用することを確認してください。また、新しい仮想ユーザーを作成する際には、前の章の最後に示したように、そのユーザーのホームディレクトリをシェルで作成することを忘れないでください。

7 リンク
- vsftpd: http://vsftpd.beasts.org/
- Debian: http://www.debian.org/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。