LoginSignup
0
0

More than 1 year has passed since last update.

高レイヤのアプリ開発者にも役立つ strace の実践例(1)

Last updated at Posted at 2021-07-04

概要

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

ということでこのファイルを消せば問題解決である.

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0