Antworten:
Wenn der Prozess mit Root-Rechten ausgeführt wird , können Sie gdb an den Prozess anhängen und seteuid von diesem Prozess aus aufrufen.
Beispiel:
[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
Wenn Sie über einen Prozess sprechen, der seine eigene EUID ändert, gibt es eine Reihe von Möglichkeiten, dies zu tun.
Abhängig von der effektiven UID des Programms und davon, ob eine gespeicherte UID vorhanden ist, können Sie in einem Nicht-Root-Programm möglicherweise zwischen zwei EUID-Werten wechseln. Bei einem Root-privilegierten Programm müssen Sie vorsichtig sein - Sie müssen entscheiden, ob die Änderung irreversibel sein soll, und die richtige Funktion für den Job verwenden. (Die Verwendung von setuid () als root ist irreversibel.)
Wenn Sie versuchen, einen Prozess zu ändern, der bereits von einem separaten Prozess ausgeführt wird, gibt es keine Standardmethode - und ich bin mir auch nicht sicher, ob es viele nicht standardmäßige Methoden gibt. Sie könnten in der Lage sein, einige Informationen in / dev / kmem abzuspeichern, aber der Ausdruck "dünnes Eis" kommt Ihnen in den Sinn.
Es gibt keine Möglichkeit, dies "von der Kommandozeile aus" für jeden laufenden Prozess zu tun.
Ich kann das mit einiger Gewissheit sagen; Das einzige "Vielleicht" war / proc und ich habe mich dort umgesehen (buchstäblich und über Google) und bin in eine Sackgasse geraten, was irgendetwas in / proc betrifft, das das Ändern der EUID ermöglicht. Sie können die UID- und GID-Einstellungen in / proc / {pid} / status LERNEN - aber Sie können sie mit / proc nicht ändern, zumindest soweit ich das beurteilen kann.
Es ist jedoch einfach genug, so etwas zum Laufen zu bringen - eine Möglichkeit, die EUID eines Prozesses über die Befehlszeile zu ändern -, wenn Sie den Quellcode des Prozesses steuern, den Sie ändern möchten. Sie können einen Signal-Handler für SIGUSR1 implementieren und den Prozess seine eigene EUID ändern lassen, je nachdem, wann er dieses Signal empfängt. Dann würden Sie einfach den Prozess, den SIGUSR1 signalisiert, über "kill" ... von der Kommandozeile aus senden, wie Sie gefragt haben ... und die EUID für Sie ändern.
Das ist vielleicht nicht das, woran Sie gedacht haben, aber ... es ist eine Antwort auf Ihre Frage, wie es geht ... und es ist die einzige Antwort, die mir einfällt.