サーバー設定 · 2 min read · Dec 05, 2025

Mandriva 2007 Spring における PureFTPd と MySQL を使用した仮想ホスティング (クォータと帯域幅管理を含む)

Mandriva 2007 Spring における PureFTPd と MySQL を使用した仮想ホスティング (クォータと帯域幅管理を含む)

Version 1.0
Author: Falko Timme

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

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

このチュートリアルは Mandriva 2007 Spring (Mandriva 2007.1) に基づいています。基本的な Mandriva 2007 Spring システムをすでにセットアップしている必要があります。たとえば、このチュートリアルの最初の 4 章に記載されているように: https://www.howtoforge.com/perfect_server_mandriva_spring_2007

この howto は実用的なガイドとして意図されています。理論的な背景については、ウェブ上の他の多くの文書で扱われています。

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

1 予備ノート

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

2 MySQL と phpMyAdmin のインストール

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

urpmi MySQL MySQL-client phpmyadmin

デフォルトでは、Mandriva 2007 Spring の MySQL パッケージではネットワーキングが有効になっていません。これを変更するには、/etc/my.cnf の skip-networking 行をコメントアウトします:

vi /etc/my.cnf

| [...] # TCP/IP ポートで全くリッスンしません。これはセキュリティの向上になる可能性があります。 # mysqld に接続する必要があるすべてのプロセスが同じホスト上で実行される場合。 # mysqld とのすべてのやり取りは Unix ソケットまたは名前付きパイプを介して行う必要があります。 # Windows で名前付きパイプを有効にせずにこのオプションを使用すると # (「enable-named-pipe」オプションを介して) mysqld は無用になります! # #skip-networking [...] |

その後、MySQL と Apache を起動します:

/etc/init.d/mysqld start  
/etc/init.d/httpd start

MySQL ユーザー root のパスワードを作成します (yourrootsqlpassword を使用したいパスワードに置き換えます):

mysqladmin -u root password yourrootsqlpassword  
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

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

Mandriva の PureFTPd パッケージは、MySQL、PostgreSQL、LDAP などのさまざまなバックエンドをサポートしています。次のようにインストールします:

urpmi pure-ftpd pure-ftpd-anon-upload pure-ftpd-anonymous

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

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)  
) TYPE=MyISAM;
quit;

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

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

5 PureFTPd の設定

/etc/pure-ftpd/pure-ftpd.conf を編集し、ChrootEveryone、MySQLConfigFile、および CreateHomeDir 行が有効になっていることを確認し、次のようにします:

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...] |

ChrootEveryone 設定により、PureFTPd はすべての仮想ユーザーをそのホームディレクトリに chroot させるため、ユーザーはホームディレクトリの外のディレクトリやファイルを参照できなくなります。CreateHomeDir 行により、ユーザーがログインしたときにユーザーのホームディレクトリが存在しない場合、PureFTPd がそのホームディレクトリを作成します。

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

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

| MYSQLSocket /var/lib/mysql/mysql.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 行の文字列 ftpdpass を MySQL ユーザー pureftpd の実際のパスワードに置き換えることを忘れないでください!MYSQLCrypt メソッドとして md5 を使用することに注意してください。これは、ユーザーのパスワードをデータベースに MD5 文字列として保存することを意味し、プレーンテキストパスワードを使用するよりもはるかに安全です!

次に、PureFTPd を起動します:

/etc/init.d/pure-ftpd start
Share: X/Twitter LinkedIn

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

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