テーマをCocoonに変更しました!
wordpress

ConoHa VPS+KUSANAGIでphpMyAdminにBasic認証を設定する方法【初心者向け】

FavoriteLoadingお気に入り登録
wordpress

ConoHa VPS + Kusanagi で phpMyAdmin に2段階認証を設定する方法【超初心者向け】

こんにちは!今回はConoHa VPSでKusanagiを使ってWordPressを構築した後に、phpMyAdminに2段階認証(Basic認証)を設定する方法を紹介します。

実は私自身、この設定に2日間もかかってしまいました。同じように悩んでいる方の参考になれば嬉しいです!

そもそもBasic認証って何?

phpMyAdminはデータベースを管理できるツールです。つまりWordPressのすべてのデータが入っている場所にアクセスできる、とても重要なツールです。

もしphpMyAdminが誰でも自由に開ける状態だと、悪い人に入られてデータを盗まれたり、サイトを壊されたりする危険があります。

そこで使うのがBasic認証です。

Basic認証とは、ページを開こうとするとユーザー名とパスワードを入力する画面が出てくる仕組みのことです。

phpMyAdminにBasic認証を設定することで、2段階のログインが必要になります。

  1. まずBasic認証のユーザー名・パスワードを入力
  2. 次にphpMyAdmin自体のログイン画面でユーザー名・パスワードを入力

事前に確認すること

  • ConoHa VPS を使っている
  • Kusanagi で WordPress を構築済み
  • phpMyAdmin を手動でインストール済み
    /home/kusanagi/サイト名/DocumentRoot/phpmyadmin/

STEP 1:パスワードファイルを作成する

まずはBasic認証で使うユーザー名とパスワードのファイルを作ります。

ConoHaのコンソール画面からサーバーにログインして、以下のコマンドを実行してください。

1-1:保存用フォルダを作る

mkdir -p /home/kusanagi/.auth

mkdirは「フォルダを作る」コマンドです。-pをつけると途中のフォルダも一緒に作ってくれます。

1-2:パスワードファイルを作る

まずはBasic認証で使うユーザー名とパスワードのファイルを作ります。

htpasswd -c /home/kusanagi/.auth/.htpasswd admin

実行すると以下のようなメッセージが出ます。

New password:
Re-type new password:
Adding password for user admin

好きなパスワードを入力してください(入力中は文字が表示されませんが正常です)。

ここで設定したパスワードを必ずメモしておきましょう!

STEP 2:nginxの設定ファイルを作る

次に「/phpmyadmin/にアクセスしたときにBasic認証を要求する」という設定をnginxに教えます。

2-1:設定フォルダを作る

mkdir -p /home/kusanagi/サイト名/config/nginx

※「サイト名」は自分のサイト名に変えてください(例:you_site)

2-2:設定ファイルを1行ずつ作る

以下のコマンドを1つずつ実行してください。

echo 'location ^~ /phpmyadmin/ {' > /home/kusanagi/サイト名/config/nginx/extra.conf
echo '    auth_basic "Restricted";' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo '    auth_basic_user_file /home/kusanagi/.auth/.htpasswd;' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo '    location ~ \.php$ {' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo '        auth_basic "Restricted";' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo '        auth_basic_user_file /home/kusanagi/.auth/.htpasswd;' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo '        include conf.d/fastcgi.inc;' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo '    }' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo '}' >> /home/kusanagi/サイト名/config/nginx/extra.conf

2-3:ちゃんと作れたか確認する

cat /home/kusanagi/サイト名/config/nginx/extra.conf

以下のように表示されればOKです!

location ^~ /phpmyadmin/ {
    auth_basic "Restricted";
    auth_basic_user_file /home/kusanagi/.auth/.htpasswd;
    location ~ \.php$ {
        auth_basic "Restricted";
        auth_basic_user_file /home/kusanagi/.auth/.htpasswd;
        include conf.d/fastcgi.inc;
    }
}

