Gerrit 2.16管理員帳號丟失的一次處理

接手別人的幾個項目,項目管理在gerrit上,由於中途經過多次轉手,管理員帳號已經丟失。

服務器在手,但大家都只能得到普通用戶權限。

因此目標是拿到Administrators羣組的權限,即,將一個帳號加入此羣組。

基本信息:

Gerrit版本:2.16.7

Gerrit認證方式:LDAP

Gerrit數據庫存儲方式:H2

Gerrit安裝在:/data/gerrit/gerrit_app

Gerrit倉庫位於:/data/gerrit/gerrit_app/git/repositories

前期走了很多彎路,因爲網絡上的資料大多是2.4版本,都是指導讓登陸gsql,在數據庫中去操作。

停掉Gerrit服務後,手工登陸進gsql,完全找不到要操作的諸如accounts、account_group_by_id等表。來回折騰很久還是搞不定。

最近隨着Gerrit瞭解的深入,看到Gerrit的版本日誌提到,2.15版本將account表已經轉爲NoteDB,2.16版本將group錶轉爲NoteDB。

這才恍然大悟,轉向搜索gerrit notedb的資料搜索。

找到如下網頁信息參考:

https://blog.nanpuyue.com/2018/044.html

雖然上文,操作的是遷移登陸插件,但其基本原因是大致相同的。

最終一頓操作猛如虎,終究搞定這個難題。

原理大致是,NoteDB實際在後臺會是一個Git倉庫,直接從Git倉庫中Clone出數據來,然後修改相應Groups下的信息,提交上去,就OK了。

在Gerrit文檔中/Documentation/config-groups.html有groups的一些操作說明。

如下命令均是在Gerrit服務器上直接執行的。

第0步,停止gerrit服務

/data/gerrit/gerrit_app/bin/gerrit.sh stop

第一步,克隆出All-Users倉庫

git clone /data/gerrit/gerrit_app/git/repositories/All-Users.git

這兒的克隆命令實際爲從裸倉庫克隆出一個工作倉庫出來。

第二步,從All-Users/groups中得到Administrators羣組的UUID

 

 第三步,修改當前工作倉庫的指向

cd All-Users
git fetch origin refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2:refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2

如果當前工作倉庫是由root用戶創建,則git命令前,應添加sudo

第四步,取出當前指向的內容。

git checkout refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2

此時,All-Users取得就是gerrit文檔中所說的groups的信息(即Administrators羣組下的信息)

 

 可以看到,沒有subgroups,而members信息即爲我們要修改的文件。

vim打開後,將一個新用戶的id插入在末尾(此ID通常是10000打頭)。

修改好後,保存,準備提交。

第五步,add並commit

git add .
git commit -m"xxxx"

第六步,更新引用

git update-ref refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2 $(git rev-parse HEAD)

第七步,推上修改至倉庫

git push origin refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2

至此,重新啓動Gerrit服務,新用戶就添加進了Administrators羣組了。

PS,用戶ID的信息取得。

首先用戶應是Gerrit中已註冊的一個用戶,在用戶的Groups頁面,任一羣組裏打開相應的Audit Log,即可看到相應用戶的Id

比如:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章