Ответы:
Если процесс выполняется с правами root , вы можете присоединить к нему gdb и вызвать seteuid из этого процесса.
Пример:
[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
Если вы говорите о процессе, который меняет свой собственный EUID, есть множество способов сделать это.
В зависимости от эффективного UID программы и наличия сохраненного UID, вы можете переключаться между двумя значениями EUID в некорневой программе. С привилегированной программой root вы должны быть осторожны - вы должны решить, должно ли изменение быть необратимым, и использовать правильную функцию для работы. (Использование setuid () в качестве root необратимо.)
Если вы пытаетесь изменить процесс, который уже выполняется из отдельного процесса, тогда не существует стандартного способа сделать это - и я не уверен, что есть много нестандартных способов. Возможно, вы сможете получить некоторую информацию в / dev / kmem, но на ум приходит выражение «тонкий лед».
Нет никакого способа сделать это «из командной строки» для любого запущенного процесса.
Я могу сказать это с некоторой уверенностью; единственным «возможно» был / proc, и я заглянул туда (буквально и через google) и зашел в тупик относительно всего, что в / proc позволяет изменить EUID. Вы можете узнать, какие настройки UID и GID находятся в / proc / {pid} / status - но вы не можете изменить их, используя что-либо в / proc, по крайней мере, насколько я могу судить.
Но достаточно легко заставить что-то подобное работать - способ изменить EUID процесса из командной строки - если вы контролируете исходный код процесса, который хотите изменить. Вы можете реализовать обработчик сигнала, скажем, SIGUSR1, и заставить процесс изменять свой собственный EUID, как вам нужно при получении этого сигнала. Затем вы просто отправили бы процессу этот сигнал SIGUSR1 через «kill» ... из командной строки, как вы просили ... и он изменил бы его EUID для вас.
Возможно, это не то, о чем вы думали, но ... это ответ на ваш вопрос о том, как это сделать ... и это единственный ответ, который я могу придумать.