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

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

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

バージョン 1.0
著者: Falko Timme

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

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

このチュートリアルはMandriva 2009.0に基づいています。基本的なMandriva 2009.0システムをすでに設定している必要があります。たとえば、このチュートリアルの最初の6章に記載されているように: https://www.howtoforge.com/perfect-server-mandriva-2009.0-i386

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

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

1 前提条件

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

2 MySQLとphpMyAdminのインストール

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

urpmi MySQL MySQL-client phpmyadmin

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

vi /etc/my.cnf

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

その後、MySQLとApacheのシステム起動リンクを作成します…

chkconfig mysqld on  
chkconfig httpd on

… 両方のサービスを起動します:

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

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とユーザー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)  
) 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はプレーンテキストよりも非常に推奨されます 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

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

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