前稿では「MySQL 5.7 を CentOS 7 に yum インストールする手順」について解説しました。 本稿では、MySQL 5.7 をインストール後に行うべきセットアップについて解説します。
MySQL 5.7 の root ユーザーの初期パスワードを知る
MySQL 5.7 では、初回起動と同時に root ユーザーにランダムな文字列がパスワードとして設定されます。 設定されるパスワードはインストールを行う度に全く違うものです。 それでは設定されたパスワードは何なのでしょうか? 初期パスワードは MySQL のログファイルに出力されています。 ログファイルは、CentOS だと /var/log/mysqld.log です。 ログを開くと次のようにパスワードが記載されています。
[Note] A temporary password is generated for root@localhost: lNMg;#B/f6Y;
このパスワードは、あくまでも初期パスワードであり、このようにログに記述されてしまっていますので、次に説明する mysql_secure_installation で違うものに変更するようにしてください。
mysql_secure_installation
次に最低限のセキュリティ設定をしてくれる mysql_secure_installation について解説します。 実行する前にこのコマンドがどのようなものなのかを解説しましょう。
このコマンドで設定できることは次のことです。
- root ユーザーのパスワードの変更
- VALIDATE PASSWORD プラグインのインストール
- ポリシーに沿った root ユーザーパスワードの設定 (VALIDATE PASSWORD プラグインをインストールした場合)
- anonymous ユーザーの削除
- リモートホストから root ユーザーでログインするのを禁止する
- testデータベースの削除 (存在する場合)
mysql_secure_installation はローカルでの開発で MySQL を利用するような場合は必要ないかもしれませんが、実際に運用する環境にインストールしたのであれば行うべきでしょう。
このスクリプトでも安全の為、root ユーザーのパスワードを変更するかを聞いてくれます。 既にパスワードを変更していれば改めてパスワードを変更する必要はありません。
また、MySQL 5.7 から VALIDATE PASSWORD プラグインというプラグインを導入するかを聞かれるようになりました。 導入するとユーザーのパスワードとして設定できる文字列に一定の制限をかけることができます。 パスワードの設定ポリシーは3段階のレベルから設定できます。
MySQL の初期状態では anonymous という匿名用ユーザーが設定してあります。 実際に運用するには安全ではないユーザーであるため削除することを推奨します。
リモートホストから root ユーザーでアクセスすることを禁止します。 基本的にはリモートから MySQL にアクセスすることを許す場合は、それ専用のユーザーを作成して許可する方が良いです。
MySQL の初期状態に入っている test という名称のデータベースを削除します。
実際のコマンドは次のようになります。 対話式ですので、Yes(Y) か No(n) で答えれば良いです。
# 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.
New password: 新しいパスワードを入力する
Re-enter new password: 再度同じ新しいパスワードを入力する
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
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: 50
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
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!
設定ファイルによる設定
最後に MySQL サーバーの設定を変更します。 細かい設定は、運用するサービスに合わせて設定して頂きたいのですが、ここでは筆者なりの最低限の設定について解説します。 設定ファイルは CentOS であれば /etc/my.cnf です。 [mysqld] 節に次のものを追加します。
[mysqld]
...(略)
character-set-server = utf8
default_password_lifetime = 0
まずは MySQL サーバーのデータベースで利用する文字コードに UTF-8 を指定しました。 次に default_password_lifetime ですが、MySQL 5.7 からユーザーのパスワードの有効期限がデフォルトで360日になりました。 360日するとパスワードの変更を促されてログインできなくなります。 パスワードを定期的に変更した方が良いのかという議論は賛否両論あると思いますが、本番環境などでパスワードが有効期限を迎えてしまってサービスがストップすることは、サービス提供を第一に考えた場合によろしくないので、この有効期限の設定を 0 に設定して無効にしておきます。
おわりに
本稿では MySQL 5.7 をインストールした際に最初にやるべき最低限の設定について解説しました。 運用するサービスに合わせてもっと具体的な設定が必要な場合もあると思いますので必要に応じて追加の設定を行ってください。