【EC-CUBE 4】管理画面のログインIDとパスワードが分からないときの対処法

EC-CUBE 4の管理画面にログインできない。ログインIDはすぐ確認できても、パスワードは保存された文字列を見ても分かりません。ここでは、パスワードを思い出せなくなったときに管理画面へ戻る手順を紹介します。

管理画面のパスワードを忘れたら?

保存済みのパスワードを読み取ることはできないので、一時的にパスワードの照合方式を平文に切り替え、データベースに仮のパスワードを直接書き込んでログインします。

eccube_auth_type: PLAIN

ログインできたらすぐに設定を元へ戻し、管理画面からパスワードを再設定します。ログインIDのほうは、データベースの dtb_member にある login_id で確認できます。

EC-CUBEの管理画面ログイン画面で、ログインIDまたはパスワードが違いますというエラーが表示されている

この画面が出ると焦りますが、落ち着いて対処すれば戻れます

この手順の途中は、一時的にセキュリティレベルが下がります。

パスワードの照合が平文になるため、その間は管理者だけでなく一般会員も通常のパスワードではログインできなくなります。稼働中のサイトで作業する場合は、先にメンテナンスモードにしておくと安心です(設定方法は記事の最後にあります)。

目次

なぜパスワードは確認できないのか

EC-CUBEは、パスワードをそのまま保存していません。かといって「暗号化して保存し、必要なときに戻す」わけでもありません。保存しているのは ハッシュ という、元に戻せない形へ変換した値です。

hash_hmac('SHA256', パスワード . ':' . 認証キー, ソルト)

ログイン時は、入力されたパスワードを同じ手順で変換し、保存されている値と一致するかだけを見ています。元のパスワードを取り出す処理はどこにもありません。

だから「データベースに入っている文字列をそのままパスワード欄に入れる」でもログインできません。それはパスワードではなく、パスワードを変換した結果だからです。

逆に言えば、照合の方式そのものを平文(PLAIN)へ切り替えれば、データベースに書いた文字列がそのままパスワードとして通ります。これが今回使う抜け道です。

全体の流れ

  1. 1eccube.yamleccube_auth_typeHMAC から PLAIN へ変更する
  2. 2データベースの dtb_member で、対象ユーザーの password を仮の文字列(8〜32字)に書き換える。login_id も控えておく
  3. 3キャッシュをクリアする
  4. 42の IDとパスワードで管理画面にログインする
  5. 51を元に戻す(PLAINHMAC
  6. 6「設定」→「システム設定」→「メンバー管理」からパスワードを再設定する

5と6を忘れてログアウトすると、また入れなくなります。ログインできた時点で終わりにせず、必ず最後まで進めてください。

  1. STEP1

    パスワードの照合方式を平文に切り替える

    app/config/eccube/packages/eccube.yaml を開き、eccube_auth_type の値を HMAC から PLAIN へ変更します。

    ~~~略~~~
        # EC-CUBE parameter
        eccube_database_url: '%env(DATABASE_URL)%'
        eccube_mailer_dsn: '%env(MAILER_DSN)%'
        eccube_admin_route: '%env(ECCUBE_ADMIN_ROUTE)%'
        eccube_user_data_route: '%env(ECCUBE_USER_DATA_ROUTE)%'
        eccube.theme: '%env(ECCUBE_TEMPLATE_CODE)%'
        eccube_theme_code: '%eccube.theme%'
        eccube_auth_magic: '%env(ECCUBE_AUTH_MAGIC)%'
        eccube_auth_type: PLAIN
        eccube_password_hash_algos: SHA256
    ~~~略~~~
    eccube.yamlファイルを開き、eccube_auth_typeの値を書き換えている画面

    eccube.yaml

    意味
    HMAC通常はこちら。パスワードをハッシュ化して照合する。保存された値から元のパスワードは分からない
    PLAIN保存された値とそのまま突き合わせる。管理はしやすいが安全性が大きく下がるため、実運用では使わない

    PLAIN にしている間は、管理者も一般会員も通常のパスワードではログインできません。作業は手早く済ませてください。

  2. STEP2

    データベースのパスワードを書き換える

    phpMyAdmin などで データベース に接続し、dtb_member からログインしたいユーザーを探します。

    phpMyAdminで表示したdtb_memberテーブル。passwordの列にハッシュ化された長い文字列が入っている

    変更前:ハッシュ化された値が入っている

    dtb_memberテーブルのpasswordを仮の文字列passwordに書き換えたあとの画面

    変更後:仮のパスワードに書き換えた

    該当ユーザーの password を、仮のパスワード(8〜32字)へ書き換えます。上の例では password という文字列にしています。

    ログインIDが分からない場合も、この表で確認できます。login_id の列がそれです。書き換えは不要なので、そのまま控えておいてください。

    元の(ハッシュ化された)値をそのままパスワード欄に入力してもログインできません。文字数が長すぎて入力欄の上限に引っかかることもあります。必ず短い仮パスワードへ書き換えてください。

  3. STEP3

    キャッシュをクリアする

    設定ファイルを変更したので、キャッシュ を削除します。IDとパスワードが正しくてもログインできない場合、これが原因のことがあります。

    サーバーに SSH 接続して、次のコマンドを実行します。

    bin/console cache:clear --no-warmup

    SSH接続の方法は以下の記事にまとめています(Xserverの場合)。

    Windows PCからSSH接続する方法(Tera Termを利用) Mac PCからSSH接続する方法
  4. STEP4

    ログインして、設定を戻しパスワードを再設定する

    STEP2で決めた仮のパスワードで管理画面にログインします。

    ログインできたら、まず eccube.yamleccube_auth_typePLAIN から HMAC へ戻します。そのうえで「設定」→「システム設定」→「メンバー管理」からパスワードを再設定してください。

    ここを飛ばしてログアウトすると、また入れなくなります。再設定するパスワードは今後ずっと使うものなので、推測されにくい強固なものにしてください。

メンテナンスモードの設定

この手順の途中は、一時的とはいえ安全性が下がり、その間は通常のパスワードでログインできなくなります(一般会員も同じ)。稼働中のサイトでは、先にメンテナンスモードにしておくと安心です。

メンテナンスモードは通常なら管理画面から設定しますが、そもそも管理画面に入れない状況です。その場合は .maintenance という名前のファイル(中身は空でかまいません)を、EC-CUBEのディレクトリ直下に置くことで有効にできます。

EC-CUBEの管理画面からメンテナンスモードを設定する画面

通常は管理画面から設定する

管理画面に入れる場合はこちら
EC-CUBEのディレクトリ直下に.maintenanceという空ファイルを置いた状態のファイル一覧

.maintenance を置いても有効になる

管理画面に入れないときはこちら

作業が終わったら、.maintenance を削除してメンテナンスを解除するのを忘れないでください。

まとめ

  • パスワードはハッシュ化されて保存されており、元に戻すことはできない
  • そのため、照合方式を一時的に PLAIN へ切り替え、データベースに仮パスワードを直接書く
  • ログインIDは dtb_memberlogin_id で確認できる
  • 設定ファイルを変えたらキャッシュを削除する
  • ログイン後は必ず HMAC へ戻し、パスワードを再設定する
  • 稼働中のサイトなら、先にメンテナンスモードにしておく

EC-CUBEのカスタマイズに関する記事

この記事に出てきた用語

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次