[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とかならファイルのパーミッションとかきちんと設定できるから大丈夫?
- ローカルならでは?
- 第三者がひょいひょい己にAdministrator権限付加できて良い?
[1] なので、はじめは格納しているデータが壊れちゃったのかと思った
[2] 権限設定などを記載しているファイルがある可能性を願って。