メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

GitHubのメールアドレスが漏れる?コミット時のメールアドレスにnoreplyを設定

経緯

釣りなタイトルでスミマセンm(_ _)m
前回、npmアカウントのプロフィールに指定するメールアドレスが全世界公開設定であり、その公開範囲が変更できないことを取り上げました。

その際、GitHubではnoreplyを設定することを推奨している。
と書かれており「あれ?これはもしや…」と思って試したらこれがビンゴで
他人のメールアドレスが引っこ抜けることが判りました。

たまに「あなたのGitHubでの活躍を拝見したのでスカウトします」的なspamがあり、このアドレスの入手方法が気になっていましたが、おそらく次に示す方法なのかなと思います。(※もちろん、必ずしもスカウトがspamとは限りません)

GitHubで使用しているメールアドレスも第三者に知れ渡っている?

ひょっとして"GitHubに登録しているメールアドレスが第三者に知れ渡ってるのではなかろうか"と思い、設定やヘルプを見直したところ答えは「厳密にはNo」。知れ渡る可能性があるのは、アカウントに登録したメールアドレスではなく、コミットに設定しているメールアドレスが取得できてしまいます。とはいえ、同じにしている方は多いのではないでしょうか?

実際に取得してみた

f:id:ryoichi0102:20171011090029p:plain

ご覧の通り、git cloneしてgit logするとメールアドレスが見えてしまいます。
(今回はGitHub上でメールアドレスを公開設定にしている 且つ 有名なリポジトリを使用させて頂きました)

クローラーなどで、たくさんのリポジトリからコミットログを取得してメールアドレスを収集するなんてことは容易にできてしまいます。

何故こういう事が起こりがちなのか?

GitHubではコミット時に使用するユーザー名とメールアドレスを設定できます。これを正しく設定しておくと、コミットログ一覧を表示した際にリンクされたりなどするため、Gitクライアントで設定する際に何気なくGitHubに登録しているメールアドレスを設定しがちです。

f:id:ryoichi0102:20171011234236p:plain

ではどうすればよいのか

メールアドレスを非公開にするにはGitHubで提供している noreply のメールアドレスを使用します。Web上で編集する場合にはアカウント設定にてKeep my email address privateを選択し、Gitクライアントなどから使用する場合にはコミットのメールアドレスにnoreplyのメールアドレスを設定します。

また、誤ってprivateのメールアドレスを使用してpushしないような設定もあります。

Blocking command line pushes that expose your personal email address - User Documentation
https://help.github.com/articles/blocking-command-line-pushes-that-expose-your-personal-email-address/

noreplyのアドレスはアカウント登録時期によって違う

Note: If you created your GitHub account after July 18, 2017, your GitHub-provided no-reply email address is a seven-digit ID number and your username in the form of ID+username@users.noreply.github.com. If you created your GitHub account prior to July 18, 2017, your GitHub-provided no-reply email address is your username in the form of username@users.noreply.github.com. You can get an ID-based GitHub-provided no-reply email address by selecting (or deselecting and reselecting) Keep my email address private in your email settings.

つまり、GitHubでnoreplyとして認識されるメールアドレスは、
・2017/06/18より後にアカウントを作成した場合は "7桁のID+ユーザー名"
・2017/06/18より前にアカウントを作成した場合は "ユーザー名"
これに @users.noreply.github.com を付けたものになります。

prior toは○○より後に、afterは○○より前に、なので 2017/06/18 ちょうどにアカウント登録した方は…どちらなんでしょうかw (これは一旦置いときます)

2017/06/18より後にアカウントを作成した場合のnoreplyメールアドレスの確認方法

【ID】+【ユーザー名】@users.noreply.github.com

これがGitHub内でサポートされるnoreplyのメールアドレスの形式になります。
【ID】部分は画面右上のアイコンメニュー⇒Settings⇒サイドメニューのEmails、ここで確認できます。

f:id:ryoichi0102:20171011182606p:plain

2017/06/18より前にアカウントを作成した場合のnoreplyメールアドレス

【ユーザー名】@users.noreply.github.com

簡単ですね。

Keep my email address private のチェックボックスをオンにしましょう。

We'll remove your public profile email and use 32690516+ryoichi0102@users.noreply.github.com when performing web-based Git operations and sending email on your behalf. If you want command line Git operations to use your private email you must set your email in Git.

とある通り、Web上で編集した場合は自動的に表示されているnoreplyのメールアドレスになりますが、Gitクライアントを使用してcommit/pushする場合は、Gitクライアントにこの設定をして下さい、とあります。

※ 上記 32690516 部分は各自違います。

noreplyアドレスの設定方法

noreplyなメールアドレスが解ったので、次は設定です。
これはCLIを使用した一般的なGitの設定と同じです。
既に設定されている場合は、二重でaddしなように注意しましょう。(上書きはされないので)

グローバルの設定であれば

git config --global --list

で設定一覧を確認して、設定が存在した場合は、

git config --global --unset user.email

で一旦削除した後に、noreplyのメールアドレスを設定します。

