ConoHaとCentOS7でDBサーバー構築

前回の「【第2回】ConoHaとCentOS7でWebサーバー構築」の続きです。

今回はDBサーバーの構築を行いたいと思います。

 

環境

OS/ミドルウェア バージョン
CentOS 7.2.1511
Apache 2.4.6
PHP 5.4.16

 

1.MySQLデータベースをインストールする

はじめに、CentOS 7.2にMySQLをインストールするために公式サイトからリポジトリ追加していきます。

 

2.MySQLの初期パスワードを確認

[MySQLを起動]

MySQL 5.7では、初回起動と同時にテンポラリの初期パスワードが生成されるため、MySQLのログファイルから初期パスワードを確認する必要があります。

[ログファイルから初期パスワードを確認]

今回の構築では、初期パスワードが ApAyGSYnd0#< と出力されたので、こちらをもとに手順3でMySQLの初期設定を行っていきます。

 

3.MySQLのセキュリティ設定

rootユーザのパスワードなどを変更するため、次のコマンドで以下の変更を行っていきます。

[root ユーザのパスワードを設定]

[匿名ユーザーアカウントを削除]

[ローカルホスト以外からアクセス可能な root アカウントを削除]

[test データベースの削除]

 

4.MySQLにログインできるか確認

手順3で設定したパスワードでMySQLにログインできるか確認します。

上記のように表示され、下記のような状態ならログインは成功です。

[データベースの一覧]

まずは現在作成されているデータベースの一覧を取得する方法です。

SHOW DATABASES文を使います。書式は次の通りです。

 

5.設定ファイルの編集と起動設定

サービス提供時に突然データベースにログインできなくなることを防ぐため、パスワードの有効期限を0に設定します。
また、デフォルトの文字コードもUTF-8にしておきます。

[mysqld] 節に次のものを追加します。

最後に設定内容を反映させるためにMySQLを再起動し、次回の起動時以降自動で起動するように設定します。

[MySQLを再起動]

[MySQLの自動起動設定]

 

6.phpMyAdminをインストールする

MySQLデータベースをブラウザから簡単に操作できるようにするために、phpMyAdminをインストールします。
レンタルサーバーでは、phpMyAdminは最初から使えるようになっていますが、VPSでは自分でインストールする必要があります。

‘y’を入力しインストールを続けます。
インストール後、’完了しました!‘と表示されているのを確認して下さい。

 

※Apacheのバーションによって設定が異なるので…

[Apacheのバーションを確認]

※私の場合は、バージョンが2.4なので2.4で設定します。

[phpMyAdminの設定を変更]

cd コマンドで /etc/httpd/conf.d ディレクトリに移動し、
cpコマンドでphpMyAdmin.conf をphpMyAdmin.conf.old という名前でバックアップ用のコピーを作成して、
vim コマンドでphpMyAdmin.confを編集します。

[Require all grantedを追加]

これで、「あなたのパソコンを含む、どこからでもphpMyAdminにアクセスできるようにする
設定に変更することになります。

[すべて許可]

[すべて拒否]

ファイルを保存してvimを終了後、httpdを再起動すると設定が有効になります。

[httpdを再起動]

[phpMyAdminが使えるかどうか確認]
http://xxx.xxx.xxx.xxx/phpmyadmin (xxx.xxx.xxx.xxxはあなたのVPSのIPアドレス)
にブラウザからアクセスして、うまくログイン画面が表示できましたでしょうか?

さきほど設定したMySQL のrootユーザー名とパスワードを使ってログインできます。
もし、この画面が出ずに’Forbidden‘になる場合は、設定ファイルの記述が間違っているか、httpdを再起動していない可能性があります。もう一度設定を確認して下さい。

ここで、もう少しphpMyAdminの設定を変更して、より安全に使えるようにしましょう。phpMyAdminは便利なツールですが、たびたび脆弱性が指摘されており、外部からの悪意ある攻撃も多いです。万が一クラックされ中に入られてしまうと、大切なデータベースの中のデータが盗み見られてしまいます。

 

URLを変更する

