Respostas:
Se o processo estiver sendo executado com privilégios de root , você poderá anexar o gdb ao processo e chamar o seteuid de dentro desse processo.
Exemplo:
[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 você está falando de um processo que altera seu próprio EUID, há várias maneiras de fazer isso.
Dependendo da UID efetiva do programa e da existência de uma UID salva, você poderá alternar entre dois valores de EUID em um programa não raiz. Com um programa com privilégios de root, você precisa ter cuidado - você precisa decidir se a alteração deve ser irreversível e usar a função correta para o trabalho. (Usar setuid () como raiz é irreversível.)
Se você está tentando alterar um processo que já está sendo executado a partir de um processo separado, não há uma maneira padrão de fazê-lo - e também não tenho certeza de que existem muitas maneiras não-padrão. Você pode encontrar algumas informações em / dev / kmem, mas a expressão 'gelo fino' vem à mente.
Não há como fazer isso "na linha de comando" para qualquer processo em execução.
Eu posso dizer isso com certa segurança; o único "talvez" era / proc e eu vasculhei lá (literalmente e via google) e corri para um beco sem saída com relação a qualquer coisa em / proc que permitisse alterar o EUID. Você pode APRENDER quais são as configurações de UID e GID em / proc / {pid} / status - mas não pode alterá-las usando nada em / proc, pelo menos até onde eu sei.
Mas é fácil o suficiente para fazer algo assim funcionar - uma maneira de alterar o EUID de um processo, a partir da linha de comando - se você controlar o código-fonte do processo que deseja alterar. Você pode implementar um manipulador de sinal para, por exemplo, SIGUSR1 e fazer com que o processo altere seu próprio EUID, no entanto, você precisa quando recebe esse sinal. Então você simplesmente enviaria o processo que o SIGUSR1 sinalizou, via "kill" ... a partir da linha de comando, como você pediu ... e isso mudaria seu EUID para você.
Pode não ser o que você estava pensando, mas ... é uma resposta para sua pergunta de como fazê-lo ... e é a única resposta em que consigo pensar.