Відповіді:
Якщо процес працює з 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 в некореневій програмі. З кореневою привілейованою програмою ви повинні бути обережними - ви повинні вирішити, чи потрібно зміни бути незворотними, і використовувати правильну функцію для роботи. (Використання setuid () як root незворотно.)
Якщо ви намагаєтеся змінити процес, який вже працює з окремого процесу, то немає стандартного способу це зробити - і я не впевнений, що існує також багато нестандартних способів. Можливо, ви зможете попросити трохи інформації в / dev / kmem, але вираз «тонкий лід» виникає на увазі.
Немає способу зробити це "з командного рядка" до будь-якого запущеного процесу.
Я можу сказати, що з певною впевненістю; єдиним "можливо" було / proc, і я ткнувся туди (буквально і через Google) і наткнувся на тупик щодо будь-чого в / proc, що дозволяє змінити EUID. Ви можете дізнатися, які налаштування UID та GID є у / proc / {pid} / status - але ви не можете змінити їх, використовуючи що-небудь в / proc, принаймні, наскільки я можу сказати.
Але досить просто зробити щось подібне - спосіб змінити EUID процесу з командного рядка - якщо ви керуєте вихідним кодом процесу, який потрібно змінити. Ви можете реалізувати обробник сигналу для сказати SIGUSR1 і змусити процес змінити власний EUID, однак вам потрібно, коли він отримує цей сигнал. Тоді ви просто надішлете процес, який передає сигнал SIGUSR1, через "убити" ... з командного рядка, як ви попросили ..., і він змінить свій EUID для вас.
Це може бути не тим, про що ви думали, але ... це відповідь на ваше запитання, як це зробити ... і це єдина відповідь, про яку я можу придумати.