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


12

В Linux, как я могу изменить EUID запущенного процесса из командной строки (при условии, что у меня есть root-доступ)?

Ответы:


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, так и затронутый процесс должны быть root-администраторами, так что это имеет ограниченную полезность. AFAIK, просто запустив gdb от имени пользователя root и подключившись к некорневому процессу, seteuid потерпит неудачу, поскольку он будет работать с привилегиями исполняемого процесса, а не с привилегиями отладчика.
PBR

2

Если вы говорите о процессе, который меняет свой собственный EUID, есть множество способов сделать это.

  • setuid () - в качестве побочного эффекта устанавливает EUID при использовании процессом с EUID 0
  • seteuid ()
  • setreuid ()

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

Если вы пытаетесь изменить процесс, который уже выполняется из отдельного процесса, тогда не существует стандартного способа сделать это - и я не уверен, что есть много нестандартных способов. Возможно, вы сможете получить некоторую информацию в / dev / kmem, но на ум приходит выражение «тонкий лед».


2

Нет никакого способа сделать это «из командной строки» для любого запущенного процесса.

Я могу сказать это с некоторой уверенностью; единственным «возможно» был / proc, и я заглянул туда (буквально и через google) и зашел в тупик относительно всего, что в / proc позволяет изменить EUID. Вы можете узнать, какие настройки UID и GID находятся в / proc / {pid} / status - но вы не можете изменить их, используя что-либо в / proc, по крайней мере, насколько я могу судить.

Но достаточно легко заставить что-то подобное работать - способ изменить EUID процесса из командной строки - если вы контролируете исходный код процесса, который хотите изменить. Вы можете реализовать обработчик сигнала, скажем, SIGUSR1, и заставить процесс изменять свой собственный EUID, как вам нужно при получении этого сигнала. Затем вы просто отправили бы процессу этот сигнал SIGUSR1 через «kill» ... из командной строки, как вы просили ... и он изменил бы его EUID для вас.

Возможно, это не то, о чем вы думали, но ... это ответ на ваш вопрос о том, как это сделать ... и это единственный ответ, который я могу придумать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.