LINUX.ORG.RU

Impersonate из-под рута без форка

 , ,


0

1

Есть демон, который работает под рутом.
Нужно сделать чтобы часть кода он выполнял под юзером с известным uid и gid, а затем опять продолжал работать под рутом.
seteuid и setegid не изменяют реальный uid, поэтому привилегии остаются рутовые. Что делать?



Последнее исправление: nerdogeek (всего исправлений: 1)
Ответ на: комментарий от nerdogeek

А и не надо возвращать: fork + drop privileges

PS: Subj. не сразу заметил, но без fork'а тут ИМО не обойтись. Можешь озвучить, почему fork не подходит?

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

В общем да, к сожалению без форка не получится, потому что каждый поток может(должен) у меня дропнуть права. А форк - это дикий оверхед в моем случае.

nerdogeek
() автор топика
Ответ на: комментарий от nerdogeek

Хм… если каждые 5 милисекунд делать форк — то может быть, но в таком случае проблема не в форке, а в неправильном дизайне приложения.

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

А если не форкится каждую милисекунду, то и оверхед не такой уж и дикий. Тут мерять, а не гадать надо.

И вообще: “Premature optimization is the root of all evil.”

beastie ★★★★★
()

Очевидно же что любой способ без fork будет должен позволять вернуть привилегии рута, а это означает что он небезопасен. Если fork на каждое действие даёт слишком большой оверхед (а ты, кстати, вообще его измерял?), можно держать пул процессов - по одному на пользователя, скармливать им команды через pipe/shmem и убивать долго не использующиеся.

slovazap ★★★★★
()

Если уж оверхед для форка проблема - что мешает разделить работу на два демона. Один работает из-под рута и кидает что надо (команды ?) другому демону, который работает из под нужного юзера.

vtVitus ★★★★★
()

может, vfork()?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.