MySQLインストール直後のセキュリティー設定(mysql_secure_installation)
MySQLをインストールした直後は管理者(root)アカウントの
パスワードが未設定であったり、everyoneユーザーへのアクセス権があったりと、
そのまま利用するにはあまり良くない状態で構成されています。
そんな設定を一括して行う事ができる
「mysql_secure_installation」の実行は忘れずに行っておくべきプログラムです。
概要
MySQLインストール直後のセキュリティー設定(mysql_secure_installation)
MySQLインストール直後のセキュリティー設定を一括して行える
「mysql_secure_installation」は単なる実行ファイルです。
MySQLサーバーをインストールすると「mysqlやmysqld」と同じ実行ディレクトリに、
一緒にインストールされています。
そのプログラムを実行して「Y/n(Yes or No)」に答えていくだけで、
最低限のセキュリティー設定を行う事ができます。
インストール直後にMySQLサーバーの起動・終了、接続確認が行えたところで、
すぐに実行して設定の変更を行っておくといいでしょう。
この実行を行うまでに以下の手順を済ませておく必要があります。
MySQLサーバーの起動・終了の確認まで行えたら、
作業を楽にするためにも、MySQLWorkbenchで接続可能な状態にしておくと便利でしょう。
MySQLWorkbenchはMacOSXの対応バージョンが明確に公開されていませんでした。
その為、以下で対応するであろうバージョンを紹介しています。
インストールを済ませたら、接続設定を行って
「mysql_secure_installation」実行前の状態で接続ができることを確認しておくと、
実行後に接続ができないと言った場合にも、問題の切り分けが容易になります。
なお、実行前のアカウント設定は以下のような状態でした。
「mysql_secure_installation」の実行
では、実際に「mysql_secure_installation」を実行します。
mysql_secure_installation実行ファイルは、
インストール済みの「mysql/mysqld」実行ファイルディレクトリにあります。
インストールした「mysql/mysqld」の実行ディレクトリが分からない場合は、
以下の手順で調べて、Finderに表示しておくとドロップするだけで楽にパスの入力できます。
ターミナルを開き「mysql_secure_installation」までの
ファイルフルパスを入力するか、
ターミナル画面にmysql_secure_installation実行ファイルをドロップします。
rootユーザーによるログイン・空パスワード(Enter)の入力
実行して最初にrootパスワードの入力を求められます。
MySQLサーバーをインストールした直後であれば、パスワードは設定されていません。
何も入力せず、Enterを押下します。
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we’ll need the current password for the root user. If you’ve just installed MySQL, and you haven’t set the root password yet, the password will be blank, so you should just press enter here.
Enter current password for root (enter for none):(Enter)
OK, successfully used password, moving on…(意訳)注:このスクリプトのすべての部分を実行することは、使用されているすべてのMySQLサーバで推奨されています! それぞれの手順を注意深くお読みください!
パスワードを確保するためにMySQLにログインするには、rootユーザーの現在のパスワードが必要です。 MySQLをインストールしたばかりで、まだrootパスワードを設定していない場合、パスワードは空白になりますので、ここでenterを押すだけです。
rootの現在のパスワードを入力します(noneの場合はenter)。
rootパスワードの設定
続けて、rootパスワードを設定します。
「Y」を入力して、
続けて新しくrootに設定するパスワードを2回入力します。
Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation.
Set root password? [Y/n] YNew password: (新しいパスワード)
Re-enter new password: (新しいパスワード)
Password updated successfully!
Reloading privilege tables..
… Success!(意訳)rootパスワードを設定すると、誰も適切な権限なしにMySQL rootユーザにログインできなくなります。
ルートパスワードを設定しますか? [Y/n]
匿名ユーザーの削除
次に匿名ユーザー(anonymous)アカウントの削除を行います。
通常は特に必要はありませんので削除します。
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? [Y/n] Y
… Success!(意訳)デフォルトでは、MySQLインストールには匿名ユーザーが存在するため、誰でもMySQLにログインできるようになり、ユーザーアカウントを作成する必要はありません。 これは、テストのためのもので、インストールを少しスムーズにするためのものです。 プロダクション環境に移行する前に削除する必要があります。
匿名ユーザーを削除しますか?[Y/n]
rootユーザーのリモートログイン可否
rootユーザーでリモート(MySQLサーバー以外の端末からのアクセス)操作を
許可するか否かの設定です。
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? [Y/n] Y
… Success!(意訳)通常、ルートは「localhost」からの接続のみが許可されるべきです。 これにより、誰かがネットワークからのルートパスワードを推測できなくなります。
リモートからのrootログインを拒否しますか?[Y/n]
testデータベースの削除
インストール時にテスト用データベースが自動的に作成されています。
通常、このテストデータベースは必要ありませんので削除します。
※必要があればテスト用に後から作成するだけです。
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? [Y/n] Y
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!(意訳)デフォルトでは、MySQLには誰でもアクセスできる ‘test’という名前のデータベースが付属しています。 これはテスト専用のものでもあり、運用環境に移行する前に削除する必要があります。
テストデータベースとそのアクセスを削除しますか?[Y/n]
権限テーブル(アクセス権)の更新確認
rootユーザーのパスワード設定、匿名ユーザーの削除など、
これまでに行った権限テーブルに対しての変更を有効化します。
Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
Reload privilege tables now? [Y/n] Y
… Success!Cleaning up…
(意訳)特権テーブルをリロードすると、これまでに行われたすべての変更がすぐに有効になります。
今すぐ特権テーブルを再ロードしますか?
以上で設定がすべて終了します。
All done! If you’ve completed all of the above steps, your MySQL installation should now be secure.
Thanks for using MySQL!(意訳)すべて完了! 上記の手順をすべて完了した場合は、MySQLのインストールが安全になるはずです。
MySQLをご利用いただきありがとうございます!
最後に「All done!」と表示されていれば、
「mysql_secure_installation」の処理はすべて終了です。
すべて終了した後に実際にMySQLデータベースにログインして確認します。
MySQLへ接続し確認
MySQLWorkbenchを開き「mysql_secure_installation」実行前に、
接続していたコネクションからログインします。
rootパスワードを設定しましたのでパスワードの入力画面が表示されます。
設定した新しいパスワードを入力し、ログインします。
ログインしたらサイドメニューの「Users and Privileges」を選択し、
ユーザー権限の状態を確認します。
以下のように「<anonymous>」アカウントが削除され、
「root@」の後ろのホスト部分がローカルのみに変更されています。
後は、必要に応じて推測されにくいユーザーの追加やパスワード設定を行います。
参考
5.4.4 mysql_secure_installation — Improve MySQL Installation Security
This program enables you to improve the security of your MySQL installation in the following ways:
- You can set a password for
root
accounts.- You can remove
root
accounts that are accessible from outside the local host.- You can remove anonymous-user accounts.
- You can remove the
test
database (which by default can be accessed by all users, even anonymous users), and privileges that permit anyone to access databases with names that start withtest_
.mysql_secure_installation helps you implement security recommendations similar to those described at Section 2.10.4, “Securing the Initial MySQL Accounts”.
MacPortでも「mysql_secure_installation」の実行を推奨しています。
Step 5: Optional security configuration
There is an interactive program to secure a MySQL installation.
123 $ man mysql_secure_installation$ /opt/local/bin/mysql_secure_installationThe following is a more detailed process that may achieve the same results as the interactive program. Place the following into mysql_security.sql and replace the 'MyNewPass' with your root password. Note that the SQL will remove all access for root from any location other than ‘localhost’. You might like to keep this SQL file – all the lines beginning with ‘–‘ are doc-comments about how to use it.
Wrapper no longer exists…
123456789101112131415161718192021 -- HOW TO USE THIS FILE (with a MacPorts installation):--$ sudo port unload mysql57-server-- $ sudo mysqld_safe --init-file=mysql_security.sql &-- The init will terminate if there are any errors in the init file.-- Wait a bit to be sure the server is running.-- If it's running, then shutdown the server (root password required):-- $ /opt/local/bin/mysqladmin -u root -p shutdown-- Check that everything worked. There may be an ERROR if the test database-- doesn't exist. Otherwise there should be no errors in the file reported by-- 'mysqld_safe Logging to ..." during the mysql_safe5 startup from above:-- $ sudo tail -n 20 /opt/local/var/db/mysql5*.errUPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';DELETE FROM mysql.user WHERE User='';FLUSH PRIVILEGES;DROP DATABASE test;DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';The server startup options --skip-networking and --skip-grant-tables may be useful while implementing security.
See also http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html#resetting-permissions-unix
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日: