サーバー設定 · 7 min read · Nov 24, 2025
OpenSUSE 13.2 における PureFTPd と MySQL を用いた仮想ホスティング (クォータと帯域幅管理を含む)
OpenSUSE 13.2 における PureFTPd と MySQL を用いた仮想ホスティング (クォータと帯域幅管理を含む)
Version 1.0
Author: Srijan Kishore
howtoforge を Twitter でフォロー
Last edited 19/Nov/2014
この文書では、実際のシステムユーザーの代わりに MySQL データベースからの仮想ユーザーを使用する PureFTPd サーバーのインストール方法について説明します。これははるかにパフォーマンスが高く、単一のマシン上で数千の FTP ユーザーを持つことができます。さらに、この設定でのクォータとアップロード/ダウンロード帯域幅制限の使用方法も示します。パスワードはデータベース内に MD5 文字列として暗号化されて保存されます。
MySQL データベースの管理には、phpMyAdmin のようなウェブベースのツールを使用できます。この howto でもインストールされます。phpMyAdmin は快適なグラフィカルインターフェースであり、コマンドラインをいじる必要はありません。
この文書は、いかなる種類の保証もありません!このシステムを設定する唯一の方法ではないことを言いたいです。この目標を達成する方法はたくさんありますが、これが私が取る方法です。
1 予備ノート
このチュートリアルでは、ホスト名 server1.example.com と IP アドレス 192.168.0.100 を使用します。これらの設定はあなたの環境によって異なる場合があるため、適宜置き換える必要があります。このチュートリアルに記載されているように進む前に、基本的な Open Suse のインストールが必要です。
2 MariaDB、Apache2、および phpMyAdmin のインストール
MariaDB、Apache、および phpMyAdmin に必要な PHP モジュールは、次のようにインストールできます:
zypper install mariadb mariadb-client apache2 apache2-mod_php5 php5-mysql php5-mcrypt php5-mbstring php5-gdserver1:~ # zypper install mariadb mariadb-client apache2 apache2-mod_php5 php5-mysql php5-mcrypt php5-mbstring php5-gd
Loading repository data...
Reading installed packages...
Resolving package dependencies...
Problem: php5-mysql-5.6.1-4.1.x86_64 requires php5 = 5.6.1, but this requirement cannot be provided
uninstallable providers: php5-5.6.1-1.1.x86_64[openSUSE-13.2-0]
php5-5.6.1-1.1.i586[repo-oss]
php5-5.6.1-1.1.x86_64[repo-oss]
php5-5.6.1-4.1.i586[repo-update]
php5-5.6.1-4.1.x86_64[repo-update]
Solution 1: Following actions will be done:
do not install php5-mysql-5.6.1-4.1.x86_64
do not install php5-mcrypt-5.6.1-4.1.x86_64
do not install php5-gd-5.6.1-4.1.x86_64
Solution 2: Following actions will be done:
do not install php5-mcrypt-5.6.1-4.1.x86_64
do not install apache2-mod_php5-5.6.1-4.1.x86_64
do not install php5-gd-5.6.1-4.1.x86_64
do not install php5-mbstring-5.6.1-4.1.x86_64
do not install php5-mysql-5.6.1-4.1.x86_64
Solution 3: Following actions will be done:
do not install php5-mcrypt-5.6.1-4.1.x86_64
do not install apache2-mod_php5-5.6.1-4.1.x86_64
do not install php5-gd-5.6.1-4.1.x86_64
do not install php5-mbstring-5.6.1-4.1.x86_64
Solution 4: Following actions will be done:
do not install php5-mcrypt-5.6.1-4.1.x86_64
do not install apache2-mod_php5-5.6.1-4.1.x86_64
do not install php5-gd-5.6.1-4.1.x86_64
do not install php5-mbstring-5.6.1-4.1.x86_64
Solution 5: Following actions will be done:
do not install php5-mcrypt-5.6.1-4.1.x86_64
do not install apache2-mod_php5-5.6.1-4.1.x86_64
do not install php5-gd-5.6.1-4.1.x86_64
do not install php5-mbstring-5.6.1-4.1.x86_64
Solution 6: Following actions will be done:
do not install php5-mcrypt-5.6.1-4.1.x86_64
do not install apache2-mod_php5-5.6.1-4.1.x86_64
do not install php5-gd-5.6.1-4.1.x86_64
do not install php5-mbstring-5.6.1-4.1.x86_64
Solution 7: deinstallation of patterns-openSUSE-minimal_base-conflicts-20141007-2.1.x86_64
Solution 8: break php5-mysql-5.6.1-4.1.x86_64 by ignoring some of its dependencies
Choose from above solutions by number or cancel [1/2/3/4/5/6/7/8/c] (c): <--7次に、MySQL のシステム起動リンクを作成し(システムが起動するたびに MySQL が自動的に起動するように)、MySQL サーバーを起動します:
systemctl enable mysql.service
systemctl start mysql.serviceMySQL インストールを安全にするには、次を実行します:
mysql_secure_installationserver1:~ # mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] <--ENTER
New password: <--mariadbpassword
Re-enter new password: <--mariadbpassword
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] <--ENTER
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] <--ENTER
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] <--ENTER
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] <--ENTER
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
server1:~ #これで MySQL の設定は安全になりました。
次に、Apache のシステム起動リンクを作成し(システムが起動するたびに自動的に起動するように)、Apache を起動します:
systemctl enable apache2.service
systemctl start apache2.servicephpMyAdmin は次のようにインストールできます:
zypper install phpmyadminphpMyAdmin にアクセスできることを確認するために、次のようにファイルを編集します:
vi /etc/apache2/conf.d/phpMyAdmin.confエイリアスを次のように追加します:
Alias /phpMyAdmin /srv/www/htdocs/phpMyAdmin
Alias /phpmyadmin /srv/www/htdocs/phpMyAdmin
[...] Apache を起動する前に、リンクをたどり、httpd.conf に変更を加える必要があります。
vi /etc/apache2/httpd.conf
注意:ファイルの値が異なる場合は、次のように値を変更します:
これらの行をコメントアウトし、これらの行を追加します。
#
# Options None
# AllowOverride None
# Order deny,allow
# Deny from all
#
Options None
AllowOverride None
Require all denied
次に、phpmyadmin の設定ファイルを次のように作成します。
cd /srv/www/htdocs/phpMyAdmin
cp config.sample.inc.php config.inc.php設定ファイルでは、phpmyadmin が pma テーブルを含む “phpmyadmin” という名前のデータベースを期待していることがわかります:
[...]
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
[...] したがって、次のように作成します:
echo "create database phpmyadmin;" | mysql -u root -p 'mariadbpassword'そして、phpmyadmin ドキュメントからテーブルを読み込みます。
mysql -u root -p 'mariadbpassword' < /usr/share/doc/packages/phpMyAdmin/examples/create_tables.sql次に、Apache サービスを起動します。
systemctl enable apache2.service
systemctl restart apache2.serviceこれで、http://192.168.0.100/phpmyadmin または http://server1.example.com で phpmyadmin にアクセスできます。

