Answers:
如果该进程以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,您可以在非根程序中的两个EUID值之间切换。对于具有root用户特权的程序,您必须要小心-必须确定更改是否应不可逆,并为作业使用正确的功能。(将setuid()用作根是不可逆的。)
如果您要更改已经从单独的流程运行的流程,则没有标准的方法可以执行,而且我不确定还有很多非标准的方法。您也许可以在/ dev / kmem中查看一些信息,但是“细冰”这个表述浮现在脑海。
没有“从命令行”对任何正在运行的进程执行此操作的方法。
我可以肯定地说。唯一的“也许”是/ proc,我在那里(从字面上和通过google)戳了一下,就/ proc中允许更改EUID的内容陷入僵局。您可以了解/ proc / {pid} / status中的UID和GID设置-但至少在我所知的范围内,无法使用/ proc中的任何内容进行更改。
但是,如果要控制要更改的流程的源代码,则可以很容易地实现类似的工作-一种从命令行更改流程的EUID的方法。您可以为SIGUSR1实现一个信号处理程序,并让进程更改其自己的EUID,但是当它接收到该信号时就需要它。然后,您只需按照要求从命令行通过“ kill”发送SIGUSR1信号的进程,它将为您更改其EUID。
这可能不是您所想的,但是...这是您如何执行此问题的答案...,这是我能想到的唯一答案。