STEP 3:nginxにextra.confを読み込ませる

作った設定ファイルをnginxに読み込ませます。

3-1:Pythonスクリプトを作る

echo "f='/etc/opt/kusanagi/nginx/conf.d/サイト名.conf'" > /tmp/fix.py
echo "t=open(f).read()" >> /tmp/fix.py
echo "old='include conf.d/acme.inc;'" >> /tmp/fix.py
echo "new=old+'\\n    include /home/kusanagi/サイト名/config/nginx/extra.conf;'" >> /tmp/fix.py
echo "open(f,'w').write(t.replace(old,new,1))" >> /tmp/fix.py
echo "print('done')" >> /tmp/fix.py

3-2:スクリプトを実行する

python3 /tmp/fix.py

3-3:正しく追加されたか確認する

grep -n "extra\|acme" /etc/opt/kusanagi/nginx/conf.d/サイト名.conf

extra.confの行番号がacme.incの行番号の直後になっていればOKです。

STEP 4:nginxを再起動する

設定を反映させます。

4-1:設定ファイルにエラーがないか確認

/opt/kusanagi/nginx129/sbin/nginx -t

以下のように表示されればOKです。

4-2:nginxを再起動

kusanagi restart

restart completed.と表示されればOKです!

STEP 5:動作確認

ブラウザで以下にアクセスします。

http://サーバーのIPアドレス/phpmyadmin/

ユーザー名とパスワードを入力するダイアログが表示されたら成功です!

  • ユーザー名:admin
  • パスワード:STEP 1-2で設定したパスワード

STEP 6:phpMyAdminの設定ファイルを整える

最後にphpMyAdmin自体の設定も整えましょう。

6-1:設定ファイルをコピーする

cp /home/kusanagi/サイト名/DocumentRoot/phpmyadmin/config.sample.inc.php \
   /home/kusanagi/サイト名/DocumentRoot/phpmyadmin/config.inc.php

6-2:viエディタで設定ファイルを開く

vi /home/kusanagi/サイト名/DocumentRoot/phpmyadmin/config.inc.php

6-3:16行目に移動する

viが開いたら以下を入力してEnterを押します。

:16

6-4:編集モードに入る

i

画面下に— INSERT —と表示されたらOKです。

6-5:ランダム文字列を入力

‘ ‘の間にカーソルを移動して、32文字以上のランダムな文字列を入力します。

AbCdEfGhIjKlMnOpQrStUvWxYz123456

6-6:保存して終了

EscキーでINSERTモードを抜けてから

:wq

を入力してEnterを押せば完了です!

まとめ

STEP内容
STEP 1パスワードファイルの作成
STEP 2Basic認証の設定ファイルを作成
STEP 3nginxにextra.confを読み込ませる
STEP 4nginxを再起動
STEP 5動作確認
STEP 6phpMyAdminの設定ファイルを整える

ハマりやすいポイント

その1:nginxのパスが普通と違う

KusanagiのnginxはPATHが通っておらず、nginx -tでは動きません。

/opt/kusanagi/nginx129/sbin/nginx -t

その2:HTTPとHTTPSで別々に設定が必要

you_site.confにはHTTPブロックとHTTPSブロックの2つがあります。
両方にextra.confを読み込ませないと片方でBasic認証が効きません。

その3:コマンドが長いと途切れる

ConoHaのコンソールは長いコマンドが途切れることがあります。
長いコマンドは分割して1行ずつ実行しましょう。

ConoHa VPS + Kusanagi で phpMyAdmin の設定に
2日かかった話【失敗談と解決策まとめ】


同じところで詰まっている方の参考になれば嬉しいです!

ConoHa VPS に Kusanagi を使って WordPress を構築した後、データベースを管理するために phpMyAdmin を導入しようとしました。さらにセキュリティのため Basic認証(2段階のログイン) を設定しようとしたのですが、これが思った以上に大変でした。

