CentOS7 + Zabbix + MySQL (Zabbixインストールする前に)

Zabbixインストールするまでの、PHP / MySQLのインストールと初期設定で長くなったので
今回はそれまでの前振りということで _no

自宅内Network機器のトラフィック見たりするのに
Zabbixのグラフ機能使ってみようかなと思ってみたりしたので

CentOS7はminimalでインストール完了
EPELリポジトリも Installしている状況
1. ユーザー作成
2. sshdの設定変更
3. chrony 導入
4. 不要サービスの停止

但し、CentOS7では、PHPは5.x系、MySQLはインストールされておらず互換DBのMariDB Liblaryがインストールされている

1. PHP 7.x系のインストール
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

PHP 7.3のrepoを有効化
(今回 7.3を使用しているが現時点ではRCなので、7.2のほうが良いと思われる)

# vi /etc/yum.repos.d/remi-php73.repo
# sdiff -s /etc/yum.repos.d/remi-php73.repo /etc/yum.repos.d/remi-php73.repo.20180917
enabled=1                                                     | enabled=0
# yum repolist
remi-php73                    Remi's PHP 7.3 RPM repository for Enterprise Linux 7 - x86_64      219
remi-safe                     Safe Remi's RPM repository for Enterprise Linux 7 - x86_64       3,015

これでupdateを実行すると、PHP 5,x が PHP 7.3系にUpdateされる

# yum update
2. MySQL 5.7のインストール

MariaDBのライブラリが導入されているので、バッティングを防ぐ為に削除する

# rpm -qa | grep maria
mariadb-libs-5.5.60-1.el7_5.x86_64
# yum remove mariadb-libs-5.5.60-1.el7_5.x86_64
# rm -rf /var/lib/mysql/

MySQLリポジトリ追加

# yum install http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
# yum repolist
mysql-connectors-community/x86_64 MySQL Connectors Community                                      65
mysql-tools-community/x86_64      MySQL Tools Community                                           69
mysql57-community/x86_64          MySQL 5.7 Community Server                                     287

MySQL Serverインストール

# yum install mysql-community-server

インストールされた MySQL Serverの自動起動設定の確認と起動
基本自動起動は enableになってるっぽい??

# systemctl list-unit-files --type service | grep mysql
mysqld.service                                enabled
mysqld@.service                               disabled
#
# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
# systemctl start mysqld
# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-09-17 03:08:35 JST; 11s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 10265 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 10192 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 10268 (mysqld)
   CGroup: /system.slice/mysqld.service
           mq10268 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Sep 17 03:08:08 zabbix systemd[1]: Starting MySQL Server...
Sep 17 03:08:35 zabbix systemd[1]: Started MySQL Server.

無事起動!!

rootユーザーの初期パスワードは構築時にランダムで設定され /var/lib/mysqld.log に出力されている

# grep password /var/log/mysqld.log
2018-09-16T18:08:21.211929Z 1 [Note] A temporary password is generated for root@localhost: sE7P&KJweq4H
3. MySQLの初期設定

MySQL では最低限のセキュリティ設定をしてくれる mysql_secure_installation なるツールがあるのでそれを実行

具体的には

  • root ユーザーのパスワードの変更
  • VALIDATE PASSWORD プラグインのインストール
  • ポリシーに沿った root ユーザーパスワードの設定 (VALIDATE PASSWORD プラグインをインストールした場合)
  • anonymous ユーザーの削除
  • リモートホストから root ユーザーでログインするのを禁止する
  • testデータベースの削除 (存在する場合)
# mysql_secure_installation
Securing the MySQL server deployment.

Enter password for user root:

New password:

Re-enter new password:
 ... Failed! Error: Your password does not satisfy the current policy requirements

New password:

Re-enter new password:
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

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.

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.

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.


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!

なんか、パスワードのセキュリティ強度が最初から middleになっとった _no

自宅内でし使わないのにこんな強度いらないということで

# mysql -uroot -p
Enter Password:
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

mysql> set global validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 8     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

mysql> set password = password('<新しいパスワード>');

MySQL からデフォルトのパスワード有効期限が 360日になったので、無期限に
ついでに文字コードについても UTF-8 を初期値にするように [mysqld] セレクションに追加

# vi /etc/my.cnf
# cat /etc/my.cnf
<省略>
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server = utf8
default_password_lifetime = 0
<省略>

設定変更をしたので、mysqld を再起動

# systemctl restart mysqld.service

そして、再起動をしたらパスワード強度が元に戻っておった _no
初期値が MIDIUM らしいので、 /etc/my.cnf で初期設定しないと再起動の度に MIDIUM に戻るようで

# vi /etc/my.cnf
# cat /etc/my.cnf
<省略>
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server = utf8
default_password_lifetime = 0
validate_password_policy=LOW
<省略>
# systemctl restart mysqld.service
# mysql -uroot -p
Enter password:
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 8     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

よっしゃ!!!

mysql_secure_installation を実行する前に、 /etc/my.cnf に追記して再起動しておくのがいいな

(長いので分けました)