Odpowiedzi:
Jeśli proces działa z uprawnieniami roota , możesz dołączyć gdb do procesu i wywołać seteuid z tego procesu.
Przykład:
[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
Jeśli mówisz o procesie zmiany własnego identyfikatora EUID, istnieje wiele sposobów, aby to zrobić.
W zależności od efektywnego UID programu i od tego, czy istnieje zapisany UID, możesz być w stanie przełączać się między dwiema wartościami EUID w programie innym niż root. Korzystając z programu uprzywilejowanego do rootowania, musisz zachować ostrożność - musisz zdecydować, czy zmiana powinna być nieodwracalna, i użyć poprawnej funkcji dla zadania. (Używanie setuid () jako root jest nieodwracalne).
Jeśli próbujesz zmienić proces, który już działa z oddzielnego procesu, nie ma standardowego sposobu na zrobienie tego - i nie jestem pewien, czy istnieje wiele niestandardowych sposobów. Możesz być w stanie wrzucić trochę informacji do / dev / kmem, ale przychodzi mi na myśl wyrażenie „cienki lód”.
Nie ma możliwości zrobienia tego „z wiersza poleceń” do dowolnego uruchomionego procesu.
Mogę to powiedzieć z pewną pewnością; jedynym „być może” był / proc, a ja się tam przeszukiwałem (dosłownie i przez Google) i wpadłem w ślepy zaułek na wszystko w / proc pozwalające na zmianę EUID. Możesz DOWIEDZ SIĘ, jakie są ustawienia UID i GID w / proc / {pid} / status - ale nie możesz ich zmienić za pomocą czegokolwiek w / proc, przynajmniej o ile wiem.
Ale wystarczy, aby coś takiego działało - sposób na zmianę identyfikatora EUID procesu z wiersza poleceń - jeśli kontrolujesz kod źródłowy procesu, który chcesz zmienić. Możesz zaimplementować procedurę obsługi sygnału dla powiedzmy SIGUSR1 i zlecić procesowi zmianę własnego identyfikatora EUID, jednak potrzebujesz go, gdy odbierze ten sygnał. Następnie wystarczy wysłać proces, który sygnalizuje SIGUSR1, za pomocą polecenia „kill” ... z wiersza polecenia, tak jak prosiłeś ... i zmieni on dla ciebie swój identyfikator EUID.
Być może nie o tym myślałeś, ale ... to odpowiedź na twoje pytanie, jak to zrobić ... i to jedyna odpowiedź, jaką mogę wymyślić.