1. phpMyAdmin のインストールコマンドが存在しなかった

▶ 何をしたか

ネットで調べると「Kusanagi では以下のコマンドでインストールできる」という記事が多数出てきました。

kusanagi addon install pma you_site

✕ 何が起きたか

kusanagi addon install: error: argument module: invalid choice: 'pma'
(choose from zabbix, gemini)

! 原因

Kusanagi がバージョンアップして pma コマンドが廃止されていました。
現在の Kusanagi では addon install で使えるのは zabbixgemini のみです。ネット上の古い記事を参考にしていたことが原因でした。

✓ 解決策

phpMyAdmin を手動でダウンロードして設置することで解決しました。

cd /tmp
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
tar zxvf phpMyAdmin-latest-all-languages.tar.gz
mv /tmp/phpMyAdmin-*/ /home/kusanagi/you_site/DocumentRoot/phpmyadmin

💡 教訓

ネットの記事は公開日を必ず確認しましょう!Kusanagi のような頻繁にアップデートされるソフトウェアは、古い記事の情報が使えないことがあります。

2. nginx のコマンドが見つからなかった

▶ 何をしたか

設定ファイルを作った後、エラーがないか確認しようとしました。

nginx -t

✕ 何が起きたか

-bash: nginx: command not found

! 原因

Kusanagi の nginx は特殊な場所にインストールされており、通常のパスが通っていませんでした。
find コマンドで探したところ、正しいパスは以下でした。

/opt/kusanagi/nginx129/sbin/nginx

✓ 解決策

フルパスで実行することで解決しました。

/opt/kusanagi/nginx129/sbin/nginx -t

💡 教訓

Kusanagi 環境では通常の Linux コマンドが使えないことがあります。find / -name "nginx" -type f で場所を探しましょう。

3. 設定ファイルの中身が不完全だった

▶ 何をしたか

Basic認証の設定ファイル(extra.conf)を以下のように作りました。

auth_basic "Restricted";
auth_basic_user_file /home/kusanagi/.auth/.htpasswd;

✕ 何が起きたか

nginx の設定チェックでエラーが出ました。

! 原因

location { } ブロックで囲まないと、nginx はどの URL に設定を適用すればいいか理解できません。
正しくは以下のように書く必要がありました。

location ^~ /phpmyadmin/ {
    auth_basic "Restricted";
    auth_basic_user_file /home/kusanagi/.auth/.htpasswd;
}

💡 教訓

nginx の設定はどの URL に適用するかlocation で必ず指定する必要があります。

4. 設定が重複してしまった

▶ 何をしたか

設定がうまくいかず、同じコマンドを何度も実行してしまいました。

echo 'include /home/.../extra.conf;' >> default.conf

✕ 何が起きたか

同じ行が 4行も重複してしまいました。

include /home/kusanagi/you_site/config/nginx/extra.conf;
include /home/kusanagi/you_site/config/nginx/extra.conf;
include /home/kusanagi/you_site/config/nginx/extra.conf;
include /home/kusanagi/you_site/config/nginx/extra.conf;

✓ 解決策

ファイルを一度リセットして1行だけ書き直しました。
>> は追記、> は上書きです。

echo 'include /home/.../extra.conf;' > default.conf

💡 教訓

>>追記>上書きです。ファイルをリセットしたい時は > を使いましょう。

5. serverブロックの外に設定を書いてしまった

✕ 何が起きたか

設定が }外側に追記されてしまいました。

    include conf.d/fcache_purge.inc;
}  ← serverブロックの終わり

include /home/.../extra.conf;  ← ここに入ってしまった(無効!)

! 原因

nginx の設定は必ず server { } ブロックの内側に書かないと無効になります。

✓ 解決策

Python スクリプトを使って正しい位置に挿入しました。

💡 教訓

