このドキュメントでは、実際のシステムユーザーの代わりにMySQLデータベースの仮想ユーザーを使用するPureFTPdサーバーをインストールする方法について説明します。これははるかにパフォーマンスが高く、1台のマシンに数千人のftpユーザーを配置できます。それに加えて、この設定でのクォータとアップロード/ダウンロード帯域幅制限の使用法を示します。パスワードは、MD5文字列として暗号化されてデータベースに保存されます。
MySQLデータベースの管理には、このハウツーにもインストールされるphpMyAdminなどのWebベースのツールを使用できます。 phpMyAdminは快適なグラフィカルインターフェイスであるため、コマンドラインをいじくり回す必要はありません。
このチュートリアルはUbuntu10.10に基づいています。このチュートリアルの最初の8つの章で説明されているように、基本的なUbuntu10.10サーバーシステムをすでにセットアップしている必要があります。https://www.howtoforge.com/perfect-server-ubuntu-10.10-maverick-meerkat-ispconfig-2
このハウツーは実用的なガイドとして意図されています。理論的背景については説明していません。それらは、Webの他の多くのドキュメントで扱われます。
このドキュメントには、いかなる種類の保証もありません。このようなシステムを構築する方法はこれだけではありません。この目標を達成する方法はたくさんありますが、これが私のやり方です。これがあなたのために働くという保証はありません!
1予備メモ
このチュートリアルでは、ホスト名server1.example.comとIPアドレス192.168.0.100を使用します。これらの設定はユーザーによって異なる場合があるため、必要に応じて置き換える必要があります。
rootとしてログインしていることを確認してください(入力
sudo su
rootになるには)、このチュートリアルのすべての手順をrootユーザーとして実行する必要があるためです。
2MySQLとphpMyAdminをインストールします
これはすべて、1つのコマンドでインストールできます:
aptitude install mysql-server mysql-client phpmyadmin apache2
次の質問があります:
MySQLの「root」ユーザーの新しいパスワード:<-yourrootsqlpassword
MySQLの「root」ユーザーのパスワードを繰り返します:<-yourrootsqlpassword
Webサーバーを自動的に再構成します:<-apache2
dbconfig-commonを使用してphpmyadminのデータベースを構成しますか? <-いいえ
3MySQLサポートを使用してPureFTPdをインストールする
Ubuntu 10.10の場合、事前構成されたpure-ftpd-mysqlパッケージが利用可能です。次のようにインストールします:
aptitude install pure-ftpd-mysql
次に、すべての仮想ユーザーがマップされるftpグループ(ftpgroup)とユーザー(ftpuser)を作成します。グループIDとユーザーID2001を、システムで無料の番号に置き換えます。
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
4PureFTPd用のMySQLデータベースを作成する
次に、pureftpdという名前のデータベースとpureftpdという名前のMySQLユーザーを作成します。このユーザーは、PureFTPdデーモンが後でpureftpdデータベースに接続するために使用します。
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;
お気づきかもしれませんが、やめます。コマンドMySQLシェルを終了し、Linuxシェルに戻りました。
ところで、(ftpサーバーシステムのホスト名はserver1.example.comであると想定しています)http://server1.example.com/phpmyadmin/でphpMyAdminにアクセスできます(server1の代わりにIPアドレスを使用することもできます) .example.com)をブラウザに表示し、ユーザーpureftpdとしてログインします。次に、データベースを確認できます。後で、phpMyAdminを使用してPureFTPdサーバーを管理できます。
5PureFTPdを構成する
/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") |
文字列ftpdpassを、MYSQLPassword行の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がユーザーのホームディレクトリを作成します。
最後に、ファイル/ etc / pure-ftpd / conf / DontResolveを作成します。このファイルには、文字列yesが含まれています:
echo "yes" > /etc/pure-ftpd/conf/DontResolve
これにより、PureFTPdはホスト名を検索しないため、接続が大幅に高速化され、帯域幅の使用量が削減されます。
その後、PureFTPdを再起動します:
/etc/init.d/pure-ftpd-mysql restart
6データベースにデータを入力してテストする
データベースにデータを入力するには、MySQLシェルを使用できます:
mysql -u root -p
USE pureftpd;
ここで、ステータス1(ftpアカウントがアクティブであることを意味します)、パスワードシークレット(MySQLのMD5関数を使用して暗号化されて保存されます)、UIDおよびGID 2001(ユーザーのユーザーIDとグループIDを使用/手順2の最後に作成したグループ!)、ホームディレクトリ/home/www.example.com、100KB/秒のアップロードおよびダウンロード帯域幅。 (キロバイト/秒)、および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クライアントプログラム(FileZilla、WS_FTP、SmartFTP、gFTPなど)を開き、接続を試みます。 server1.example.com(またはシステムのIPアドレス)を使用するホスト名として、ユーザー名はexampleuserであり、パスワードはシークレットです。
接続できれば-おめでとうございます!そうでない場合は、問題が発生しました。
さて、実行すると
ls -l /home
ディレクトリ/home/www.example.com(exampleuserのホームディレクトリ)が自動的に作成され、ftpuserとftpgroup(ステップ2の最後に作成したユーザー/グループ)によって所有されていることがわかります。
>[email protected]:~# ls -l /home
total 8
drwxr-xr-x 3 administrator administrator 4096 2010-10-11 17:45 administrator
drwxr-xr-x 2 ftpuser ftpgroup 4096 2010-11-24 17:37 www.example.com
[email protected]:~#
7データベース管理
ほとんどの人にとって、MySQLのグラフィカルなフロントエンドがあれば簡単です。したがって、phpMyAdmin(この例ではhttp://server1.example.com/phpmyadmin/の下)を使用して、pureftpdデータベースを管理することもできます。
新しいユーザーを作成する場合は常に、テーブルftpdにエントリを作成する必要があるため、このテーブルの列についてここで説明します。
ftpdテーブル:
- ユーザー:仮想PureFTPdユーザーの名前(例:exampleuser)。
- ステータス:0または1。0はアカウントが無効になっていることを意味し、ユーザーはログインできません。
- パスワード:仮想ユーザーのパスワード。 MySQLのMD5関数を使用して、暗号化されたパスワードをMD5文字列として保存してください。
- UID:手順2の最後に作成したftpユーザーのユーザーID(例:2001)。
- GID:ステップ2の最後に作成したftpグループのグループID(例:2001)。
- Dir:仮想PureFTPdユーザーのホームディレクトリ(例:/home/www.example.com)。存在しない場合は、新しいユーザーがFTP経由で初めてログインしたときに作成されます。仮想ユーザーはこのホームディレクトリに投獄されます。つまり、ホームディレクトリ外の他のディレクトリにアクセスすることはできません。
- ULBandwidth:仮想ユーザーのアップロード帯域幅(KB /秒)。 (キロバイト/秒)。 0は無制限を意味します。
- DLBandwidth:仮想ユーザーのダウンロード帯域幅(KB /秒)。 (キロバイト/秒)。 0は無制限を意味します。
- コメント:ここにコメントを入力できます(たとえば、内部管理用)。通常、このフィールドは空のままにします。
- ipaccess:このFTPアカウントへの接続を許可するIPアドレスをここに入力します。 *はすべてのIPアドレスが接続を許可されていることを意味します。
- QuotaSize:仮想ユーザーがFTPサーバーで使用できるMB単位のストレージスペース(ULBandwidthやDLBandwidthのようにKBではありません!)。 0は無制限を意味します。
- QuoteFiles:仮想ユーザーがFTPサーバーに保存できるファイルの量。 0は無制限を意味します。
8匿名FTP
匿名のftpアカウント(誰もがパスワードなしでログインできるftpアカウント)を作成する場合は、次のように実行できます。
まず、ユーザーftp(homedir / 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を作成します。ユーザーがアップロードできるが、そのディレクトリ内のファイルを表示またはダウンロードできないように、311の/ home / ftp/incomingディレクトリ権限を付与します。 / 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つのリンク
- PureFTPd:http://www.pureftpd.org/
- MySQL:http://www.mysql.com/
- phpMyAdmin:http://www.phpmyadmin.net/
- Ubuntu:http://www.ubuntu.com/