前回の「【第2回】ConoHaとCentOS7でWebサーバー構築」の続きです。
今回はDBサーバーの構築を行いたいと思います。
環境
OS/ミドルウェア | バージョン |
---|---|
CentOS | 7.2.1511 |
Apache | 2.4.6 |
PHP | 5.4.16 |
1.MySQLデータベースをインストールする
はじめに、CentOS 7.2にMySQLをインストールするために公式サイトからリポジトリ追加していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 公式サイトからリポジトリ追加 # rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm // MySQLのインストール # yum install -y mysql-community-server // mysql server のバージョンを確認 # mysqld --version mysqld Ver 5.7.17 for Linux on x86_64 (MySQL Community Server (GPL)) // mysql client のバージョンを確認 # mysql --version mysql Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper |
2.MySQLの初期パスワードを確認
[MySQLを起動]
1 |
# systemctl start mysqld.service |
MySQL 5.7では、初回起動と同時にテンポラリの初期パスワードが生成されるため、MySQLのログファイルから初期パスワードを確認する必要があります。
1 2 3 4 |
// パスワードを空入力してログインすることができない # mysql -u root -p Enter password: 空のまま[Enter] ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) |
[ログファイルから初期パスワードを確認]
1 2 3 |
// 初期パスワードを確認 # cat /var/log/mysqld.log | grep 'temporary password' 2017-01-10T03:57:56.856014Z 1 [Note] A temporary password is generated for root@localhost: ApAyGSYnd0#< |
今回の構築では、初期パスワードが ApAyGSYnd0#< と出力されたので、こちらをもとに手順3でMySQLの初期設定を行っていきます。
3.MySQLのセキュリティ設定
rootユーザのパスワードなどを変更するため、次のコマンドで以下の変更を行っていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# mysql_secure_installation Securing the MySQL server deployment. // ここでログファイルから取得した初期パスワードを入力します。 Enter password for user root: The existing password for the user account root has expired. Please set a new password. // root ユーザの新規パスワードを入力します。 New password: パスワード入力 // 確認のためもう一度入力します。 Re-enter new password: パスワード入力 |
[root ユーザのパスワードを設定]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
The 'validate_password' plugin is installed on the server. The subsequent steps will run with the existing configuration of the plugin. Using existing password for root. Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : y // root ユーザの新規パスワードを入力します。 New password: 上記で入力したパスワード // 確認のためもう一度入力します。 Re-enter new password: 上記で入力したパスワード Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. |
[匿名ユーザーアカウントを削除]
1 2 3 4 5 6 7 8 |
// 匿名ユーザーアカウントを削除 Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. |
[ローカルホスト以外からアクセス可能な root アカウントを削除]
1 2 3 4 5 6 7 8 |
// ローカルホスト以外からアクセス可能な root アカウントを削除 Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. |
[test データベースの削除]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// test データベースの削除 Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done! |
4.MySQLにログインできるか確認
手順3で設定したパスワードでMySQLにログインできるか確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# mysql -u root -p // 設定したパスワード Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.7.17 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. |
上記のように表示され、下記のような状態ならログインは成功です。
[データベースの一覧]
まずは現在作成されているデータベースの一覧を取得する方法です。
SHOW DATABASES文を使います。書式は次の通りです。
1 |
mysql> show databases; |
5.設定ファイルの編集と起動設定
サービス提供時に突然データベースにログインできなくなることを防ぐため、パスワードの有効期限を0に設定します。
また、デフォルトの文字コードもUTF-8にしておきます。
1 |
# vim /etc/my.cnf |
[mysqld] 節に次のものを追加します。(ファイルの一番最後に追加)
1 2 3 4 |
[mysqld] ...(略) character-set-server = utf8 default_password_lifetime = 0 |
最後に設定内容を反映させるためにMySQLを再起動し、次回の起動時以降自動で起動するように設定します。
[MySQLを再起動]
1 |
# systemctl restart mysqld.service |
[MySQLの自動起動設定]
1 2 3 4 5 |
# systemctl enable mysqld.service # systemctl list-unit-files -t service | grep mysqld // 下記が表示される mysqld.service enabled mysqld@.service disabled |
6.phpMyAdminをインストールする
MySQLデータベースをブラウザから簡単に操作できるようにするために、phpMyAdminをインストールします。
レンタルサーバーでは、phpMyAdminは最初から使えるようになっていますが、VPSでは自分でインストールする必要があります。
1 2 3 4 5 |
# yum install phpmyadmin ・・・ 総ダウンロード容量: 9.1 M インストール容量: 43 M Is this ok [y/d/N]: y |
‘y’を入力しインストールを続けます。
インストール後、’完了しました!‘と表示されているのを確認して下さい。
※phpのバージョンをアップデートしているとエラーが発生する。私の場合は、5.4 → 7.0にしていたらエラーでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: ftp.tsukuba.wide.ad.jp * epel-debuginfo: mirror.dmmlabs.jp * epel-source: ftp.tsukuba.wide.ad.jp * extras: ftp.iij.ad.jp * remi-safe: mirrors.mediatemple.net * updates: ftp.iij.ad.jp Resolving Dependencies --> Running transaction check ---> Package phpMyAdmin.noarch 0:4.4.15.10-2.el7 will be installed --> Processing Dependency: php-mysqli >= 5.3.7 for package: phpMyAdmin-4.4.15.10-2.el7.noarch --> Processing Dependency: php-php-gettext for package: phpMyAdmin-4.4.15.10-2.el7.noarch --> Processing Dependency: php-tcpdf for package: phpMyAdmin-4.4.15.10-2.el7.noarch --> Processing Dependency: php-tcpdf-dejavu-sans-fonts for package: phpMyAdmin-4.4.15.10-2.el7.noarch --> Processing Dependency: php-zip for package: phpMyAdmin-4.4.15.10-2.el7.noarch --> Running transaction check ---> Package php-mysql.x86_64 0:5.4.16-43.el7_4.1 will be installed --> Processing Dependency: php-pdo(x86-64) = 5.4.16-43.el7_4.1 for package: php-mysql-5.4.16-43.el7_4.1.x86_64 ---> Package php-php-gettext.noarch 0:1.0.12-1.el7 will be installed ---> Package php-tcpdf.noarch 0:6.2.13-1.el7 will be installed --> Processing Dependency: php-bcmath for package: php-tcpdf-6.2.13-1.el7.noarch --> Processing Dependency: php-composer(fedora/autoloader) for package: php-tcpdf-6.2.13-1.el7.noarch --> Processing Dependency: php-posix for package: php-tcpdf-6.2.13-1.el7.noarch --> Processing Dependency: php-tidy for package: php-tcpdf-6.2.13-1.el7.noarch ---> Package php-tcpdf-dejavu-sans-fonts.noarch 0:6.2.13-1.el7 will be installed --> Processing Dependency: dejavu-sans-fonts for package: php-tcpdf-dejavu-sans-fonts-6.2.13-1.el7.noarch ---> Package phpMyAdmin.noarch 0:4.4.15.10-2.el7 will be installed --> Processing Dependency: php-zip for package: phpMyAdmin-4.4.15.10-2.el7.noarch --> Running transaction check ---> Package dejavu-sans-fonts.noarch 0:2.33-6.el7 will be installed --> Processing Dependency: dejavu-fonts-common = 2.33-6.el7 for package: dejavu-sans-fonts-2.33-6.el7.noarch ---> Package php-bcmath.x86_64 0:5.4.16-43.el7_4.1 will be installed --> Processing Dependency: php-common(x86-64) = 5.4.16-43.el7_4.1 for package: php-bcmath-5.4.16-43.el7_4.1.x86_64 ---> Package php-fedora-autoloader.noarch 0:1.0.0-1.el7 will be installed ---> Package php-mysql.x86_64 0:5.4.16-43.el7_4.1 will be installed --> Processing Dependency: php-pdo(x86-64) = 5.4.16-43.el7_4.1 for package: php-mysql-5.4.16-43.el7_4.1.x86_64 ---> Package php-process.x86_64 0:5.4.16-43.el7_4.1 will be installed --> Processing Dependency: php-common(x86-64) = 5.4.16-43.el7_4.1 for package: php-process-5.4.16-43.el7_4.1.x86_64 ---> Package php-tidy.x86_64 0:5.4.16-7.el7 will be installed --> Processing Dependency: php(zend-abi) = 20100525-64 for package: php-tidy-5.4.16-7.el7.x86_64 --> Processing Dependency: php(api) = 20100412-64 for package: php-tidy-5.4.16-7.el7.x86_64 --> Processing Dependency: libtidy-0.99.so.0()(64bit) for package: php-tidy-5.4.16-7.el7.x86_64 ---> Package phpMyAdmin.noarch 0:4.4.15.10-2.el7 will be installed --> Processing Dependency: php-zip for package: phpMyAdmin-4.4.15.10-2.el7.noarch --> Running transaction check ---> Package compat-libtidy.x86_64 0:0.99.0-37.20091203.el7 will be installed ---> Package dejavu-fonts-common.noarch 0:2.33-6.el7 will be installed ---> Package php-bcmath.x86_64 0:5.4.16-43.el7_4.1 will be installed --> Processing Dependency: php-common(x86-64) = 5.4.16-43.el7_4.1 for package: php-bcmath-5.4.16-43.el7_4.1.x86_64 ---> Package php-mysql.x86_64 0:5.4.16-43.el7_4.1 will be installed --> Processing Dependency: php-pdo(x86-64) = 5.4.16-43.el7_4.1 for package: php-mysql-5.4.16-43.el7_4.1.x86_64 ---> Package php-process.x86_64 0:5.4.16-43.el7_4.1 will be installed --> Processing Dependency: php-common(x86-64) = 5.4.16-43.el7_4.1 for package: php-process-5.4.16-43.el7_4.1.x86_64 ---> Package php-tidy.x86_64 0:5.4.16-7.el7 will be installed --> Processing Dependency: php(zend-abi) = 20100525-64 for package: php-tidy-5.4.16-7.el7.x86_64 --> Processing Dependency: php(api) = 20100412-64 for package: php-tidy-5.4.16-7.el7.x86_64 ---> Package phpMyAdmin.noarch 0:4.4.15.10-2.el7 will be installed --> Processing Dependency: php-zip for package: phpMyAdmin-4.4.15.10-2.el7.noarch --> Finished Dependency Resolution Error: Package: php-tidy-5.4.16-7.el7.x86_64 (epel) Requires: php(api) = 20100412-64 Installed: php-common-7.0.28-1.el7.remi.x86_64 (@remi-php70) php(api) = 20151012-64 Available: php-common-5.4.16-42.el7.x86_64 (base) php(api) = 20100412-64 Available: php-common-5.4.16-43.el7_4.x86_64 (updates) php(api) = 20100412-64 Available: php-common-5.4.16-43.el7_4.1.x86_64 (updates) php(api) = 20100412-64 Error: Package: php-mysql-5.4.16-43.el7_4.1.x86_64 (updates) Requires: php-pdo(x86-64) = 5.4.16-43.el7_4.1 Installed: php-pdo-7.0.28-1.el7.remi.x86_64 (@remi-php70) php-pdo(x86-64) = 7.0.28-1.el7.remi Available: php-pdo-5.4.16-42.el7.x86_64 (base) php-pdo(x86-64) = 5.4.16-42.el7 Available: php-pdo-5.4.16-43.el7_4.x86_64 (updates) php-pdo(x86-64) = 5.4.16-43.el7_4 Available: php-pdo-5.4.16-43.el7_4.1.x86_64 (updates) php-pdo(x86-64) = 5.4.16-43.el7_4.1 Error: Package: php-process-5.4.16-43.el7_4.1.x86_64 (updates) Requires: php-common(x86-64) = 5.4.16-43.el7_4.1 Installed: php-common-7.0.28-1.el7.remi.x86_64 (@remi-php70) php-common(x86-64) = 7.0.28-1.el7.remi Available: php-common-5.4.16-42.el7.x86_64 (base) php-common(x86-64) = 5.4.16-42.el7 Available: php-common-5.4.16-43.el7_4.x86_64 (updates) php-common(x86-64) = 5.4.16-43.el7_4 Available: php-common-5.4.16-43.el7_4.1.x86_64 (updates) php-common(x86-64) = 5.4.16-43.el7_4.1 Error: Package: php-bcmath-5.4.16-43.el7_4.1.x86_64 (updates) Requires: php-common(x86-64) = 5.4.16-43.el7_4.1 Installed: php-common-7.0.28-1.el7.remi.x86_64 (@remi-php70) php-common(x86-64) = 7.0.28-1.el7.remi Available: php-common-5.4.16-42.el7.x86_64 (base) php-common(x86-64) = 5.4.16-42.el7 Available: php-common-5.4.16-43.el7_4.x86_64 (updates) php-common(x86-64) = 5.4.16-43.el7_4 Available: php-common-5.4.16-43.el7_4.1.x86_64 (updates) php-common(x86-64) = 5.4.16-43.el7_4.1 Error: Package: phpMyAdmin-4.4.15.10-2.el7.noarch (epel) Requires: php-zip Available: php-common-5.4.16-42.el7.x86_64 (base) php-zip Available: php-common-5.4.16-43.el7_4.x86_64 (updates) php-zip Available: php-common-5.4.16-43.el7_4.1.x86_64 (updates) php-zip Installed: php-common-7.0.28-1.el7.remi.x86_64 (@remi-php70) Not found Error: Package: php-tidy-5.4.16-7.el7.x86_64 (epel) Requires: php(zend-abi) = 20100525-64 Installed: php-common-7.0.28-1.el7.remi.x86_64 (@remi-php70) php(zend-abi) = 20151012-64 Available: php-common-5.4.16-42.el7.x86_64 (base) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-43.el7_4.x86_64 (updates) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-43.el7_4.1.x86_64 (updates) php(zend-abi) = 20100525-64 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest |
★対処方法
下記2つのコマンドを順番に行ったら、私の場合は無事にインストールされました。
参考サイト → CentOS7、Apache2.4、PHP7、MySQL5.7にてphpMyAdminがインストールされません
1 2 |
# yum --enablerepo=remi-php70 update # yum --enablerepo=remi-php70 install phpmyadmin |
※Apacheのバーションによって設定が異なるので…
[Apacheのバーションを確認]
1 2 3 |
# httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Nov 14 2016 18:04:44 |
※私の場合は、バージョンが2.4なので2.4で設定します。
[phpMyAdminの設定を変更]
1 2 3 |
# cd /etc/httpd/conf.d # cp phpMyAdmin.conf phpMyAdmin.conf.old # vim phpMyAdmin.conf |
cd コマンドで /etc/httpd/conf.d ディレクトリに移動し、
cpコマンドでphpMyAdmin.conf をphpMyAdmin.conf.old という名前でバックアップ用のコピーを作成して、
vim コマンドでphpMyAdmin.confを編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<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 Allow from ::1 </IfModule> </Directory> |
[Require all grantedを追加]
1 2 3 4 5 6 |
# Apache 2.4 <RequireAny> Require ip 127.0.0.1 Require ip ::1 Require all granted </RequireAny> |
これで、「あなたのパソコンを含む、どこからでもphpMyAdminにアクセスできるようにする」
設定に変更することになります。
[すべて許可]
1 |
Require all granted |
[すべて拒否]
1 |
Require all denied |
ファイルを保存してvimを終了後、httpdを再起動すると設定が有効になります。
[httpdを再起動]
1 |
# systemctl restart httpd.service |
[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を編集します。
1 2 |
# cd /etc/httpd/conf.d # vim phpMyAdmin.conf |
8〜9行目の記述を以下のように変更します。
1 2 3 |
#Alias /phpMyAdmin /usr/share/phpMyAdmin #Alias /phpmyadmin /usr/share/phpMyAdmin Alias /phpmyadminpSFp7dhM5 /usr/share/phpMyAdmin |
これは、
http://xxx.xxx.xxx.xxx/phpmyadmin
のようなURLでアクセスすることを禁止して、代わりに
http://xxx.xxx.xxx.xxx/phpmyadminpSFp7dhM5
というURLでphpMyAdminにアクセスできるようにする設定です。
設定が終わったらhttpdを再起動します。
[httpdを再起動]
1 |
# systemctl restart httpd.service |
これで、http://xxx.xxx.xxx.xxx/phpmyadmin ではアクセスできず、
http://xxx.xxx.xxx.xxx/phpmyadminpSFp7dhM5 というバレにくいURLで運用することができます。
7.firewalldでファイアウォールの設定をする
CentOS7からファイアウォールの設定が「iptables」から「firewalld」に変更となりました。
[firewalldの開始と停止とステータス]
1 2 3 4 5 6 7 8 |
// ステータス # systemctl status firewalld // 開始 # systemctl start firewalld // 停止 # systemctl stop firewalld |
[firewalldコマンドですべてのゾーン情報を確認]
1 |
# firewall-cmd --list-all-zones |
[firewalldコマンドで有効な設定を確認]
1 2 |
# firewall-cmd --list-services --zone=public --permanent dhcpv6-client http https ssh |
※私の場合、「dhcpv6-client」「ssh」は、ConoHaを申し込んでサーバーを追加したらデフォルトで入っていました。
「http」「https」は、Apacheをインストールした後で、設定しました。
なので今回追加するのは「mysql」
[設定追加]
1 |
# firewall-cmd --add-service=mysql --zone=public --permanent |
[success]と表示される
[確認]
1 2 |
# firewall-cmd --list-services --zone=public --permanent dhcpv6-client http https mysql ssh |
「mysql」が追加されました。
[ファイアウォール再起動]
1 |
# firewall-cmd --reload |
[success]と表示される
8.データベース接続ユーザーの作成
[データベース接続ユーザーを作成コマンド]
1 |
mysql> GRANT ALL ON *.* TO 'ユーザー名'@'%' IDENTIFIED BY 'パスワード' WITH GRANT OPTION; |
- GRANT文はユーザーに権限を付与するものになりますが、指定されたユーザーがまだ作成されていない場合は、ユーザーの作成も行われます。
-
「GRANT」に続けて、付与する権限を指定します。「ALL」を指定すると、全ての権限が付与されるようになります。
ただし、「ALL」には「GRANT OPTION」権限は含まれません。
-
「ON」に続けて、権限を付与するデータベースとテーブルを「データベース名.テーブル名」の形で指定します。
「*.*」と指定すると、全てのデータベースのテーブルに権限が付与されるようになります。
-
「TO」に続けて、権限を付与するユーザーを「‘ユーザー名’@’ホスト名’」の形で指定します。「’dev_user’@’%’」と指定すると、全てのホストから接続可能なユーザー「dev_user」に権限が付与されるようになります。
- 「IDENTIFIED BY」に続けて、ユーザーのパスワードを指定します。
※MySQLへの外部からのアクセスを許可するには、ファイアウォールでもアクセスが許可されている必要があります。
データベース接続ユーザーの一覧の確認
[データベース接続ユーザーの一覧を確認するコマンド]
1 |
mysql> select Host, User from mysql.user; |
※MySQL 5.7.6でmysql.userテーブルのパスワードのカラム名がなんか変わったらしいので、上記のコマンドで確認。
詳しくはこちら参考 MySQL情報
「dev_user」が追加されました。
既存のデータベース接続ユーザーのGRANT文の確認
[既存のデータベース接続ユーザーのGRANT文を確認するコマンド]
1 |
mysql> SHOW GRANTS FOR 'ユーザー名'@'%'; |
ここではユーザー「’dev_user’@’%’」のGRANT文を確認するようにしています。
以上で、DBサーバーの構築が完了です。
【第1回】ConoHa申し込み手順〜CentOS7でサーバー構築
【第5回】ConoHaとCentOS7でCakePHPインストール方法