概要
Linux システムコールトレーサである strace の実行例である.
詳細
リモート Git リポジトリに Push しようとしたところ、次のエラーが出た.
現象としては全く別のアカウント (ここでは oldname
) を使って GitHub にアクセスしようとしている.
恐らく何かしらの設定ファイルに記したアカウント情報を見て GitHub に接続しているのだろうが、ファイルに見当が付かない.
この場合、Linux のシステムコールである open 関数を使っていると想像できるので、システムコールトレーサである strace コマンドを使って調査することが可能である.
$ git push -u origin master
remote: Permission to <GitHub の URL>/tutorial.git denied to oldname.
fatal: unable to access 'https://github.com/<GitHub の URL>/tutorial.git/': The requested URL returned error: 403
補足
strace の詳細は Binary Hacks ―ハッカー秘伝のテクニック100選 (オライリ) を見ても良い.
// 15年も前の本なので、流れが緩やかな低レイヤといえども使用不可になった技がいくつかある.
// 例: statifier
実践
1. strace を使って調査したいコマンドを実行する
次のように「strace -f -o ログ出力先 本来のコマンド」という使い方をする
$ strace -f -o /tmp/log-git git push -u origin master
するとログ「/tmp/log-git
」が生成されるので見てみる.
ログは末尾から辿ると、原因特定が早いことが多い.
2. strace の実行ログを見て原因を調べる
疑義箇所として 🛑 が見つかった.
略
4226 openat(AT_FDCWD, "/home/foo/.netrc", O_RDONLY) = 3 🛑
4226 fstat(3, {st_mode=S_IFREG|0600, st_size=55, ...}) = 0
4226 read(3, "machine github.com\nlogin jofrnpn"..., 4096) = 55
4226 read(3, "", 4096) = 0
4226 close(3) = 0
略
3. /home/foo/.netrc を見てみる
github.com に接続する場合に使用してほしいアカウントとパスワードをベタ書きしていましたとさ.
$ cat /home/foo/.netrc
machine github.com
login oldname
password p@ssw0rd
ということでこのファイルを消せば問題解決である.
以上