Forgejo をアップグレードした

以前も書いたかもですが、自宅 Synology NAS では Forgejo が git サーバとして動作しています。

どうもアタックされていたようで知らないユーザが作成されていました。とはいえ不思議なことにそれ以外の被害はなさそうです。Dockerコンテナで動かしていたので、それ以上何もできなかったのかもしれません。

Forgejo のバージョンも 7 となっていて公式を確認すると随分遅れてしまっています。これを機に復旧がてらアップグレードしました。

復旧作業

もともと永続化データをNASのディレクトリに逃がしているので、復旧にあたっては、作成されたゴミユーザーを消してコンテナを新たに作成すればきれいな状態で再開することができそうです。

  1. NASのコンテナマネージャを開き Forgejo のコンテナを選択する
  2. ターミナルを開き、bash コンソールを起動する
  3. 以下のコマンドで不要なユーザーを削除する
# su - git
$ forgejo admin user list  ; 不要なユーザーの ID を確認する
$ forgejo admin user delete --purge -id 1234

不要な設定の無効化

確認はしていませんが、当初インストールしたときにはコンテナイメージの設定をいじらなかったと思うのですがどうもオンラインサインアップ機能が生きているので攻撃者がユーザを作成できる状態なようです。

設定を変更してオンラインサインアップ機能を無効化します。

設定はファイルはコンテナ内の /data/gitea/conf/app.ini にあります。

NAS 側から編集してもいいですし、コンテナ内にコンソールで入って編集してもいいです。

DISABLE_REGISTRATON が false になっているので true に変更します。

DISABLE_REGISTRATION = true

そうすると、ログイン画面にユーザーサインアップのリンクが消えるはずです。

ユーザーを追加するには、管理者でログインして、管理者が追加すれば OK です。

Forgejo のアップグレード

参考リンクの公式によると、バージョンは1つずつアップグレードしろってことなので 8 > 9 > 10 > 11 と四回アップグレードする必要があるみたいです。

NAS上の dokcker-compose.yml を変更していきます。

  1. コンテナマネージャからプロジェクトを選択します。
  2. プロジェクト名を選択して、YAML Configuration タブにすすみます。

以下のような要領で書き換えます。

container_name は書き換えなくてもいいのですが、コンテナタブで表示されるとすぐに変更されたことがわかるので変えています。

この設定は、sysnlogy NAS に限らず docker-compose 使っていれば同じですね。

version: '3'

networks:
  forgejo:
    external: false

services:
  server:
    # :7 から :8 に変更した
    image: data.forgejo.org/forgejo/forgejo:8

    # forgejo7 を forgejo8 に変更した
    container_name: forgejo8
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    networks:
      - forgejo
    volumes:
      - /volume1/docker/forgejo:/data
      #- /etc/timezone:/etc/timezone:ro
      #- /etc/localtime:/etc/localtime:ro
    ports:
      - '8002:3000'
      - '8003:22'

バージョンを確認するには、コンテナマネージャからコンソールを起動して確認することができます。

# foegejo --version 
 目的のメジャーバージョン番号が表示される

上で書いたようにバージョンを一気に飛ぶことができないので、必要な回数繰返して終了。

参考

Installation with Docker | Forgejo – Beyond coding. We forge.