nginx の設定ファイルを手動で編集するときは } の位置に注意しましょう。設定後は必ず nginx -t でチェックしましょう。

6. WordPress の PHP 設定が優先されて Basic認証が効かなかった

✕ 何が起きたか

設定ファイルを正しく作って nginx を再起動しても、Basic認証のダイアログが出ずにphpMyAdmin の画面が直接表示されてしまいました。

! 原因

Kusanagi の WordPress 用 nginx 設定(you_site.wp.inc)の中に、PHP ファイルを処理する以下のルールがありました。

location ~ [^/]\.php {
    ...
}

nginx には location の優先順位 というルールがあります。~(正規表現)の location は通常の location より優先されるため、phpMyAdmin の PHP ファイルにアクセスすると WordPress のルールが先に適用されてしまい、Basic認証がスキップされていました。

✓ 解決策

^~ という特別な指定を使いました。

location ^~ /phpmyadmin/ {
    auth_basic "Restricted";
    auth_basic_user_file /home/kusanagi/.auth/.htpasswd;
    location ~ \.php$ {
        auth_basic "Restricted";
        auth_basic_user_file /home/kusanagi/.htpasswd;
        include conf.d/fastcgi.inc;
    }
}

💡 教訓

nginx の location には優先順位があります。
=(完全一致) → ② ^~(正規表現より優先) → ③ ~(正規表現) → ④ 通常の前方一致

7. HTTP と HTTPS で別々の設定が必要だった

✕ 何が起きたか

extra.conf の読み込みを追加してもまだ Basic認証が表示されませんでした。

! 原因

you_site.conf の中には実は 2つのサーバーブロックがあります。

server {
    listen 80;    ← HTTPブロック
    ...
}

server {
    listen 443;   ← HTTPSブロック
    ...
}

extra.conf の読み込みを HTTPS ブロックにしか追加していなかったため、http:// でアクセスすると Basic認証が効きませんでした。

✓ 解決策

HTTP ブロックにも extra.conf の読み込みを追加して解決しました。

💡 教訓

nginx の設定ファイルには HTTP と HTTPS で別々のサーバーブロックがあります。両方に設定を追加しないと片方でしか効きません。

🗺️ トラブルの全体図

1
phpMyAdmin コマンドが廃止
→ 手動インストールで解決

2
nginx のパスが特殊
→ /opt/kusanagi/nginx129/sbin/nginx を使う

3
extra.conf に location ブロックがない
→ location ^~ /phpmyadmin/ で囲む

4
設定が4行重複
→ ファイルをリセットして書き直し

5
server ブロックの外に設定が入った
→ Python スクリプトで正しい位置に挿入

6
WordPress の PHP 設定が優先された
→ location ^~ を使って優先順位を上げる

7
HTTP ブロックにしか設定がなかった
→ HTTP・HTTPS 両方のブロックに追加

🎉
2日後にようやく解決!

✅ まとめ:同じ失敗をしないために

ポイント対策
古い記事に注意記事の公開日を確認する
nginx のパス/opt/kusanagi/nginx129/sbin/nginx -t を使う
設定変更後は必ず確認nginx -t でエラーチェック
location の優先順位phpMyAdmin には ^~ を使う
HTTP / HTTPS 両方に設定you_site.conf の2つのブロック両方に追加
コマンドの重複実行に注意>>> の違いを意識する

2日間かけてたどり着いた結論は意外とシンプルでした。
同じところでハマっている方の参考になれば嬉しいです!
なぜ、ぐちゃぐちゃになってしまったかと言うと、コンソールボックスに入力したものが途中で切れてたにも関わらず、次のコードを書き続けてしまった事に気づかなかったw

ブログ管理者などによく売れてる本です

コメント

※当サイトは、Amazon、楽天アソシエイト・他プログラムの参加者です。リンクを通じて商品を購入すると、紹介料を得る場合があります。
タイトルとURLをコピーしました