GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS 7.0でのPureFTPdとMySQL(クォータと帯域幅の管理を含む)を使用した仮想ホスティング

このチュートリアルはこれらのOSバージョン用に存在します

  • CentOS 7.2
  • CentOS 7
  • CentOS 6.5
  • CentOS 6.4
  • CentOS 6.2
  • CentOS 5.3

このページについて

  1. 1予備的注意
  2. 2MySQLとphpMyAdminをインストールします
  3. 3MySQLサポートを使用してPureFTPdをインストールする
  4. 4PureFTPd用のMySQLデータベースを作成する
  5. 5PureFTPdを構成する
  6. 6データベースにデータを入力してテストする
  7. 7データベース管理
    1. ftpdテーブル:
  • 8匿名FTP
  • 9つのリンク
  • このドキュメントでは、実際のシステムユーザーの代わりにMySQLデータベースの仮想ユーザーを使用するPureFTPdサーバーをインストールする方法について説明します。これははるかにパフォーマンスが高く、1台のマシンに数千人のFTPユーザーを配置できます。それに加えて、この設定でのクォータとアップロード/ダウンロード帯域幅制限の使用法を示します。パスワードは、MD5文字列として暗号化されてデータベースに保存されます。

    MySQLデータベースの管理には、このハウツーにもインストールされるphpMyAdminなどのWebベースのツールを使用できます。 phpMyAdminは快適なグラフィカルインターフェイスです。つまり、コマンドラインをいじくり回す必要はありません。

    このチュートリアルはCentOS7.0に基づいています。基本的な最小限のCentOS7システムをすでにセットアップしているはずです。

    このハウツーは実用的なガイドとして意図されています。理論的背景については説明していません。それらは、Webの他の多くのドキュメントで扱われます。

    このドキュメントには、いかなる種類の保証もありません。このようなシステムを構築する方法はこれだけではありません。この目標を達成する方法はたくさんありますが、これが私のやり方です。

    1予備メモ

    このチュートリアルでは、ホスト名server1.example.comとIPアドレス192.168.0.100を使用します。これらの設定はユーザーによって異なる場合があるため、必要に応じて置き換える必要があります。

    2MySQLとphpMyAdminをインストールします

    まず、このチュートリアルの過程でインストールする一部のパッケージが公式のCentOS 7.0リポジトリで利用できないため、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

    これで、MySQLとphpMyAdminを次のようにインストールできます。

    yum install mariadb mariadb-server phpmyadmin httpd php

    次に、phpMyAdminを設定します。 phpMyAdminがローカルホストからだけでなく接続を許可するようにApache構成を変更します(スタンザのすべてをコメントアウトし、「Require allgranted」という行を追加します):

    vi /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/>
    #  <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のシステム起動リンクを作成し(システムが起動するたびに両方が自動的に起動するように)、両方のサービスを開始します。さらに、両方のサービスがファイアウォールで許可されている必要があります:

    firewall-cmd --permanent --zone=public --add-service=http
    firewall-cmd --permanent --zone=public --add-service=https
    firewall-cmd --reload
    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キーを押すだけです。 <-ENTER
    rootの現在のパスワードを入力してください(noneの場合は入力してください): <-ENTER
    OK、正常に使用されたパスワード、次に進みます...

    rootパスワードを設定すると、適切な許可なしに誰もMariaDB
    rootユーザーにログインできなくなります。

    rootパスワードを設定しますか? [Y / n] <-ENTER
    新しいパスワード: <-yourmariadbpassword
    新しいパスワードを再入力してください: <-yourmariadbpassword
    パスワードが正常に更新されました!
    特権テーブルを再読み込みしています..
    ...成功しました!


    デフォルトでは、MariaDBインストールには匿名ユーザーがあり、誰でも
    ユーザーアカウントを作成せずに
    MariaDBにログインできます。
    これはテストのみを目的としており、インストールを少しスムーズにすることを目的としています。

    本番環境に移行する前に、それらを削除する必要があります。

    匿名ユーザーを削除しますか? [Y / n] <-ENTER
    ...成功!

    通常、rootは「localhost」からの接続のみを許可する必要があります。これにより、
    誰かがネットワークからrootパスワードを推測できないようになります。

    rootログインをリモートで禁止しますか? [Y / n] <-ENTER
    ...成功!

    デフォルトでは、MariaDBには「test」という名前のデータベースが付属しており、誰でもアクセスできます。
    これもテストのみを目的としているため、本番環境に移行する前に
    削除する必要があります。

    テストデータベースを削除してアクセスしますか? [Y / n] <-ENTER
    -テストデータベースを削除しています...
    ...成功!
    -テストデータベースの権限を削除しています...
    ...成功!

    特権テーブルをリロードすると、これまでに行ったすべての変更がすぐに有効になります。

    特権テーブルを今すぐリロードしますか? [Y / n] <-ENTER
    ...成功!

    クリーンアップ...

    すべて完了!上記のすべての手順を完了すると、MariaDBのインストールは安全になります。

    MariaDBをご利用いただきありがとうございます!
    [[メール保護]〜]#

    3MySQLサポートを使用してPureFTPdをインストールする

    CentOS PureFTPdパッケージは、MySQL、PostgreSQL、LDAPなどのさまざまなバックエンドをサポートします。したがって、通常のPureFTPdパッケージをインストールするだけです。

    yum 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用の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)
    ) 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の行が有効になっていて、次のようになっていることを確認します。

    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")

    文字列ftpdpassを、MYSQLPassword行のMySQLユーザーpureftpdの実際のパスワードに置き換えてください。 MYSQLCryptメソッドとしてmd5を使用していることに注意してください。つまり、プレーンテキストのパスワードを使用するよりもはるかに安全なMD5文字列としてユーザーのパスワードをデータベースに保存します。

    次に、PureFTPdのシステム起動リンクを作成して開始します。

    systemctl enable pure-ftpd.service
    systemctl enable 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システムの場合はWS_FTPやSmartFTP、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 Sep 26 10:35 administrator
    drwxr-xr-x. 2 ftpuser       ftpgroup      22 Sep 26 12:07 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を使用する場合は、これを行わないでください):

    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を作成します。ユーザーがアップロードできるが、そのディレクトリ内のファイルを表示またはダウンロードできないように、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を開き、次の設定が含まれていることを確認します。

    vi /etc/pure-ftpd/pure-ftpd.conf
    [...]
    NoAnonymous                 no
    [...]
    AntiWarez                   no
    [...]
    AnonymousBandwidth            8
    [...]
    AnonymousCantUpload         no
    [...]

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

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

    systemctl restart pure-ftpd.service

    • PureFTPd:http://www.pureftpd.org/
    • MySQL:http://www.mysql.com/
    • phpMyAdmin:http://www.phpmyadmin.net/
    • CentOS:http://centos.org/

    Cent OS
    1. Ubuntu 14.04LTSでのProftpdとMySQL(クォータを含む)を使用した仮想ホスティング

    2. CentOS 7.2上のPureFTPd、MariaDB、および仮想ユーザー(クォータおよび帯域幅管理を含む)を備えたFTPサーバー

    3. Ubuntu 7.10(Gutsy Gibbon)でのPureFTPdとMySQL(クォータと帯域幅の管理を含む)を使用した仮想ホスティング

    1. Ubuntu 8.04 LTSでのProftpdとMySQL(クォータを含む)を使用した仮想ホスティング

    2. Ubuntu 8.10(Intrepid Ibex)でのPureFTPdとMySQL(クォータと帯域幅の管理を含む)を使用した仮想ホスティング

    3. Ubuntu 8.10でのProftpdとMySQL(クォータを含む)を使用した仮想ホスティング

    1. Ubuntu 9.04(Jaunty Jackalope)でのPureFTPdとMySQL(クォータと帯域幅の管理を含む)を使用した仮想ホスティング

    2. Ubuntu 9.10(Karmic Koala)でのPureFTPdとMySQL(クォータと帯域幅の管理を含む)を使用した仮想ホスティング

    3. Ubuntu 10.10(Maverick Meerkat)でのPureFTPdとMySQL(クォータと帯域幅の管理を含む)を使用した仮想ホスティング