サーバー設定 · 1 min read · Feb 10, 2026

Debian Lenny における vsftpd と MySQL を使用した仮想ホスティング

Debian Lenny における vsftpd と MySQL を使用した仮想ホスティング

バージョン 1.0
著者: Falko Timme
Twitter でフォローしてください

Vsftpd は Linux 用の最も安全で高速な FTP サーバーの一つです。通常、vsftpd はシステムユーザーと連携するように設定されています。この文書では、実際のシステムユーザーの代わりに MySQL データベースからの仮想ユーザーを使用する vsftpd サーバーのインストール方法を説明します。これにより、パフォーマンスが大幅に向上し、単一のマシンで数千の FTP ユーザーを持つことが可能になります。

MySQL データベースの管理には、phpMyAdmin のようなウェブベースのツールを使用できます。このハウツーでも phpMyAdmin をインストールします。phpMyAdmin は快適なグラフィカルインターフェースを提供するため、コマンドラインをいじる必要はありません。

このチュートリアルは Debian Lenny (Debian 5.0) に基づいています。最初の 7 章で説明されているように、基本的な Debian Lenny システムをすでにセットアップしている必要があります: 完璧なサーバー - Debian Lenny (Debian 5.0) [ISPConfig 2]

このハウツーは実用的なガイドとして意図されており、理論的な背景はカバーしていません。それらはウェブ上の他の多くの文書で扱われています。

この文書にはいかなる種類の保証もありません!これはこのようなシステムを設定する唯一の方法ではないことをお伝えしたいと思います。この目標を達成する方法はたくさんありますが、これは私が取る方法です。これがあなたにとって機能するという保証はありません!

1 前提条件

このチュートリアルでは、ホスト名 server1.example.com と IP アドレス 192.168.0.100 を使用します。これらの設定はあなたの環境によって異なる場合があるため、適宜置き換えてください。

2 vsftpd、MySQL、phpMyAdmin のインストール

Vsftpd には MySQL サポートが組み込まれていないため、PAM を使用して MySQL データベースに対して認証を行う必要があります。したがって、vsftpd、MySQL、phpMyAdmin に加えて libpam-mysql をインストールします:

aptitude install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

次の質問が表示されます:

MySQL “root” ユーザーの新しいパスワード: <– yourrootsqlpassword
MySQL “root” ユーザーのパスワードを再入力: <– yourrootsqlpassword
自動的に再構成するウェブサーバー: <– apache2

3 vsftpd 用の MySQL データベースの作成

次に、vsftpd という名前のデータベースと、vsftpd デーモンが後で vsftpd データベースに接続するために使用する MySQL ユーザー vsftpd を作成します:

mysql -u root -p
CREATE 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 シェルのままで、必要なデータベーステーブルを作成します(はい、テーブルは一つだけです!):

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 としてログインできます。次に、データベースを確認できます。後で 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 restart
Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。