Рейтинг:1

Как эффективно защитить процесс и его разветвленные дочерние элементы с помощью setuid и setgid?

флаг cn

Я пытаюсь, чтобы все процессы unix разветвлялись основным процессом с использованием разных идентификаторов пользователя/группы. Я не хочу, чтобы родительский или дочерний процессы выполнялись как корень поэтому я хочу 2 других личности фу и бар быть использованным. фу должен использоваться для запуска основного приложения и имеет ограниченный доступ к файловой системе, а затем бар должны использоваться разветвленными процессами и иметь еще более ограниченный доступ, чем фу.

Проблема в том, что когда я пытаюсь позвонить setuid или же setgid после разветвления дочернего процесса я возвращаюсь setuid не удалось: операция не разрешена Неважно что я делаю. Я даже подтвердил, что капш --print показывает, что у меня есть CAP_SETUID возможность при запуске оболочки в качестве фу user, поэтому я подумал, что это должно быть разрешено.

Должно быть, я неправильно понимаю возможности этой функции и поэтому неправильно использую эти инструменты. Каков наилучший способ создать отношения между процессами и пользователями таким образом, чтобы ни родительский, ни дочерний процессы не выполнялись как корень?

флаг cn
«все процессы unix». Юникс != Линукс. Я бы предположил, что вы создаете службу systemd, которая создает родителя как пользователя foo и порождает (скрипт или вторая служба systemd) дочерние элементы. Но над родителем всегда будет процесс, принадлежащий root. В качестве примера посмотрите на службу apache (хотя родитель — root, но его дочерние элементы принадлежат apache).
Matt Hintzke avatar
флаг cn
К сожалению, я попробовал это, и оказалось, что WSL не работает с `systemd`, и, поскольку я использую докер и мне нужно разрабатывать в Windows, не похоже, что я могу использовать это как решение.
флаг cn
Вам действительно нужно добавить WSL к вопросу: P То, что вы хотите, скорее всего, невозможно с WSL. Это не замена установке Linux.
Matt Hintzke avatar
флаг cn
Да, извините, я имею в виду, что производственное программное обеспечение не будет использовать WSL, поэтому я действительно не думал об этом. Но, видя, как вся разработка будет происходить в Windows, я полагаю, что это требование. Спасибо, но похоже, что я не смогу сделать это эффективно
NotTheDr01ds avatar
флаг vn
@MattHintzke Обычно я не рекомендую этот путь, но в вашем случае я думаю, что это может потребовать исключения. Поскольку вы используете WSL только в целях разработки, чтобы имитировать производственную систему, вы можете рассмотреть сценарий поддержки Systemd, такой как [Genie] (https://github.com/arkane-systems/genie). Опять же, лично мне не нравится использовать эти сценарии Systemd, поскольку они изменяют так много функций WSL, но это может быть правильным путем для вас. Все эти сценарии имеют одинаковую общую концепцию, заключающуюся в том, что они создают контейнер/пространство имен, где Systemd является PID1, и изменяются на это пространство имен.
Matt Hintzke avatar
флаг cn
@ NotTheDr01ds NotTheDr01ds хм, хорошо, я посмотрю на это, спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.