sudo をトレースする方法
$ sudo strace -u <username> sudo -k <command>
<オール> sudo
strace
を実行します ルートとして。strace
sudo
を実行します <username>
として -u
経由で渡される オプションsudo
以前の sudo
からキャッシュされた資格情報を削除します -k
で オプション (パスワードを再度要求するため) を実行し、 <command>
を実行します .
2 番目の sudo
tracee (トレースされるプロセス) です。
現在のユーザーを <username>
の場所に自動的に配置するため 、 $(id -u -n)
を使用 .
strace で sudo が機能しない理由
チャールズによるこの回答に加えて、ここに execve()
があります マニュアルページには次のように書かれています:
パス名で参照されるプログラム ファイルに set-user-ID ビットが設定されている場合、呼び出しプロセスの有効なユーザー ID は、プログラム ファイルの所有者のものに変更されます。同様に、プログラム ファイルの set-group-ID ビットが設定されると、呼び出しプロセスの有効なグループ ID がプログラム ファイルのグループに設定されます。
以下のいずれかが真の場合、前述の実効 ID の変換は実行されません (つまり、set-user-ID および set-group-ID ビットは無視されます)。
- 呼び出しスレッドに no_new_privs 属性が設定されている (prctl(2) を参照);
- 基礎となるファイルシステムが nosuid でマウントされている (mount(2) の MS_NOSUID フラグ)。または
- 呼び出しプロセスがトレースされています。
上記のいずれかに該当する場合、プログラム ファイルの機能 (capabilities(7) を参照) も無視されます。
プロセスをトレースし、そのメモリを検査または変更するための権限については、サブセクション Ptrace アクセス モードのチェック で説明されています。 セクション メモ ptrace(2) マニュアルページのこの回答でこれについてコメントしました。
セキュリティ上の理由から、setuid ビットと ptrace (デバッガーでバイナリを実行するために使用される) の両方を同時に受け入れることはできません。過去にこの制限を適用できなかったことが CVE-2001-1384 につながりました。
その結果、セキュリティを考慮して設計されたオペレーティング システムは、setuid バイナリの実行時に ptrace を受け入れることを停止するか、ptrace が使用されているときに setuid ビットを受け入れることに失敗します。
Linux では、代わりに Sysdig を使用することを検討してください。これは、動作を表示することはできても変更することはできないため、同じリスクは発生しません。