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/
# 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 に追記して再起動しておくのがいいな
(長いので分けました)