Risposte:
Se il processo è in esecuzione con privilegi di root , è possibile collegare gdb al processo e chiamare seteuid dall'interno di quel processo.
Esempio:
[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
Se stai parlando di un processo che modifica il proprio EUID, ci sono molti modi per farlo.
A seconda dell'UID effettivo del programma e se esiste un UID salvato, potresti essere in grado di passare tra due valori EUID in un programma non root. Con un programma con privilegi di root, devi stare attento: devi decidere se la modifica deve essere irreversibile e utilizzare la funzione corretta per il lavoro. (L'uso di setuid () come root è irreversibile.)
Se stai cercando di cambiare un processo che è già in esecuzione da un processo separato, allora non esiste un modo standard per farlo - e non sono sicuro che ci siano molti modi non standard. Potresti essere in grado di annotare alcune informazioni in / dev / kmem, ma viene in mente l'espressione "ghiaccio sottile".
Non c'è modo di farlo "dalla riga di comando" a qualsiasi processo in esecuzione.
Posso dirlo con una certa sicurezza; l'unico "forse" era / proc e ho cercato in giro (letteralmente e tramite google) e mi sono imbattuto in un vicolo cieco per quanto riguarda qualsiasi cosa in / proc che consente di cambiare l'EUID. Puoi IMPARARE quali sono le impostazioni UID e GID in / proc / {pid} / status - ma non puoi cambiarle usando nulla in / proc, almeno per quanto ne so.
Ma è abbastanza facile far funzionare qualcosa del genere - un modo per cambiare l'EUID di un processo, dalla riga di comando - se controlli il codice sorgente del processo che vuoi cambiare. È possibile implementare un gestore di segnali per esempio SIGUSR1 e fare in modo che il processo cambi il proprio EUID, tuttavia è necessario quando riceve quel segnale. Quindi invieresti semplicemente il processo che SIGUSR1 segnala, tramite "kill" ... dalla riga di comando, come hai chiesto ... e cambierebbe il suo EUID per te.
Questo potrebbe non essere quello a cui stavi pensando, ma ... è una risposta alla tua domanda su come farlo ... ed è l'unica risposta a cui riesco a pensare.