Измените EUID рабочего процесса

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

13
задан 17.07.2011, 04:22

3 ответа

Если процесс работает с полномочиями пользователя 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
18
ответ дан 07.12.2019, 11:32

Если Вы говорите о процессе, изменяющем его собственный EUID, существует набор способов сделать это.

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

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

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

3
ответ дан 07.12.2019, 11:32

Нет никакого способа сделать это "от командной строки" только к любому рабочему процессу.

Я могу сказать это с некоторой уверенностью; единственным, "возможно", был/proc, и я ввел по абсолютному адресу вокруг там (буквально и через Google) и столкнулся с тупиком относительно чего-либо в обеспечении/proc изменения EUID. Можно ИЗУЧИТЬ то, что настройки UID и GID находятся в/proc/{pid} / состояние - но Вы не можете изменить их использующий ничто в/proc, по крайней мере, насколько я могу сказать.

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

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

2
ответ дан 07.12.2019, 11:32

Теги

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