Леннарт Поттеринг представил run0, замену sudo, интегрированную в systemd

Леннарт Поттеринг представил утилиту run0, позволяющую выполнять процессы под идентификаторами других пользователей. Новая утилита позиционируется как более безопасная замена программы sudo, реализованная в форме надстройки над командой systemd-run и позволяющая избавиться от применения исполняемого файла с флагом SUID. Утилита run0 включена в состав выпуска systemd 256, который находится на стадии кандидата в релизы.

Отмечается, что смена идентификатора при помощи флага SUID в sudo сопряжена с дополнительными рисками, связанными с тем, что SUID-процесс наследует контекст исполнения, включающий множество свойств, контролируемых непривилегированным пользователей, таких как переменные окружения, файловые дескрипторы, параметры планировщика и привязки cgroup. Часть из подобных свойств автоматически очищается для SUID-процессов ядром, а часть — самим приложением. Тем не менее, в сложных SUID-программах, таких как sudo, продолжают регулярно находить уязвимости, вызванные неаккуратным обращением с внешними данными, на которое может влиять непривилегированный пользователь.

В run0 вместо использования SUID осуществляется обращение к системному менеджеру с запросом запуска командной оболочки или процесса с указанным идентификатором пользователя, создания нового псевдотерминала (PTY) и пересылки данных между ним и текущим терминалом (TTY). Подобное поведение больше напоминает запуск при помощи ssh, чем выполнение при помощи классического sudo. Привилегированный процесс запускается в изолированном контексте, который порождается процессом PID 1, а не процессом пользователя, т.е. не наследует свойства окружения пользователя, за исключением проброса переменной окружения $TERM. Проброс регулируется через список явно разрешённых свойств, вместо попыток запретить опасные свойства (концепция белого списка, вместо чёрного).

Для авторизации и определения возможностей пользователя в run0 используется Polkit. Классический язык описания правил (/etc/sudoers), применяемый в sudo, не поддерживается. Функциональность для запуска программ с другими привилегиями встроена в systemd-run, а команда run0 создаётся как символическая ссылка на systemd-run, при использовании которой обрабатывается схожий с sudo интерфейс командной строки.

Из дополнительных возможностей run0 выделяется индикация работы с повышенными привилегиями через установку красноватого фона в терминале и добавление красной точки в заголовок окна. После прекращения выполнения с иными привилегиями точка исчезает, а фон меняется на обычный. Кроме того, в run0 поддерживает обработку параметра »--property», через который может выставить произвольные настройки для сервисов systemd (например, «CPUWeight=200 MemoryMax=2G IPAccounting=yes»).



Источник: http://www.opennet.ru/opennews/art.shtml? num=61088

OpenNet прочитано 2468 раз