EC-CUBE 4の管理画面にログインできない。ログインIDはすぐ確認できても、パスワードは保存された文字列を見ても分かりません。ここでは、パスワードを思い出せなくなったときに管理画面へ戻る手順を紹介します。
保存済みのパスワードを読み取ることはできないので、一時的にパスワードの照合方式を平文に切り替え、データベースに仮のパスワードを直接書き込んでログインします。
eccube_auth_type: PLAIN
ログインできたらすぐに設定を元へ戻し、管理画面からパスワードを再設定します。ログインIDのほうは、データベースの dtb_member にある login_id で確認できます。
この画面が出ると焦りますが、落ち着いて対処すれば戻れます
この手順の途中は、一時的にセキュリティレベルが下がります。
パスワードの照合が平文になるため、その間は管理者だけでなく一般会員も通常のパスワードではログインできなくなります。稼働中のサイトで作業する場合は、先にメンテナンスモードにしておくと安心です(設定方法は記事の最後にあります)。
なぜパスワードは確認できないのか
EC-CUBEは、パスワードをそのまま保存していません。かといって「暗号化して保存し、必要なときに戻す」わけでもありません。保存しているのは ハッシュ という、元に戻せない形へ変換した値です。
hash_hmac('SHA256', パスワード . ':' . 認証キー, ソルト)
ログイン時は、入力されたパスワードを同じ手順で変換し、保存されている値と一致するかだけを見ています。元のパスワードを取り出す処理はどこにもありません。
だから「データベースに入っている文字列をそのままパスワード欄に入れる」でもログインできません。それはパスワードではなく、パスワードを変換した結果だからです。
逆に言えば、照合の方式そのものを平文(PLAIN)へ切り替えれば、データベースに書いた文字列がそのままパスワードとして通ります。これが今回使う抜け道です。
全体の流れ
- 1
eccube.yamlのeccube_auth_typeをHMACからPLAINへ変更する - 2データベースの
dtb_memberで、対象ユーザーのpasswordを仮の文字列(8〜32字)に書き換える。login_idも控えておく - 3キャッシュをクリアする
- 42の IDとパスワードで管理画面にログインする
- 51を元に戻す(
PLAIN→HMAC) - 6「設定」→「システム設定」→「メンバー管理」からパスワードを再設定する
5と6を忘れてログアウトすると、また入れなくなります。ログインできた時点で終わりにせず、必ず最後まで進めてください。
-
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値 意味 HMAC通常はこちら。パスワードをハッシュ化して照合する。保存された値から元のパスワードは分からない PLAIN保存された値とそのまま突き合わせる。管理はしやすいが安全性が大きく下がるため、実運用では使わない PLAINにしている間は、管理者も一般会員も通常のパスワードではログインできません。作業は手早く済ませてください。 -
STEP2
データベースのパスワードを書き換える
phpMyAdmin などで データベース に接続し、
dtb_memberからログインしたいユーザーを探します。
変更前:ハッシュ化された値が入っている
変更後:仮のパスワードに書き換えた
該当ユーザーの
passwordを、仮のパスワード(8〜32字)へ書き換えます。上の例ではpasswordという文字列にしています。ログインIDが分からない場合も、この表で確認できます。
login_idの列がそれです。書き換えは不要なので、そのまま控えておいてください。元の(ハッシュ化された)値をそのままパスワード欄に入力してもログインできません。文字数が長すぎて入力欄の上限に引っかかることもあります。必ず短い仮パスワードへ書き換えてください。
-
STEP3
キャッシュをクリアする
設定ファイルを変更したので、キャッシュ を削除します。IDとパスワードが正しくてもログインできない場合、これが原因のことがあります。
サーバーに SSH 接続して、次のコマンドを実行します。
bin/console cache:clear --no-warmupSSH接続の方法は以下の記事にまとめています(Xserverの場合)。
Windows PCからSSH接続する方法(Tera Termを利用) Mac PCからSSH接続する方法 -
STEP4
ログインして、設定を戻しパスワードを再設定する
STEP2で決めた仮のパスワードで管理画面にログインします。
ログインできたら、まず
eccube.yamlのeccube_auth_typeをPLAINからHMACへ戻します。そのうえで「設定」→「システム設定」→「メンバー管理」からパスワードを再設定してください。ここを飛ばしてログアウトすると、また入れなくなります。再設定するパスワードは今後ずっと使うものなので、推測されにくい強固なものにしてください。
メンテナンスモードの設定
この手順の途中は、一時的とはいえ安全性が下がり、その間は通常のパスワードでログインできなくなります(一般会員も同じ)。稼働中のサイトでは、先にメンテナンスモードにしておくと安心です。
メンテナンスモードは通常なら管理画面から設定しますが、そもそも管理画面に入れない状況です。その場合は .maintenance という名前のファイル(中身は空でかまいません)を、EC-CUBEのディレクトリ直下に置くことで有効にできます。
通常は管理画面から設定する
管理画面に入れる場合はこちら
.maintenance を置いても有効になる
作業が終わったら、.maintenance を削除してメンテナンスを解除するのを忘れないでください。
まとめ
- パスワードはハッシュ化されて保存されており、元に戻すことはできない
- そのため、照合方式を一時的に
PLAINへ切り替え、データベースに仮パスワードを直接書く - ログインIDは
dtb_memberのlogin_idで確認できる - 設定ファイルを変えたらキャッシュを削除する
- ログイン後は必ず
HMACへ戻し、パスワードを再設定する - 稼働中のサイトなら、先にメンテナンスモードにしておく
EC-CUBEのカスタマイズに関する記事
- カスタマイズのまとめ
- 管理画面のURLを変更する方法
- 独自の定数(パラメータ)を設定・管理する方法
- 【XServer】Windows PCからSSH接続する方法
- 【XServer】Mac PCからSSH接続する方法