3 MySQL サポートを持つ PureFTPd のインストール
OpenSUSE の PureFTPd パッケージは、MySQL、PostgreSQL、LDAP などのさまざまなバックエンドをサポートしています。したがって、通常の PureFTPd パッケージをインストールするだけで済みます:
zypper install pure-ftpd次に、すべての仮想ユーザーがマッピングされる FTP グループ (ftpgroup) とユーザー (ftpuser) を作成します。グループおよびユーザー ID 2001 を、システム上で空いている番号に置き換えます:
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser4 PureFTPd 用の MySQL データベースを作成
次に、pureftpd という名前のデータベースと、PureFTPd デーモンが後で pureftpd データベースに接続するために使用する pureftpd という名前の MySQL ユーザーを作成します:
mysql -u root -pCREATE 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;これで、ブラウザで http://server1.example.com/phpMyAdmin/ にアクセスし(server1.example.com の代わりに IP アドレスを使用することもできます)、ユーザー pureftpd としてログインできます。次に、データベースを確認できます。後で phpMyAdmin を使用して PureFTPd サーバーを管理できます。
5 PureFTPd の設定
/etc/pure-ftpd/pure-ftpd.conf を編集し、ChrootEveryone、AnonymousOnly、MySQLConfigFile、および CreateHomeDir 行が有効になっていることを確認し、次のようになります:
vi /etc/pure-ftpd/pure-ftpd.conf[...]
ChrootEveryone yes
[...]
AnonymousOnly no
[...]
MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf
[...]
CreateHomeDir yes
[...] ChrootEveryone 設定は、PureFTPd がすべての仮想ユーザーをそのホームディレクトリに chroot させるため、ユーザーは自分のホームディレクトリの外のディレクトリやファイルをブラウズできなくなります。CreateHomeDir 行は、ユーザーがログインしたときにユーザーのホームディレクトリがまだ存在しない場合に、PureFTPd がユーザーのホームディレクトリを作成します。AnonymousOnly は「no」に設定する必要があります。そうでないと、匿名 FTP セッションのみが許可されます。
次に、/etc/pure-ftpd/pureftpd-mysql.conf を作成します。次のようになります:
vi /etc/pure-ftpd/pureftpd-mysql.confMYSQLSocket /var/run/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 の行で、MySQL ユーザー pureftpd の実際のパスワードに ftpdpass という文字列を置き換えることを確認してください!MYSQLCrypt メソッドとして md5 を使用しているため、ユーザーのパスワードをデータベースに MD5 文字列として保存します。これは、プレーンテキストのパスワードを使用するよりもはるかに安全です!
次に、PureFTPd のシステム起動リンクを作成し、起動します:
systemctl enable pure-ftpd
systemctl start pure-ftpd6 データベースをポピュレートし、テスト
データベースをポピュレートするには、MySQL シェルを使用できます:
mysql -u root -pUSE pureftpd;次に、ユーザー exampleuser を作成し、ステータス 1(つまり、FTP アカウントがアクティブであることを意味します)、パスワード secret(MySQL の MD5 関数を使用して暗号化されて保存されます)、UID と GID 2001(ステップ 2 の最後で作成したユーザー/グループのユーザー ID とグループ ID を使用します!)、ホームディレクトリ /home/www.example.com、アップロードおよびダウンロード帯域幅 100 KB/sec(キロバイト毎秒)、および 50 MB のクォータを作成します:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');quit;次に、作業ステーションで FTP クライアントプログラム(Windows システムの場合は WS_FTP や SmartFTP、Linux デスクトップの場合は gFTP など)を開き、接続を試みます。ホスト名には server1.example.com(またはシステムの IP アドレス)を使用し、ユーザー名は exampleuser、パスワードは secret です。
接続できた場合はおめでとうございます!できない場合は、何かがうまくいかなかったことになります。
次に、次を実行すると、
ls -l /home/server1:~ # ls -l /home/
total 0
drwxr-xr-x 1 administrator users 128 Nov 7 14:30 administrator
drwxr-xr-x 1 ftpuser ftpgroup 18 Nov 19 14:32 www.example.com
server1:~ #/home/www.example.com(exampleuser のホームディレクトリ)が自動的に作成され、ftpuser と ftpgroup(ステップ 2 の最後で作成したユーザー/グループ)が所有していることがわかります。
7 データベース管理
ほとんどの人にとって、MySQL のグラフィカルフロントエンドがあると便利です。したがって、phpMyAdmin(この例では http://server1.example.com/phpMyAdmin/ または http://192.168.0.100/phpMyAdmin/)を使用して pureftpd データベースを管理できます。

新しいユーザーを作成するたびに、ftpd テーブルにエントリを作成する必要がありますので、このテーブルの列について説明します:
ftpd テーブル:
User: 仮想 PureFTPd ユーザーの名前(例:exampleuser)。
status: 0 または 1。0 はアカウントが無効であり、ユーザーはログインできません。
Password: 仮想ユーザーのパスワード。MySQL の MD5 関数を使用して、パスワードを MD5 文字列として暗号化して保存することを確認してください:

UID: ステップ 2 の最後で作成した FTP ユーザーのユーザー ID(例:2001)。
GID: ステップ 2 の最後で作成した FTP グループのグループ ID(例:2001)。
Dir: 仮想 PureFTPd ユーザーのホームディレクトリ(例:/home/www.example.com)。存在しない場合は、新しいユーザーが最初に FTP 経由でログインしたときに作成されます。仮想ユーザーはこのホームディレクトリに監禁され、他のディレクトリにアクセスできません。
ULBandwidth: 仮想ユーザーのアップロード帯域幅(KB/sec。キロバイト毎秒)。0 は無制限を意味します。
DLBandwidth: 仮想ユーザーのダウンロード帯域幅(KB/sec。キロバイト毎秒)。0 は無制限を意味します。
comment: ここに任意のコメントを入力できます(例:内部管理用)。通常、このフィールドは空のままにします。
ipaccess: この FTP アカウントに接続を許可されている IP アドレスをここに入力します。* は任意の IP アドレスが接続を許可されることを意味します。
QuotaSize: FTP サーバー上で仮想ユーザーが使用できるストレージスペース(MB 単位、ULBandwidth および DLBandwidth は KB 単位ではありません!)。0 は無制限を意味します。
QuotaFiles: FTP サーバー上で仮想ユーザーが保存できるファイルの数。0 は無制限を意味します。
8 匿名 FTP
パスワードなしで誰でもログインできる匿名 FTP アカウントを作成する場合は、ftp という名前のユーザーとグループが必要です。これらは、pure-ftpd パッケージをインストールしたときに自動的に作成されているため、手動で作成する必要はありません。ただし、ftp のホームディレクトリはデフォルトで /srv/ftp ですが、匿名 FTP ディレクトリを /home/ftp に作成したいと思います(通常のユーザーの FTP ディレクトリも /home にあります。例:/home/www.example.com)。もちろん、/srv/ftp ディレクトリを匿名 FTP 用に使用することもできますが、好みに応じて選択してください。
/home/ftp を使用する場合は、/etc/passwd を開き、ftp ユーザーのホームディレクトリを /srv/ftp から /home/ftp に変更します(/srv/ftp を使用する場合はこれを行わないでください):
vi /etc/passwd[...]
#ftp:x:40:49:FTP account:/srv/ftp:/bin/bash
ftp:x:40:49:FTP account:/home/ftp:/bin/bash
[...] 次に、/srv/ftp を /home に移動します(/srv/ftp を使用する場合はこれを行わないでください):
mv /srv/ftp /home次に、/home/ftp/incoming ディレクトリを作成し、匿名ユーザーがファイルをアップロードできるようにします。/home/ftp/incoming ディレクトリには 311 の権限を与え、ユーザーがアップロードできるが、そのディレクトリ内のファイルを表示またはダウンロードできないようにします。/home/ftp ディレクトリには 555 の権限を与え、ファイルの表示とダウンロードを許可します:
chown ftp:nobody /home/ftp
cd /home/ftp
mkdir incoming
chown ftp:nobody incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/(/srv/ftp を使用する場合は、上記のコマンドで /home/ftp を /srv/ftp に置き換えます。)
匿名ユーザーはログインでき、/home/ftp からファイルをダウンロードできますが、アップロードは /home/ftp/incoming に制限されます(/home/ftp/incoming にファイルがアップロードされると、そこからは読み取りやダウンロードができなくなります。サーバー管理者がそれを /home/ftp に移動して、他の人が利用できるようにする必要があります)。
次に、匿名 FTP 用に PureFTPd を設定する必要があります。/etc/pure-ftpd/pure-ftpd.conf を開き、次の設定が含まれていることを確認します:
vi /etc/pure-ftpd/pure-ftpd.conf[...]
NoAnonymous no
[...]
AnonymousBandwidth 8
[...]
AnonymousCantUpload no
[...] (AnonymousBandwidth 設定はオプションです - 匿名ユーザーのアップロードおよびダウンロード帯域幅を制限することができます。8 は 8 KB/sec を意味します。任意の値を使用するか、帯域幅を制限したくない場合は行をコメントアウトしてください。)
最後に、PureFTPd を再起動します:
systemctl restart pure-ftpd.service9 リンク
- OpenSUSE: http://www.opensuse.org/
- PureFTPd: http://www.pureftpd.org/
- phpMyAdmin: http://www.phpmyadmin.net/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。