JenkinsでAdmin権限を持つユーザのパスワードを全て忘れた時の復旧方法

[Jenkins][備忘録]JenkinsでAdmin権限を持つユーザのパスワードを全て忘れた時の復旧方法

あらすじ

  • ローカルで動かしているJenkinsでAdministrator権限を持っているユーザ、およびそのパスワードを忘れたので、色々な事ができなくなった
  • また、Administrator権限を持つユーザがいない = Jenkinsの管理画面が開けなくなった事で権限復旧もできなくなった

環境

  • Windows XP
  • Jenkins 1.470
    • ユーザ情報: Jenkinsのユーザデータベース
    • 権限管理: 行列による権限設定
    • ローカルで運用している
    • JenkinsはWindowsサービスに登録している

原因と解決手順

気づき

  • プラグインを入れようと思ったら、なんでかJenkinsの管理リンクが見当たらなくなった
  • 管理画面のアドレスは /manage なので直にアクセスしてみる
  • Firefoxだとこんなエラーが出た[1]
! 内容符号化 (Content-Encoding) に問題があります
  不正または不明な形式で圧縮されているため、ページを表示できません。

 ・この問題を Web サイトの管理者に報告してください。
 [再試行]
  • 試しにChromeでもやってみたがこう
このウェブページにアクセスできません

http://localhost:8080/manage のウェブページは一時的に停止しているか、
新しい http://localhost:8080/manage に移動した可能性があります。

エラー 330 (net::ERR_CONTENT_DECODING_FAILED): 不明なエラーです。
  • まさかのIE6。ログイン画面からレイアウト崩れてて(さすがにサポートしてないよなぁ)とか思いつつアクセスすると…
アクセスできません
kk_Ataka には、Administer パーミッションがありません。

なんだと!? …でも管理画面にいけないんだから、権限も振れないよ。どうしよう。

解決策

  • とりあえず、Jenkinsのディレクトリをユーザ名(kk_Atakaなど)で検索してみた…[2]
  • すると引っかかったのはJenkinsのルートにある config.xml と大量の build.xml
    • build.xml は実行したユーザを情報として持っているらしい。が、今回は関係ない
  • config.xml を見てみる
    • authorizationStrategy タグの中に permission タグがあり、ここに hudson.model.Computer.Configure:kk_Ataka みたいに権限を設定してそうな箇所を発見!
    • 同じ設定(ユーザ情報、権限管理など)で安定稼動している他のJenkinsのconfig.xmlと目grepをかけてみる
    • いかにもAdministrator権限を司っていそうな設定を発見! そして、これが書かれていなかった!
<permission>hudson.model.Hudson.Administer:USER</permission>
  • 念のため、サービスからJenkinsをいったん停止し、上記タグを追加後、起動
  • アクセスできた!

最後に

  • 上述の権限管理の所、全体のAdministratorを全てチェック空にすると今回の状況が再現できるらしい(イメージはプロジェクト単位の権限設定)

f:id:kk_Ataka:20120619203011j:image

  • Administrator権限を持つユーザが0のJenkinsって運用的には有りなんだろうか
    • プラグイン増やさない、アップグレードしない場合とかなら有り?
  • 今回の復旧手段はかなり荒業っぽいなぁ
    • 第三者がひょいひょい己にAdministrator権限付加できて良い?
      • Unixとかならファイルのパーミッションとかきちんと設定できるから大丈夫?
      • ローカルならでは?

[1] なので、はじめは格納しているデータが壊れちゃったのかと思った

[2] 権限設定などを記載しているファイルがある可能性を願って。