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

13281
jackhab

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

13

3 ответа на вопрос

18
Kjetil Jørgensen

Если процесс выполняется с правами 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 
+1 за творческий подход к решению задачи ... quack quixote 14 лет назад 3
Вау ... да, это креативно. На самом деле я не думал о присоединении к процессу с помощью отладчика. С небольшим количеством «ожидающих» взломов можно было бы реализовать «cheuid» "это будет работать в НЕКОТОРЫХ ситуациях. В частности, я считаю, что как исполнитель gdb, так и затрагиваемый процесс должны быть root ... так что это ограниченная утилита. AFAIK просто запускает gdb от имени root, подключаясь к некорневому В процессе, seteuid потерпит неудачу, так как он будет работать с привилегиями исполняемого процесса, а не с привилегиями отладчика. pbr 14 лет назад 0
3
Jonathan Leffler

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

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

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

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

2
pbr

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

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

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

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

Похожие вопросы