MySQLインストール
1.必要なパッケージをインストールする
1 2 |
# apt update # apt install mysql-server |
2.MySQLサーバのセキュリティ設定を行う
MySQLサーバのセキュリティ関連の設定を行うためにmysql_secure_installtionというツールが用意されているのでこれを実行します。
実行すると、質問形式でいくつかのセキュリティ設定がはじまります。
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 |
# mysql_secure_installation 以下のようにパスワードバリデーション用のプラグインを使用するか確認されます。パスワードバリデーションというのは、MySQL用のユーザのパスワード強度をチェックし、十分セキュアなパスワードのみ受け付けるよう制限をかけることができます。例えば、最低何文字以上で必ず記号と数値を1文字以上含むなどです。この条件について次の質問で設定できます。 良ければyを入力してEnterを押します Securing the MySQL server deployment. Connecting to MySQL using a blank 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 上記の質問でyにした場合は続いてパスワードバリデーションのレベルを聞かれます。LOW、MEDIUM、STRONGの3つのレベルがあり、ここではMEDIUMを選択するため1を入力してEnterを押します 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:1 各レベルの内容は以下のようになっています。 LOW 最低8文字以上 MEDIUM 最低8文字以上で数値、大文字小文字、特殊記号を必ず含む STRONG 最低8文字以上で数値、大文字小文字、特殊記号を必ず含み、さらに4文字以上の文字列は辞書ファイルに登録されている単語に一致してはならないという制限あり 続いて、実際にレベルを満たすパスワードを2回入力します。これはrootユーザ用のパスワードです。 Please set the password for root here. New password:<password> Re-enter new password:<password> パスワードを2回入力すると、0〜100のスコアが入力したパスワードに対して付けられて、これで良いか確認されます。セキュリティレベルが高いほど高いスコアになります。 OKな場合はyを入力してEnterを押します 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 今後MySQL用のユーザを作成する際に設定するパスワードは、ここで設定したセキュリティレベルを満たす必要がありますので注意してください 続いてMySQLがデフォルトで設定するテスト用の匿名ユーザを削除するか確認されます。良ければyを入力してEnterを押します 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 リモートからのrootログインを禁止するか確認されます。ここではyと入力してEnterを押します 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 通常MySQLがデフォルトで作成する「test」というどのユーザもアクセス可能なデータベースを削除するかの確認です。yと入力してEnterを押します 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 これまで行った設定を反映させるためにリロードして良いかの確認です。yと入力してEnterを押します 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 最後にここまでで設定した内容が表示され、以下のようにAll done!と表示されればセキュリティ設定は完了です (...以上省略...) - 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! |
3.MySQLにパスワードでログインできるように設定変更する
上記の設定でパスワードを設定しましたが、これはこのままでは使用されません。MySQL 5.7以降では、MySQLのrootユーザはデフォルトではパスワードによるログインができないようになっています。パスワードの代わりに、システムのrootユーザ(ここではOSがUbuntuなのでUbuntuのrootユーザ)情報でログインする必要があります。すなわち、sudoでMySQLのrootユーザとしてもMySQLにログインできます。
これはMySQL 5.7以降でauth_socketというプラグインが使用されているためです。もし、従来と同様にMySQLのrootユーザ用にパスワードを設定し、そのパスワードでMySQLにログインしたい場合はauth_socketの代わりにmysql_native_passwordというプラグインを使用するよう変更する必要があります。
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 |
# mysql mysql> SELECT user,authentication_string,plugin,host FROM mysql.user; 下のように表示されrootユーザのpluginという部分がauth_socketになっていることが確認できます | user | authentication_string | plugin | host | +------------------ +--------------------------------------- ----+----------------------- +-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *5F6EC674A843A2EDC44C4B6BCBD832ADC88AF8BB | mysql_native_password | localhost | +------------------+---------------------------------------- ---+-----------------------+---------+ これを従来のパスワード認証に変更したい場合は以下のコマンドを実行します。yourpasswordは実際に使用したいパスワードを入力してください mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<yourpassword>'; 反映させます mysql> FLUSH PRIVILEGES; mmysql> exit; |
1 2 3 |
# mysql -u root -p パスワード : <yourpassword> |