답변:
프로세스가 루트 권한으로 실행중인 경우 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 값 사이를 전환 할 수 있습니다. 루트 권한이있는 프로그램을 사용하면주의해야합니다. 변경을 되돌릴 수 없는지 결정하고 작업에 올바른 기능을 사용해야합니다. (setuid ()를 루트로 사용하는 것은 되돌릴 수 없습니다.)
이미 별도의 프로세스에서 실행중인 프로세스를 변경하려고하면 표준 방법이 없으며 비표준 방법이 많이 있는지 잘 모르겠습니다. / dev / kmem에 정보를 담을 수는 있지만 'thin ice'라는 표현이 떠 오릅니다.
"명령 줄에서"실행중인 프로세스로이를 수행 할 방법이 없습니다.
나는 확실하게 말할 수있다. 유일한 "아마도"는 / proc 였고 나는 거기에서 (문자 그대로 Google을 통해) 찔 렀고 EUID를 변경할 수있는 / proc의 모든 것에 대해 막 다른 골목에 빠졌습니다. / proc / {pid} / status에 UID 및 GID 설정이 무엇인지 배울 수 있지만 적어도 내가 알 수있는 한 / proc에있는 것을 사용하여 변경할 수는 없습니다.
그러나 변경하려는 프로세스의 소스 코드를 제어하는 경우 명령 줄에서 프로세스의 EUID를 변경하는 방법과 같은 작업을 쉽게 수행 할 수 있습니다. SIGUSR1에 대한 신호 처리기를 구현하고 프로세스가 자체 EUID를 변경하도록 할 수 있지만 해당 신호를 수신 할 때 필요합니다. 그런 다음 요청한대로 명령 줄에서 "kill"을 통해 SIGUSR1 신호를 보내는 프로세스를 보내면 EUID가 변경됩니다.
이것은 당신이 생각한 것이 아닐 수도 있지만, ... 어떻게 해야하는지에 대한 귀하의 질문에 대한 대답입니다 ... 그리고 그것은 내가 생각할 수있는 유일한 대답입니다.