サーバー設定 · 3 min read · Jan 20, 2026

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

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 の行で、文字列 ftpdpass を MySQL ユーザー pureftpd の実際のパスワードに置き換えることを忘れないでください! MYSQLCrypt メソッドとして md5 を使用しているため、ユーザーのパスワードはデータベースに MD5 文字列として保存され、平文のパスワードを使用するよりもはるかに安全です!

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

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

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

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

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

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

次に、PureFTPd をスタンドアロンデーモンとして設定する必要があります(現在は inetd によって制御されています)。これを行うには、/etc/default/pure-ftpd-common を開き、パラメータ STANDALONE_OR_INETD の値を standalone に変更します:

vi /etc/default/pure-ftpd-common

| # Configuration for pure-ftpd # (this file is sourced by /bin/sh, edit accordingly) # STANDALONE_OR_INETD # valid values are "standalone" and "inetd". # Any change here overrides the setting in debconf. STANDALONE_OR_INETD=standalone # VIRTUALCHROOT: # whether to use binary with virtualchroot support # valid values are "true" or "false" # Any change here overrides the setting in debconf. VIRTUALCHROOT=false # UPLOADSCRIPT: if this is set and the daemon is run in standalone mode, # pure-uploadscript will also be run to spawn the program given below # for handling uploads. see /usr/share/doc/pure-ftpd/README.gz or # pure-uploadscript(8) # example: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl UPLOADSCRIPT= # if set, pure-uploadscript will spawn $UPLOADSCRIPT running as the # given uid and gid UPLOADUID= UPLOADGID= |

次に、/etc/inetd.conf を修正し、ftp 行をコメントアウトします:

vi /etc/inetd.conf

| [...] #:STANDARD: These are standard services. #ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper [...] |

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

/etc/init.d/openbsd-inetd restart  
/etc/init.d/pure-ftpd-mysql restart

6 データベースのポピュレートとテスト

データベースをポピュレートするには、MySQL シェルを使用できます:

mysql -u root -p
USE 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

を実行すると、ディレクトリ /home/www.example.com(exampleuser のホームディレクトリ)が自動的に作成され、ftpuser と ftpgroup(ステップ 3 の最後で作成したユーザー/グループ)が所有していることがわかります:

server1:~# ls -l /home  
total 8  
drwxr-xr-x 2 administrator administrator 4096 2009-02-16 13:18 administrator  
drwxr-xr-x 2 ftpuser       ftpgroup      4096 2009-06-05 16:09 www.example.com  
server1:~#

7 データベース管理

ほとんどの人にとって、MySQL のグラフィカルフロントエンドがある方が簡単です。したがって、phpMyAdmin(この例では http://server1.example.com/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(ホームディレクトリは /home/ftp)とグループ ftp を作成します:

groupadd ftp  
useradd -s /bin/false -d /home/ftp -m -c "anonymous ftp" -g ftp ftp

次に、文字列 no を含むファイル /etc/pure-ftpd/conf/NoAnonymous を作成します:

echo "no" > /etc/pure-ftpd/conf/NoAnonymous

この設定により、PureFTPd は匿名ログインを許可します。

PureFTPd を再起動します:

/etc/init.d/pure-ftpd-mysql restart

次に、匿名ユーザーがファイルをアップロードできるようにする /home/ftp/incoming ディレクトリを作成します。/home/ftp/incoming ディレクトリには 311 の権限を与え、ユーザーがアップロードできるが、そのディレクトリ内のファイルを表示またはダウンロードできないようにします。/home/ftp ディレクトリには 555 の権限を与え、ファイルの表示とダウンロードを許可します:

cd /home/ftp  
mkdir incoming  
chown ftp:nogroup incoming/  
chmod 311 incoming/  
cd ../  
chmod 555 ftp/

これで、匿名ユーザーがログインでき、/home/ftp からファイルをダウンロードできますが、アップロードは /home/ftp/incoming に制限されます(/home/ftp/incoming にファイルがアップロードされると、そのファイルはそこから読み取ったりダウンロードしたりできません。サーバー管理者がそれを /home/ftp に移動して他の人が利用できるようにする必要があります)。

9 リンク

Share: X/Twitter LinkedIn

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

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