Réponses:
Si le processus s'exécute avec des privilèges root , vous pouvez attacher gdb au processus et appeler seteuid depuis ce processus.
Exemple:
[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
Si vous parlez d'un processus modifiant son propre EUID, il existe de nombreuses façons de procéder.
Selon l'UID effectif du programme et s'il existe un UID enregistré, vous pouvez basculer entre deux valeurs EUID dans un programme non root. Avec un programme root privilégié, vous devez être prudent - vous devez décider si le changement doit être irréversible et utiliser la fonction correcte pour le travail. (L'utilisation de setuid () en tant que root est irréversible.)
Si vous essayez de modifier un processus qui s'exécute déjà à partir d'un processus distinct, il n'y a pas de moyen standard de le faire - et je ne suis pas sûr qu'il existe de nombreuses façons non standard non plus. Vous pourrez peut-être dink quelques informations dans / dev / kmem, mais l'expression «glace mince» vient à l'esprit.
Il n'y a aucun moyen de faire cela "à partir de la ligne de commande" pour n'importe quel processus en cours d'exécution.
Je peux dire cela avec une certaine certitude; le seul "peut-être" était / proc et j'ai fouillé dedans (littéralement et via google) et je suis tombé dans une impasse concernant quoi que ce soit dans / proc permettant de changer l'EUID. Vous pouvez APPRENDRE quels sont les paramètres UID et GID dans / proc / {pid} / status - mais vous ne pouvez pas les changer en utilisant quoi que ce soit dans / proc, du moins pour autant que je sache.
Mais il est assez facile de faire fonctionner quelque chose comme ça - un moyen de changer l'EUID d'un processus, à partir de la ligne de commande - si vous contrôlez le code source du processus que vous souhaitez modifier. Vous pouvez implémenter un gestionnaire de signal pour, disons, SIGUSR1 et demander au processus de changer son propre EUID comme vous en avez besoin quand il reçoit ce signal. Ensuite, vous enverriez simplement le processus que le signal SIGUSR1, via "kill" ... depuis la ligne de commande, comme vous l'avez demandé ... et cela changerait son EUID pour vous.
Ce n'est peut-être pas ce à quoi vous pensiez, mais ... c'est une réponse à votre question de savoir comment le faire ... et c'est la seule réponse à laquelle je puisse penser.