http://xxx.xxx.xxx.xxx/phpmyadmin というURLは他人が推測しやすく「サーバーにphpMyAdmnがインストールされている」ということを外部に知られてしまうため、URLを分かりにくくします。
例えば、
http://xxx.xxx.xxx.xxx/phpmyadminpSFp7dhM5
のように意味不明な文字列をURLの最後にくっつけて、このURLでアクセスしたときのみphpmyadmのログイン画面が表示されるようにします。
第三者にはphpMyAdminをインストールしていることがばれにくくなりますので、これだけでphpMyAdminに対する攻撃はかなり減らせます。

では実際に設定変更します。
再びphpMyAdmin.confを編集します。

8〜9行目の記述を以下のように変更します。

これは、
http://xxx.xxx.xxx.xxx/phpmyadmin
のようなURLでアクセスすることを禁止して、代わりに
http://xxx.xxx.xxx.xxx/phpmyadminpSFp7dhM5
というURLでphpMyAdminにアクセスできるようにする設定です。

設定が終わったらhttpdを再起動します。

[httpdを再起動]

これで、http://xxx.xxx.xxx.xxx/phpmyadmin ではアクセスできず、
http://xxx.xxx.xxx.xxx/phpmyadminpSFp7dhM5 というバレにくいURLで運用することができます。

 

7.firewalldでファイアウォールの設定をする

CentOS7からファイアウォールの設定が「iptables」から「firewalld」に変更となりました。

[firewalldの開始と停止とステータス]

[firewalldコマンドですべてのゾーン情報を確認]

[firewalldコマンドで有効な設定を確認]

※私の場合、「dhcpv6-client」「ssh」は、ConoHaを申し込んでサーバーを追加したらデフォルトで入っていました。

「http」「https」は、Apacheをインストールした後で、設定しました。

なので今回追加するのは「mysql」

[設定追加]

[success]と表示される

[確認]

「mysql」が追加されました。

[ファイアウォール再起動]

[success]と表示される

 

8.データベース接続ユーザーの作成

[データベース接続ユーザーを作成コマンド]

  • GRANT文はユーザーに権限を付与するものになりますが、指定されたユーザーがまだ作成されていない場合は、ユーザーの作成も行われます。
  • 「GRANT」に続けて、付与する権限を指定します。「ALL」を指定すると、全ての権限が付与されるようになります。

    ただし、「ALL」には「GRANT OPTION」権限は含まれません。

  • 「ON」に続けて、権限を付与するデータベースとテーブルを「データベース名.テーブル名」の形で指定します。

    *.*」と指定すると、全てのデータベースのテーブルに権限が付与されるようになります。

  • 「TO」に続けて、権限を付与するユーザーを「‘ユーザー名’@’ホスト名’」の形で指定します。「’dev_user’@’%’」と指定すると、全てのホストから接続可能なユーザー「dev_user」に権限が付与されるようになります。

  • 「IDENTIFIED BY」に続けて、ユーザーのパスワードを指定します。

※MySQLへの外部からのアクセスを許可するには、ファイアウォールでもアクセスが許可されている必要があります。

データベース接続ユーザーの一覧の確認

[データベース接続ユーザーの一覧を確認するコマンド]

※MySQL 5.7.6でmysql.userテーブルのパスワードのカラム名がなんか変わったらしいので、上記のコマンドで確認。

詳しくはこちら参考 MySQL情報

「dev_user」が追加されました。

既存のデータベース接続ユーザーのGRANT文の確認

[既存のデータベース接続ユーザーのGRANT文を確認するコマンド]

ここではユーザー「’dev_user’@’%’」のGRANT文を確認するようにしています。

以上で、DBサーバーの構築が完了です。

 

【第1回】ConoHa申し込み手順〜CentOS7でサーバー構築

【第2回】ConoHaとCentOS7でWebサーバー構築

【第3回】ConoHaとCentOS7でDBサーバー構築

【第4回】ConoHaとCentOS7でGitLab構築

【第5回】ConoHaとCentOS7でCakePHPインストール方法

 

投稿者: samancha

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA