В systemd выявлена ошибка, приводящая к выполнению сервисов с правами другого пользвователя, если в параметрах запуска указано имя пользователя, начинающееся с цифры. Например, если в сервисе указан "User=0day" и пользователь 0day присутствует в системе, то сервис будет запущен с идентификатором 0, т.е. с правами root. Леннарт Поттеринг отказался исправлять ошибку и закрыл уведомление с меткой "not-a-bug".

Позиция Поттеринга: В Linux исторически не разрешено использовать имена пользователей, начинающиеся с цифры, которые считаются некорректными. Например, в утилитах из состава shadow-utils применяется ограничение "[a-z_][a-z0-9_-]*[$]". Подобное ограничение принято чтобы избежать путаницы между передачей UID и имени пользователя в качестве аргументов типовых утилит. Если имя начинается с цифры, то цифровая часть воспринимается как цифровой идентификатор пользователя (UID), поэтому имя 0day будет обработано как UID 0. При этом создание некорректного пользователя, подобного "0day", не должно быть допущено другими компонентами дистрибутива.

Аргументы сторонников исправления подобного поведения: Фактически ограничение на использование цифр в именах в современных реалиях повсеместно не применяется, например, начиная с RHEL 7/CentOS 7 штатный инструментарий дистрибутива позволяет создавать и использовать пользователей, имена которых начинаются с цифры. Стандарт POSIX/IEEE Std 1003.1-2001 не накладывает ограничений по использованию цифр в именах пользователей, а в ситуациях когда допускается обработка и имени и UID требует вначале проверять наличие имени пользователя, и если оно отсутствует воспринимать цифровой идентификатор как UID. В утилитах GNU рекомендуется явно выделять цифровые идентификаторы префиксом "+".

Кроме того, даже если systemd воспринимает имя некорректным, следует вывести ошибку, а не молча запускать сервис под другим пользователем. Некоторые рассматривают проблему как уязвимость, так как если кто-то убедит администратора хоста установить вредоносное ПО под именем пользователя, начинающегося с нуля, и настроить запуск сервиса systemd от этого пользователя, то данное ПО будет выполнено с правами root, а не того непривилегированного пользователя, под которым ожидает выполнения администратор.

https://www.opennet.ru/opennews/ar…



URL записи