先日、過去作成したGitlabにAdmin権限を持っているユーザでログインしようとしたときに、パスワードを忘れてログインができませんでした。
何回かチャレンジしましたが、どうしても思い出すことができず、断念してGitlabを作り直そうか・・・と思ってしまうぐらいでした。
今回の場合は、一般ユーザはいるけど、Admin権限を持っているユーザのパスワードがわからなく、ログインできず、Admin権限でやれることが全くできなくなってしまったときの対処法を記載します。
Admin権限保有のパスワードを忘れて、何もできない人必見です。
簡単に対処法を説明
GitlabはRuby on Railsで作成されているため、rails consoleコマンドを使えば、アプリケーションを触ることができます。
そのため、rails consoleから、DB接続をして、ユーザの情報を強制的に買い替えることで、パスワードやAdmin権限を付与したりすることが可能です。
Gitlabのusersテーブルの内容(Schema)
schemaに書いてある内容を見ていきます。(一部抜粋)
create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.integer "sign_in_count", default: 0 t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" t.datetime "created_at" t.datetime "updated_at" t.string "name" t.boolean "admin", default: false, null: false
これを見ると、adminという項目があるので、おそらくこれが1ユーザに対して、Admin権限を持っているかどうかを管理しているフラグだということがわかります。
今回だと、一般ユーザは作成可能orすでにログインできる一般ユーザがいる状態であるので、一般ユーザを指定して、ログインした一般ユーザに対してAdmin権限を付与していきたいと思います。
では、rails consoleコマンドを打って、実際にアプリケーションからDBを触っていきます。
$ bundle exec rails console
ユーザ名は各自設定したユーザ名を指定してください。
ユーザ名で検索したときに、ユーザが存在しているか確認します。
irb(main):001:0> User.find_by(username: "ユーザ名") => #
ユーザが存在していたので、変数にオブジェクトを格納します。
irb(main):002:0> user = User.find_by(username: "mentor") => #
ユーザに対して、Admin権限が付与されているか確認します。
irb(main):004:0> user.admin => false
一般ユーザなので、もちろん付与されていないこと(値がfalse)がわかります。
では、この一般ユーザに対してAdmin権限を付与していきます。
irb(main):005:0> user.admin = true => true
最後に、Admin権限を一般ユーザに付与できたので、saveしていきます。
irb(main):006:0> user.save => true
これで、一般ユーザがAdmin権限を持っているユーザに昇格しました。
まとめ
いかがでしたか?パスワード忘れてもサーバにログインしてアプリケーションを触れる状態であればなんとかすることができます!
特に、rails consoleを使うことで、アプリケーションを触れるので、今回のようにパスワードの変更以外にも応用は効きそうですね。
もちろん、サーバにログインできない状態だと結構詰み状態ですが・・・
(パスワードは忘れないようにしましょう)
では、良いGitlabライフを!