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

Fedora 20 における PureFTPd と MySQL を使用した仮想ホスティング (クォータおよび帯域幅管理を含む) - ページ 2

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 のシステム起動リンクを作成し、起動します:

systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

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 (ステップ 2 の最後で作成したユーザー/グループ) が所有していることがわかります:

[root@server1 system]# ls -l /home/  
total 4  
drwxr-xr-x 2 ftpuser ftpgroup 4096 May  2 02:35 www.example.com  
[root@server1 system]#  

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 という名前のユーザーとグループが必要です。これらは pure-ftpd パッケージをインストールしたときに自動的に作成されるため、手動で作成する必要はありません。ただし、ftp のホームディレクトリはデフォルトで /var/ftp ですが、私は匿名 FTP ディレクトリを /home/ftp に作成したいと思います (通常のユーザーの FTP ディレクトリも /home にあります、例: /home/www.example.com)。もちろん、匿名 FTP に /var/ftp ディレクトリを使用することもできます。

/home/ftp を使用する場合は、/etc/passwd を開き、ftp ユーザーのホームディレクトリを /var/ftp から /home/ftp に変更します (これを行う場合は /var/ftp を使用しないでください):

vi /etc/passwd

| [...] #ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin [...] |

次に、/var/ftp を /home に移動します (これを行う場合は /var/ftp を使用しないでください):

mv /var/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/

(代わりに /var/ftp を使用する場合は、上記のコマンドで /home/ftp を /var/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 [...] AntiWarez no [...] AnonymousBandwidth 8 [...] AnonymousCantUpload no [...] |

(AnonymousBandwidth 設定はオプションです - 匿名ユーザーのアップロードおよびダウンロード帯域幅を制限することができます。8 は 8 KB/sec を意味します。任意の値を使用するか、帯域幅を制限したくない場合は行をコメントアウトしてください。)

最後に、PureFTPd を再起動します:

systemctl restart pure-ftpd.service

9 リンク

Share: X/Twitter LinkedIn

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

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