サーバー設定 · 2 min read · Jan 30, 2026

PureFTPdとMySQLを使用した仮想ホスティング(クォータと帯域幅管理を含む)Ubuntu 14.04LTS上

この文書では、実際のシステムユーザーの代わりにMySQLデータベースからの仮想ユーザーを使用するPureFTPdサーバーのインストール方法について説明します。これははるかにパフォーマンスが高く、単一のマシン上で数千のFTPユーザーを持つことができます。それに加えて、このセットアップでのクォータとアップロード/ダウンロード帯域幅制限の使用方法も示します。パスワードは、データベース内にMD5文字列として暗号化されて保存されます。このチュートリアルはUbuntu 14.04に基づいています。

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

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

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

1 前提条件

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

rootとしてログインしていることを確認してください(rootになるには

sudo su

と入力します)。このチュートリアルのすべてのステップをrootユーザーとして実行する必要があります。

2 MySQLとphpMyAdminのインストール

これらはすべて1つのコマンドでインストールできます:

apt-get install mysql-server mysql-client phpmyadmin apache2

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

MySQL “root”ユーザーの新しいパスワード: <– yourrootsqlpassword
MySQL “root”ユーザーのパスワードを再入力してください: <– yourrootsqlpassword
自動的に再構成するWebサーバー: <– apache2
phpmyadminのデータベースをdbconfig-commonで構成しますか? <– No

3 MySQLサポート付きPureFTPdのインストール

Ubuntu 14.04用に事前構成されたpure-ftpd-mysqlパッケージが利用可能です。次のようにインストールします:

apt-get install pure-ftpd-mysql

次に、すべての仮想ユーザーがマッピングされるftpグループ(ftpgroup)とユーザー(ftpuser)を作成します。グループIDとユーザーID2001を、システム上で空いている番号に置き換えてください:

groupadd -g 2001 ftpgroup  
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

4 PureFTPd用のMySQLデータベースの作成

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

mysql -u root -p
CREATE DATABASE pureftpd;  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';  
FLUSH PRIVILEGES;

文字列ftpdpassを、MySQLユーザーpureftpdに使用するパスワードに置き換えます。MySQLシェル内で、必要なデータベーステーブルを作成します(はい、テーブルは1つだけです!):

USE pureftpd;
CREATE TABLE ftpd (  
User varchar(16) NOT NULL default '',  
status enum('0','1') NOT NULL default '0',  
Password varchar(64) NOT NULL default '',  
Uid varchar(11) NOT NULL default '-1',  
Gid varchar(11) NOT NULL default '-1',  
Dir varchar(128) NOT NULL default '',  
ULBandwidth smallint(5) NOT NULL default '0',  
DLBandwidth smallint(5) NOT NULL default '0',  
comment tinytext NOT NULL,  
ipaccess varchar(15) NOT NULL default '*',  
QuotaSize smallint(5) NOT NULL default '0',  
QuotaFiles int(11) NOT NULL default 0,  
PRIMARY KEY (User),  
UNIQUE KEY User (User)  
) ENGINE=MyISAM;
quit;

ご覧のとおり、quit;コマンドでMySQLシェルを終了し、Linuxシェルに戻りました。

ところで、(あなたのFTPサーバーシステムのホスト名がserver1.example.comであると仮定しています)ブラウザでhttp://server1.example.com/phpmyadmin/にアクセスし、ユーザーpureftpdとしてログインできます。次に、データベースを確認できます。後でphpMyAdminを使用してPureFTPdサーバーを管理できます。

5 PureFTPdの設定

/etc/pure-ftpd/db/mysql.confを編集します。次のようになります:

cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig  
cat /dev/null > /etc/pure-ftpd/db/mysql.conf  
vi /etc/pure-ftpd/db/mysql.conf

| MYSQLSocket /var/run/mysqld/mysqld.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") |

MYSQLPasswordの行で、MySQLユーザーpureftpdの実際のパスワードにftpdpassを置き換えることを確認してください!MYSQLCryptメソッドとしてmd5を使用することに注意してください。これは、ユーザーのパスワードをデータベースにMD5文字列として保存することを意味し、プレーンテキストパスワードを使用するよりもはるかに安全です!

次に、単に”yes”という文字列を含むファイル/etc/pure-ftpd/conf/ChrootEveryoneを作成します:

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

これにより、PureFTPdはすべての仮想ユーザーをそのホームディレクトリにchrootし、ユーザーがホームディレクトリの外のディレクトリやファイルを参照できなくなります。

また、単に”yes”という文字列を含むファイル/etc/pure-ftpd/conf/CreateHomeDirを作成します:

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

これにより、ユーザーがログインしたときに、ユーザーのホームディレクトリが存在しない場合にPureFTPdがユーザーのホームディレクトリを作成します。

最後に、単に”yes”という文字列を含むファイル/etc/pure-ftpd/conf/DontResolveを作成します:

echo "yes" > /etc/pure-ftpd/conf/DontResolve

これにより、PureFTPdはホスト名を解決しなくなり、接続が大幅に高速化され、帯域幅の使用が削減されます。

その後、PureFTPdを再起動します:

service pure-ftpd-mysql restart
Share: X/Twitter LinkedIn

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

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