回答:
プロセスがroot-privilegesで実行されている場合、プロセスにgdbをアタッチし、そのプロセス内からseteuidを呼び出すことができます。
例:
[root@user-desktop ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
[root@user-desktop ~]# gdb /bin/bash $$
GNU gdb Fedora (6.8-27.el5)
# cut copyright & license statements
This GDB was configured as "x86_64-redhat-linux-gnu"...
# cut some initialization output
0x00000036b0a99335 in waitpid () from /lib64/libc.so.6
(gdb) call seteuid(500)
$1 = 0
(gdb) quit
The program is running. Quit anyway (and detach it)? (y or n) y
Detaching from program: /bin/bash, process 29017
[root@user-desktop ~]# id
uid=0(root) gid=0(root) euid=500(user) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
独自のEUIDを変更するプロセスについて話している場合、それを行う方法はたくさんあります。
プログラムの有効なUIDと、保存されたUIDがあるかどうかに応じて、非ルートプログラムで2つのEUID値を切り替えることができる場合があります。ルート特権プログラムでは、注意する必要があります。変更を元に戻すことができるかどうかを判断し、ジョブに正しい機能を使用する必要があります。(rootとしてsetuid()を使用することは元に戻せません。)
すでに別のプロセスから実行されているプロセスを変更しようとしている場合、それを行う標準的な方法はありません。また、多くの非標準的な方法があるかどうかもわかりません。/ dev / kmemにいくつかの情報を入れることもできますが、「シンアイス」という表現が思い浮かびます。
これを「コマンドラインから」実行中のプロセスだけに実行する方法はありません。
確かに言えることです。唯一の「たぶん」は/ procであり、そこで(文字通りおよびgoogleを介して)突っ込み、EUIDの変更を許可する/ procのすべてに関して行き詰まりに陥りました。/ proc / {pid} / statusにあるUIDとGIDの設定を確認できますが、少なくとも私が知る限り、/ procにあるものを使用して変更することはできません。
しかし、変更したいプロセスのソースコードを制御する場合、そのようなものを機能させることは簡単です-コマンドラインからプロセスのEUIDを変更する方法です。たとえばSIGUSR1のシグナルハンドラを実装し、プロセスが独自のEUIDを変更するようにできますが、そのシグナルを受信したときに必要になります。次に、コマンドラインから "kill"を介してSIGUSR1シグナルを送信するプロセスを送信します。これは、要求されたとおりです...そして、EUIDが変更されます。
これはあなたが考えていたものではないかもしれませんが、...それはあなたがそれをどうするかというあなたの質問に対する答えです...そしてそれは私が考えることができる唯一の答えです。