🚓

GitHubのIDを変更したら本名を公開するハメになったので調査した

2021/09/06に公開

起きたこと

先日、GitHubのIDを変更したら、僕の本名がGitHub上に大公開されてしまいましたw
本件の対処と調査の記録を書きます^^

以下記事と同じことが起きていました。

原因

コミットのAuthorが漢字の本名になっていた

  • OSのユーザー名を漢字の本名に設定していた。
  • gitconfigのuser.nameは、デフォルトだとOSのユーザー名になる。

上記2つから、GitのコミットのAuthorが漢字の本名になっていました。
実際に.gitconfigを確認すると、以下のようになっていました。

[user]
        name = 本名
        email = shlia34@users.noreply.github.com

この時点で、Gitのコミットには本名が書かれてしまってるわけです。リポジトリをクローンして、git logなどで覗かれると名前がバレます。

GitHubのIDを変更したことによって、IDとnoreplyアドレスが切り離された

もともとGitHubが提供してくれているnoreplyアドレスを使用していました。
shlia34@users.noreply.github.comというアドレスでGitにも登録してましたが、shira79にGitHubのIDを変更したため、一致しなくなりました。

Gitのコミットに紐づくアドレスとGitHubに登録してるアドレスが一致する場合、GitHubのアバター・ユーザー名を表示するという仕様らしいです。
(※詳しくは記事末尾の「番外編(なりすましについて)」で触れます。)

つまり、今までは一致していたアドレスがIDの変更にとって一致しなくなり、GitHubアカウントではなくGitの情報が表示され今回の現象が起きたということになります。

対応

まずは、.gitconfigを編集して、名前を適当に、アドレスは今回のIDと対応するよう、変更しました。これで今後のコミットは大丈夫です。

次に、過去のコミットの名前とアドレスを変更したいと思います。

僕のコミットは全て僕個人のリポジトリでしたので、以下のコマンドでコミット履歴を変更してからgit push --forceをかましました。(無理やり感が強いですが)

GitのCommitユーザを修正する方法 Qiita

git filter-branch -f --env-filter   "GIT_AUTHOR_NAME='shira'; \
   GIT_AUTHOR_EMAIL='shira79@users.noreply.github.com'; \
   GIT_COMMITTER_NAME='shira'; \
   GIT_COMMITTER_EMAIL='shira79@users.noreply.github.com';"   HEAD
git push --force origin master

対応は以上です。

番外編(なりすましについて)

Gitのコミットに紐づくアドレスとGitHubに登録してるアドレスが一致する場合、GitHubのアバター・ユーザー名を表示するという仕様らしいです。
(ただ正式な記載は見つけられなかったです><)

僕は気づいてしまったんです... ホームディレクトリの.gitconfigのメールアドレスを誰かがGithubアカウントに登録しているメールアドレスに書き換えると以降の自分のすべてのコミットをその誰かのアカウントが行ったとGithub上では表示されることに...

なりすまし防止!Githubへの署名付きコミット Qiita

.gitconfigを書き換えることでなりすましが成立するのではと思い、友人に許可をもらった上で実験しました^^

手順は以下になります。

  1. git cloneからのgit logでcommitに紐づくメールアドレスを確認
  2. .gitconfiguserブロックのemailを取得したアドレスに変更
  3. コミット&プッシュする

実際のリポジトリ
https://github.com/shira79/git-narisumasi

上記コミットのうち、Verifiedタグがついているものは本人のコミットですが、それ以外は僕がなりすましたコミットになります。

Verifiedタグは署名付きのコミットの場合に表示されます。署名付きの場合、本人であることを保証します。GPGまたはS/MIMEを使うことで署名をすることができます。
GitHub Docs コミットに署名する

なりすましを防ぐためには、署名付きでコミットしましょうということになります。とはいえ署名なしコミットであればは問題なくできますしGitHubも変わらずなりすましたかのような表示のままです。

すなわち、以下のように整理できるかと思います。

  • 署名付きコミット → 本人であることを保証する
  • 署名なしコミット → 本人かどうかわからない(名乗っているだけ)

ちなみにGitHubのリポジトリのブランチの設定画面から、署名済みコミットしか許容しないというオプションもあったりします^^

感想

  • 名前を晒したところでそんなに困らない
  • 少なくとも僕になりすまそうと思う人はいない

参考リンク

Discussion