git config --global --add user.email my-github-user-name@users.noreply.github.com
または
git config --global --add user.email 32690516+ryoichi0102@users.noreply.github.com

です。

f:id:ryoichi0102:20171011235803p:plain

f:id:ryoichi0102:20171011235643p:plain

これで安心ですね!

参考

About commit email addresses - User Documentation
https://help.github.com/articles/about-commit-email-addresses/

github.com

追記

2020/02/12 少しでも読みやすくなるよう、文章を少し追記して、日本語の表現を見直しました。

npmのメールアドレスが公開な件について #NodeJS

npmとは

Node.jsのパッケージ管理システムであり、Node Package Managerの略です。
また、それらモジュール郡をホスティングしているサイトもnpmです(npmjs.com)
Mavenで言えばセントラルリポジトリ的な役割でしょう。

作成したモジュールをnpmで公開するにはnpmjs.comにサインアップする必要があります。

www.npmjs.com

npmjs.comへのアカウント登録

こちらがサインアップ画面です。

f:id:ryoichi0102:20171005213450p:plain

Public Emailという入力欄があり、登録ボタンの直前には
"Your email address will show on your profile page, but npm will never share or sell it."
とあります。
表示はするけど、引き渡したり売ったりはしないよ、ということですね。

登録後のプロフィール画面でも表示されています。

f:id:ryoichi0102:20171004092302p:plain

いやいやいやいや、これスクレイピングしたら簡単に収集できるじゃないっすか!
全世界にメールアドレスを公開するのはイヤですね。

なぜこうなっているのか調べた感じは以下の通り

・メールアドレスが公開になっているのはユーザー間でモメた時などの連絡に使用するためpublicになっている。
・だが、npmjsにフォーラム機能やサイトを通じて本人にメールが送信されるような仕組みを用意すれば良いだろうと、メールアドレス公開に反発してる人が多いのも事実。(私もそう思う)
・または、画面上にjsでレンダリングしてクローラーの収集を回避するなど。
・そしてGitHubでは、メールアドレスをprivateにしたり、コミット時に使用するメールアドレスはダミーのメールアドレス(noreply)が用意されており それを設定することも推奨されていることにまで言及され、とにかくPublic反対派が大多数。
・結局みんな、npm専用のメールアカウントを作ることになり、そのメールボックスspamでいっぱいに…初期のphp forumの頃のように。

まとめ

解決されなさそうなので、npm用のメールアカウントを作成しましょう。。

参考

github.com

github.com

Adminerが手軽で便利。MySQLなどデータベースに繋ぐ

Adminerとは

Webブラウザから使用するPHP製データベースクライアントです。
サブタイトルにDatabase management in a single PHP fileと記載のある通りphpファイルを置くだけです。
phpMyAdminに似ていますが、MySQL以外にも対応しています。

発音はアドマイナーです。

公式サイト https://www.adminer.org/
GitHub vrana/adminer: Database management in a single PHP file

phpMyAdminよりイイ

インストールは公式サイトからダウンロードして、FTPPHPファイル置くだけですから手軽です。使いにくいレンタルサーバーの管理画面からphpMyAdminを入れてetc...とやらなくて良いのです。
たとえばCakeであればFTP./app/webroot/配下にダウンロードしたadminer-4.3.1-mysql.phpを置くだけで使えます。

何が良いかって、緊急時にサクッと繋げられるのが良いですね。

f:id:ryoichi0102:20170926174522p:plain

上記キャプチャがログイン画面です。
一通りの情報を入力するところがありますね。
ポートの指定は サーバー名:ポート番号 です。(例 127.0.0.1:3306)
3306の場合は省略可能です。

ログイン後はphpMyAdminと同じように、SQLの発行やデータのインポート/エクスポートなど色々出来ます。

※ 緊急時の利用であれば、作業が終わった後にアップしたphpファイルを消しておくことをオススメします。

余談: ファーストサーバーがZenlogicに移行した影響で…

通知から1ヶ月ぐらいでサクッと移行されてしまった気がするのですが、移行前のMySQL環境がポート番号を変更され、localhostからの接続ができないというナカナカの対応をしてくれたようです。

Request URL: /
Stack Trace:
#0 /app/webroot/index.php(108): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#1 {main} yyyy-mm-dd hh:mm:ss Error: [MissingConnectionException] Database connection "Mysql" is missing, or could not be created. Exception Attributes: array (
'class' => 'Mysql',
'message' => 'SQLSTATE[28000] [1045] Access denied for user \'mysqluser\'@\'localhost\' (using password: YES)',
'enabled' => true, )

こんなん出るしね。
復旧にはDB接続設定を、localhostからループバックアドレス127.0.0.1に変更して、ポートの指定を変更しないといけないという対応。
特に下線の対応がなかなかのノーヒントというか、宝探し的というか、情報が纏まっていないというか…

DBのダンプを取って移行しようにも、外部からの接続が不可だし(これは仕方ないとして)、phpMyAdminが不可になってて、管理画面からのバックアップ機能も停止。
陸の孤島的な。。

そんな時はAdminerですよ!

参考

Adminer / Bugs and Features / #287 Connect to another port