EUIDとは異なるRUIDを使用してプロセスを開始(または検索)する方法は?

EUIDとは異なるRUIDを使用してプロセスを開始(または検索)する方法は?

これらのいずれかからインスピレーションを受けて以前に回答された質問、所有者以外のユーザーがプログラムを実行しようとしていますが、プロセスのRUIDとEUIDは同じままです。 (私が答えを誤って読まない限り、これは違いを得る方法ではありません。)

その後、別のユーザーでプログラムを開こうとしましたが、sudoまだ結果はありません。

既存のプロセスをすべてスキャンしましたが(私の考えでは)、ps axo euid,ruid,comm -e gどちらも他のRUIDとEUIDを持っていません。

違いをどのように達成したり、プロセスを見つけることができますか?一部の手順で間違いを犯した可能性があるため、一部の特定のコマンドが役に立ちます。

答え1

自分に属していない実行可能ファイルを呼び出すには問題はありません。システムのほとんどの実行可能ファイルはルートに属し、それを実行してもユーザーに追加の権限は付与されません。

これだけユーザーIDの設定次に始まる実行可能ファイル有効なUID実行ファイルの所有者に設定されていますが、実際のUIDそれでも呼び出しプロセスの実際のUIDです。

sudosetuid ルートなので、実効 UID 0 と実 UID で実行されます。ただし、別のコマンドを呼び出すと、ターゲットユーザーの有効UIDと実際のUIDが設定されます。sudoRUIDとは異なるEUIDを観察するには、自分自身をキャプチャする必要があります。パスワードの入力を求められない場合は、sudoすぐにパスワードを表示できません。

passwdroot以外のユーザーでコマンドを実行すると、さまざまなUIDを簡単に観察できます。メッセージが表示されたら、ps別の端末で実行します。

ps -o user,ruser -C passwd

別のEUIDとRUIDを使用して実行されているすべてのプロセスを見つけるには、次のものを使用できます。

ps -e -o user= -o ruser= | awk '$1 != $2'

setuidプロセスが見つからないのは正常です。ほとんどのsetuidプロセスは寿命が短いです。

答え2

誰かがコマンドがuidと異なるeuidを表示したい場合id(マンページの動作)、1つの方法は一時的なcプログラムでコマンドを実行することです。

$ sudo gcc -o test.bin -xc - <<EOF
     #include <stdlib.h>
     #include <unistd.h>
     int main() { seteuid(0); system("id"); }
EOF
$ sudo chmod +s test.bin && ./test.bin && sudo rm test.bin

結果は次のとおりです。

uid=1000(user) gid=1000(user) euid=0(root) egid=0(root) groups=0(root),1000 ...

関連情報