共有フォルダ上の git リポジトリを操作しようとしたらエラーになった話

概要

  • git (version 2.37.2.windows.2) を使っていてエラーが出た
  • リポジトリフォルダの所有ユーザと git コマンドの実行ユーザが異なるとエラーが出る
  • version 2.35.2 からセキュリティ上の仕様変更があった
  • リスク考慮の上 git config --global --add safe.directory * で無効にできる

事象

  • NAS として使用している Windows 共有フォルダがある (\\NAS\share とする)
  • Windows PC (PC1 とする) をユーザ mainuser01 で使っている
  • PC1 から \\NAS\share にユーザ nasuser1 でアクセスしている

この状況で PC1 を操作して \\NAS\share 上に git リポジトリを作り,git コマンドを発行したり等すると以下のようなエラーが出る

warning: '//NAS/share/repository' is owned by:
        'S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx'
but the current user is:
        'S-1-5-21-yyyyyyyyyy-yyyyyyyyyy-yyyyyyyyy-yyyy'
fatal: detected dubious ownership in repository at '//NAS/share/repository'
To add an exception for this directory, call:

        git config --global --add safe.directory '%(prefix)///NAS/share/repository'
  • dubious: 怪しい,不審な

原因

こちらの記事を読んだところ

git利用者が使うディレクトリに .gitフォルダを作りconfigファイルを配置されると、そのconfigファイルの内容によって 最終的に任意のコマンドが自動実行されてしまうおそれがあると。

少しだけ具体的にいえば、複数の人が使うファイルストレージで 悪意を持った誰かがよろしくないファイルを配置すると、それを読み込んだPCが操作できてしまうということね

といった脆弱性が見つかったことで

gitの実装としては 「そのユーザーが所有しているディレクトリ」だけを 「信頼できるリポジトリの場所」 としたようだ。

ただその副作用として、所有していない・書き込み権限があるだけのフォルダ、たとえばNAS/クラウドストレージなどの共有フォルダを git 2.35.2からは 使えないようにしたというわけね。

という仕様に改修されたと.

リポジトリを一人一人がローカルにクローンして操作する分には何も問題ないということね.

対応

共有フォルダ上のリポジトリは自分しか使わないので,記事の通りに git config --global --add safe.directory * にて対応.

おまけ

これ AD 環境とかだとどうなるんだろね.