WordPressのセキュリティを高める為にLimit Login Attemptsというプラグインを入れたところ、予想以上にアカウントへの不正アクセスがあることがわかりました。
そこで、デフォルトで利用していたユーザIDの権限を変えることにしました。
しかし、その時に操作をミスして自分がログインできなくなってしまう可能性もあります。
そこで事前に、直接mysqlに乗り込んで、ユーザの権限を変える方法を確認することにしました。
以下の手順でmysqlの情報を直接操作可能
1.sshでサーバにログイン
ここは大丈夫でしょう。AWS上でbitnamiのインスタンスを作成した際にログインできるようにしているはずです。
2.mysqlにログイン
そもそもmysqlにログインする為のID/PASSWORDはどこにある?ということなですが、以下のファイルの中に書かれています。
/opt/bitnami/apps/wordpress/htdocs/wp-config.php
このファイルの中で「DB_NAME」「DB_USER」「DB_PASSWORD」として、それぞれデータベース名、ユーザ名、パスワードが記載されていますので、メモしておきましょう。
その後、以下のコマンドを実行後、パスワードを入力すればログインできます。(※DB_USERはユーザ名に置き換えてください。)
mysql -u DB_USER -p
3.データベースの指定
ログイン後、テーブルを確認しようと show tables; などのコマンドを実行しようとすると以下のエラーが表示されることがあります。
ERROR 1046 (3D000): No database selected
これは操作するデータベースが指定されていないので発生しています。
したがって、テーブルを操作する前に以下のコマンドを実行し、データベースを指定してください。(以下の場合は、データベースとして”bitnami_wordpress”を指定しています。)
mysql> use bitnami_wordpress
4.テーブルの確認(ユーザIDの確認)
これで操作するデータベースが指摘できましたので、まずは、wp_usersというテーブルの中身を覗いてみます。
以下のコマンドでは、”hogehoge”ユーザの情報を表示させています。また、最後に”¥G”をつけることで出力結果を見やすくしていますが、その代わりに”;”をつけても大丈夫です。
mysql> select * from wp_users where user_login = “hogehoge”¥G
この結果により、”hogehoge”のユーザID(user_id)が分かりました。これでユーザ権限変更の準備が整いました。
5.テーブルの更新(ユーザ権限の更新)
4.で取得したuser_idでwp_usermeta テーブルを検索します。以下のコマンドを入力してください。(※user_idは実際のユーザIDに置き換えてください。)
mysql> select * from wp_usermeta where user_id = “user_id“\G
出力されたテーブル情報の中で、meta_key が wp_capabilities とwp_user_levelの部分を書き換えることで、ユーザ権限を変えることが可能です。
たとえば、管理者に権限を変更する為のコマンドの例は以下の通りです。(※user_idは実際のユーザIDに置き換えてください。)
mysql> update wp_usermeta set meta_value=’a:1:{s:13:”administrator”;b:1;}’ where user_id=”user_id” AND meta_key=”wp_capabilities”;
mysql> update wp_usermeta set meta_value=10 where user_id=”user_id” AND meta_key=”wp_user_level”;
参考までに、管理者と投稿者の設定値を記載しておきます。
権限 | wp_capabilities | wp_user_level |
管理者 | a:1:{s:13:”administrator”;b:1;} | 10 |
投稿者 | a:1:{s:6:”author”;b:1;} | 2 |
これで権限設定を間違ってしまっても、mysql側から何とか変更できますね。
デフォルトのユーザIDをそのまま利用するのは危険
私のようにブログを立ち上げたばかりでも、数十件の不正アクセスが発生している状態ですので、ブログを立ち上げたらすぐにデフォルトのIDから新規に作成したIDにお引っ越ししたほうがよいと思います。