[git] fatal: unsafe repository

1. unsafe repository エラーの通知例

1.1. 外部ストレージに置かれたローカルリポジトリにアクセス

1.2. WSL(Windows Subsystem for Linux)内にある仮想ドライブのローカルリポジトリにアクセス

SourceTree fatal unsafe repository

1.3. 自分以外にOwnershipがあるフォルダーに置かれたローカルリポジトリにアクセス

 

2. unsafe repository エラーの原因

git の脆弱性対策。
悪意を持った第三者がネットワーク共有ドライブ外部ストレージ(USBメモリなど)などに置かれた ローカルリポジトリ ( .gitフォルダ ) を改竄して、gitクライアントに任意のコマンドを実行させる脆弱性が発見された。そこで第三者による改竄可能なフォルダに置かれた .gitフォルダ を不用意に開いてしまわないように制限がかけられた。gitの設定(git config)で明示的に指定された安全な .gitフォルダ に限り開くことができる。

 

3. unsafe repository エラーの発生条件

  • 外部ストレージ(USBメモリなど)』に置かれた .gitフォルダ (ローカルリポジトリ)を含むワークフォルダにgitコマンドでアクセスしようとした。
  • ネットワークドライブ』に置かれた .gitフォルダ を含むワークフォルダにgitコマンドでアクセスしようとした。
  • Windowsアプリ(たとえば SourceTree)から『仮想ネットワークドライブ (\\wsl$) 経由』でWSL(Windows Subsystem for Linux)の中の .gitフォルダ を含むワークフォルダにアクセスしようとした。
  • UNIX系OSにおいて、自分以外にownershipがあるリポジトリにアクセスしようとした。
    •  

      4. unsafe repository エラーの解決方法

      4.1. ベストな解決方法:第三者が改竄できる場所に .gitフォルダ を置かない

      • 第三者が改竄できる場所に .gitフォルダ を置かない。
      • 第三者が改竄できない場所に .gitフォルダ を移動/複製する。
        • ただし、移動/複製の前に改竄されていれば、gitの脆弱性を突破されるリスクがある。

      4.2. ベターな解決方法:安全なフォルダ(ディレクトリ)として設定する

      たとえば、WSL (Windows Subsystem for Linux) の中のフォルダを移動することは現実的ではなく、第三者による改竄リスクは小さいため、個別に安全なディレクトリ safe.directory として指定することで gitコマンドのアクセス制限を回避できます。

      4.2.1. git configコマンドで設定する

      4.2.2. .configを直接編集する

       

      参考リンク