このドキュメントでは、実際のシステムユーザーではなく、MariaDB(MySQL互換)データベースの仮想ユーザーを使用するPureFTPdサーバーをインストールする方法について説明します。これははるかにパフォーマンスが高く、1台のマシンに数千人のFTPユーザーを配置できます。それに加えて、この設定でのクォータとアップロード/ダウンロード帯域幅制限の使用法を示します。パスワードは、MD5文字列として暗号化されてデータベースに保存されます。
MariaDBデータベースの管理には、このハウツーにもインストールされるphpMyAdminなどのウェブベースのツールを使用できます。 phpMyAdminは快適なグラフィカルインターフェイスです。つまり、コマンドラインをいじくり回す必要はありません。
このチュートリアルはCentOS7.2に基づいています。基本的な最小限のCentOS7.2システムをすでにセットアップしているはずです。
このハウツーは実用的なガイドとして意図されています。理論的背景については説明していません。それらは、Webの他の多くのドキュメントで扱われます。
このドキュメントには、いかなる種類の保証もありません。このようなシステムを構築する方法はこれだけではありません。この目標を達成する方法はたくさんありますが、これが私のやり方です。
1予備メモ
このチュートリアルでは、ホスト名server1.example.comとIPアドレス192.168.1.100を使用します。これらの設定はユーザーによって異なる場合があるため、必要に応じて置き換える必要があります。
2MySQLとphpMyAdminをインストールします
まず、このチュートリアルの過程でインストールする一部のパッケージが公式のCentOS 7.2リポジトリで利用できないため、CentOSシステムでEPELリポジトリを有効にします。
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
次に、このチュートリアルの過程でインストールするパッケージの多くが公式のCentOS 7リポジトリで利用できないため、CentOSシステムでEPELリポジトリを有効にします。
yum -y install epel-release
yum -y install yum-priorities
/etc/yum.repos.d/epel.repoを編集します...
nano /etc/yum.repos.d/epel.repo
...そして[epel]セクションにpriority=10という行を追加します:
[epel] name=Extra Packages for Enterprise Linux 7 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [...]
次に、システム上の既存のパッケージを更新します。
yum update
これで、Apache Webサーバー、PHP、MariaDB、およびphpMyAdminを次のようにインストールできます。
yum -y install mariadb mariadb-server phpmyadmin httpd php
次に、phpMyAdminを設定します。 phpMyAdminがローカルホストからだけでなく接続を許可するようにApache構成を変更します(
nano /etc/httpd/conf.d/phpMyAdmin.conf
ファイルが次のようになるようにします:
# phpMyAdmin - Web based MySQL browser written in php # # Allows only localhost by default # # But allowing phpMyAdmin to anyone other than localhost should be considered # dangerous unless properly secured by SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin <Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8 # <IfModule mod_authz_core.c> # # Apache 2.4 # <RequireAny> # Require ip 127.0.0.1 # Require ip ::1 # </RequireAny> # </IfModule> # <IfModule !mod_authz_core.c> # # Apache 2.2 # Order Deny,Allow # # Deny from All # Allow from 127.0.0.1 Options Indexes AllowOverride None Require all granted # Allow from ::1 # </IfModule> </Directory> <Directory /usr/share/phpMyAdmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 127.0.0.1 Require ip ::1 </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> # These directories do not require access over HTTP - taken from the original # phpMyAdmin upstream tarball # <Directory /usr/share/phpMyAdmin/libraries/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/lib/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/frames/> Order Deny,Allow Deny from All Allow from None </Directory> # This configuration prevents mod_security at phpMyAdmin directories from # filtering SQL etc. This may break your mod_security implementation. # #<IfModule mod_security.c> # <Directory /usr/share/phpMyAdmin/> # SecRuleInheritance Off # </Directory> #</IfModule>
次に、MySQLとApacheのシステム起動リンクを作成し(システムが起動するたびに両方が自動的に起動するようにします)、両方のサービスを開始します。
CentOSファイアウォール「firewalld」がサーバーにインストールされたら、httpポートとhttpsポートを開きます。
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
次に、MariaDBとAapcheを起動します。
systemctl enable mariadb.service
systemctl start mariadb.service
systemctl enable httpd.service
systemctl start httpd.service
MySQLユーザーrootのパスワードを作成します(yourmariadbpasswordを使用するパスワードに置き換えます):
mysql_secure_installation
[[メール保護]〜]#mysql_secure_installation
/ usr / bin / mysql_secure_installation:379行目:find_mysql_client:コマンドが見つかりません
注:このスクリプトのすべての部分を実行することをすべてのMariaDBに推奨します
本番環境で使用されているサーバー!各ステップを注意深くお読みください!
MariaDBにログインして保護するには、rootユーザーの現在の
パスワードが必要です。 MariaDBをインストールしたばかりで、
rootパスワードをまだ設定していない場合、パスワードは空白になります。
ここで、Enterキーを押すだけです。
rootの現在のパスワードを入力してください(noneの場合は入力してください): <-ENTER
OK、正常に使用されたパスワード、次に進みます...
rootパスワードを設定すると、適切な許可なしに誰もMariaDB
rootユーザーにログインできなくなります。
rootパスワードを設定しますか? [Y / n] <-ENTER
新しいパスワード:
新しいパスワードを再入力してください:
パスワードが正常に更新されました!
特権テーブルを再読み込みしています..
...成功しました!
デフォルトでは、MariaDBインストールには匿名ユーザーがあり、誰でも
ユーザーアカウントを作成せずに
MariaDBにログインできます。
これはテストのみを目的としており、インストールを少しスムーズにすることを目的としています。
本番環境に移行する前に、それらを削除する必要があります。
匿名ユーザーを削除しますか? [Y / n] <-ENTER
...成功!
通常、rootは「localhost」からの接続のみを許可する必要があります。これにより、
誰かがネットワークからrootパスワードを推測できないようになります。
rootログインをリモートで禁止しますか? [Y / n] <-ENTER
...成功!
デフォルトでは、MariaDBには「test」という名前のデータベースが付属しており、誰でもアクセスできます。
これもテストのみを目的としているため、本番環境に移行する前に
削除する必要があります。
テストデータベースを削除してアクセスしますか? [Y / n] <-ENTER
-テストデータベースを削除しています...
...成功!
-テストデータベースの権限を削除しています...
...成功!
特権テーブルをリロードすると、これまでに行ったすべての変更がすぐに有効になります。
特権テーブルを今すぐリロードしますか? [Y / n] <-ENTER
...成功!
クリーンアップ...
すべて完了!上記のすべての手順を完了すると、MariaDBのインストールは安全になります。
MariaDBをご利用いただきありがとうございます!
[[メール保護]〜]#
3 MySQL/MariaDBサポートを使用してPureFTPdをインストールします
CentOS PureFTPdパッケージは、MySQL、PostgreSQL、LDAPなどのさまざまなバックエンドをサポートします。したがって、通常のPureFTPdパッケージをインストールするだけです。
yum -y install pure-ftpd
次に、すべての仮想ユーザーがマップされるftpグループ(ftpgroup)とユーザー(ftpuser)を作成します。グループIDとユーザーID2001を、システムで無料の番号に置き換えます。
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
ftpサービスは、次のようにfirewall-cmdによって許可される必要があります。
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
4PureFTPdのデータベースを作成する
次に、pureftpdという名前のデータベースとpureftpdという名前のMariaDBユーザーを作成します。このユーザーは、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)
) ENGINE=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/pure-ftpd.confを編集し、ChrootEveryone、MySQLConfigFile、およびCreateHomeDirの行が有効になっていて、次のようになっていることを確認します。
nano /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
nano /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")
文字列ftpdpassを、MYSQLPassword行のMySQLユーザーpureftpdの実際のパスワードに置き換えてください。 MYSQLCryptメソッドとしてmd5を使用していることに注意してください。つまり、プレーンテキストのパスワードを使用するよりもはるかに安全なMD5文字列としてユーザーのパスワードをデータベースに保存します。
次に、PureFTPdのシステム起動リンクを作成して開始します。
systemctl enable pure-ftpd.service
systemctl start pure-ftpd.service
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クライアントプログラム(Windowsシステムの場合はFileZilla、Linuxデスクトップの場合はgFTPなど)を開き、接続を試みます。 server1.example.com(またはシステムのIPアドレス)を使用するホスト名として、ユーザー名はexampleuserであり、パスワードはシークレットです。
接続できれば-おめでとうございます!そうでない場合は、問題が発生しました。
さて、実行すると
ls -l /home
ディレクトリ/home/www.example.com(exampleuserのホームディレクトリ)が自動的に作成され、ftpuserとftpgroup(ステップ2の最後に作成したユーザー/グループ)によって所有されていることがわかります。
>[[email protected] ~]# ls -l /home
total 0
drwx------. 2 administrator administrator 59 Jun 21 16:13 administrator
drwxr-xr-x. 2 ftpuser ftpgroup 22 Jul 4 18:30 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というグループが必要です。どちらもpure-ftpdパッケージをインストールすると自動的に作成されるため、手動で作成する必要はありません。ただし、ftpのホームディレクトリはデフォルトで/ var / ftpですが、匿名のftpディレクトリを/ home / ftpに作成したいと思います(通常のユーザーのftpディレクトリも/ homeにあります(例:/home/www.example)。 com)。ただし、もちろん、必要に応じて、匿名ftpに/ var/ftpディレクトリを使用できます。
/ home / ftpを使用する場合は、/ etc / passwdを開き、ftpユーザーのhomedirを/ var/ftpから/home/ ftpに変更します(/ var / ftpを使用する場合は、これを行わないでください):
nano /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を作成します。ユーザーがアップロードできるが、そのディレクトリ内のファイルを表示またはダウンロードできないように、311の/ home / ftp/incomingディレクトリ権限を付与します。 / 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を開き、次の設定が含まれていることを確認します。
nano /etc/pure-ftpd/pure-ftpd.conf
[...] NoAnonymous no [...] AntiWarez no [...] AnonymousBandwidth 8 [...] AnonymousCantUpload no [...]
(AnonymousBandwidth設定はオプションです。匿名ユーザーのアップロードとダウンロードの帯域幅を制限できます。8は8 KB /秒を意味します。帯域幅を制限したくない場合は、任意の値を使用するか、行をコメントアウトしてください。)
最後に、PureFTPdを再起動します:
systemctl restart pure-ftpd.service
9このCentOS7.2サーバーを仮想マシンとしてダウンロード
このセットアップは、howtoforgeサブスクライバー向けにova / ovf形式(VMWareおよびVirtualboxと互換性があります)の仮想マシンのダウンロードとして利用できます。
VMのログインの詳細
- ルートパスワードは:howtoforge
- 「管理者」ユーザーのパスワードは次のとおりです:howtoforge
最初のログイン時に両方のパスワードを変更してください。
- VMのIPアドレスは192.168.1.100です
10リンク
- PureFTPd:http://www.pureftpd.org/
- MySQL:http://www.mysql.com/
- phpMyAdmin:http://www.phpmyadmin.net/
- CentOS:http://centos.org/