GNU/Linux >> Linux の 問題 >  >> Linux

sudo をトレースできません。有効な uid がゼロでないことを報告します

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 を使用することを検討してください。これは、動作を表示することはできても変更することはできないため、同じリスクは発生しません。


    Linux
    1. 効果的なプロセス管理のための8つのLinuxコマンド

    2. DebianでSudoユーザーを作成する-ステップバイステップのプロセス?

    3. メモリ使用量のログを記録できるツール?

    1. Linux –Sudoは/etc / sudoersを開くことができませんか?

    2. straceを使用して子プロセスを追跡するには?

    3. エラー:ld.so:LD_PRELOAD からのオブジェクト 'libgtk3-nocsd.so.0' をプリロードできません

    1. プロセスがメモリを使い果たしているように見えない場合、メモリを割り当てることができません

    2. 重要なプロセスが中断されないようにシャットダウンを無効にする方法は?

    3. Docker-compose:sudo なしではビルドできませんが、sudo なしでコンテナーを実行できます