Змінити EUID запущеного процесу


12

Як в Linux можна змінити EUID запущеного процесу з командного рядка (за умови, що у мене є кореневий доступ)?

Відповіді:


17

Якщо процес працює з 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

3
+1 для творчого підходу до виконання завдання ...
шарлатанний кіхот

Нічого ... так, це творче. Дійсно, я не думав приєднуватися до процесу за допомогою налагоджувача. Маючи трохи хакерів "очікуйте", можна реалізувати "cheuid <processID> <EUID>", який би працював у деяких випадках. Конкретно я вважаю, що і виконавець gdb AND процес, на який впливають, повинен був мати корінь ... тому це є обмеженою корисністю. AFAIK просто запустив gdb як root, підключившись до некореневого процесу, seteuid не вдасться, оскільки він працюватиме з приватними файлами виконуючого процесу, а не з приватними відладчиками.
pbr

2

Якщо ви говорите про процес зміни власного EUID, існує маса способів зробити це.

  • setuid () - як побічний ефект встановлює EUID при використанні в процесі з EUID 0
  • seteuid ()
  • setreuid ()

Залежно від ефективного UID програми та наявності збереженого UID, можливо, ви зможете перемикатися між двома значеннями EUID в некореневій програмі. З кореневою привілейованою програмою ви повинні бути обережними - ви повинні вирішити, чи потрібно зміни бути незворотними, і використовувати правильну функцію для роботи. (Використання setuid () як root незворотно.)

Якщо ви намагаєтеся змінити процес, який вже працює з окремого процесу, то немає стандартного способу це зробити - і я не впевнений, що існує також багато нестандартних способів. Можливо, ви зможете попросити трохи інформації в / dev / kmem, але вираз «тонкий лід» виникає на увазі.


2

Немає способу зробити це "з командного рядка" до будь-якого запущеного процесу.

Я можу сказати, що з певною впевненістю; єдиним "можливо" було / proc, і я ткнувся туди (буквально і через Google) і наткнувся на тупик щодо будь-чого в / proc, що дозволяє змінити EUID. Ви можете дізнатися, які налаштування UID та GID є у / proc / {pid} / status - але ви не можете змінити їх, використовуючи що-небудь в / proc, принаймні, наскільки я можу сказати.

Але досить просто зробити щось подібне - спосіб змінити EUID процесу з командного рядка - якщо ви керуєте вихідним кодом процесу, який потрібно змінити. Ви можете реалізувати обробник сигналу для сказати SIGUSR1 і змусити процес змінити власний EUID, однак вам потрібно, коли він отримує цей сигнал. Тоді ви просто надішлете процес, який передає сигнал SIGUSR1, через "убити" ... з командного рядка, як ви попросили ..., і він змінить свій EUID для вас.

Це може бути не тим, про що ви думали, але ... це відповідь на ваше запитання, як це зробити ... і це єдина відповідь, про яку я можу придумати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.