Вопрос или проблема
Какова цель и польза использования опции --system
при добавлении пользователя или даже группы?
Я хотел бы знать, почему я вижу это в большинстве Docker-контейнеров и это рекомендуется как наилучшая практика?
Для примера я добавляю непривилегированного пользователя в контейнер Docker на основе Alpine для использования при разработке и также для рабочего времени.
Текущие версии, которые я использую:
- версия adduser – 3.118, и man adduser Alpine
- версия Alpine – 3.12
- Docker v19.03.13 на Windows 10 (обновление 20H2)
В мануале написано “Создать системного пользователя”, хорошо, но что вы получаете как системный пользователь? Или находясь в системной группе при использовании addgroup -S
.
У меня нет опыта системного администратора, поэтому я не совсем понимаю, что это значит и хотел бы понять, когда мне следует использовать это?
Некоторое другое чтение
Поиск в Google дал некоторую информацию, но нет способа проверить, что я прочитал. То, что он не просит вас установить пароль для пользователя, но затем я могу использовать --disabled-password
для этого.
Я также нашел этот пост здесь, я понял, что это для организационных целей, но это не очень мне помогает. Я стал немного более ясным, но все еще не достаточно уверен, чтобы объяснить, когда их использовать.
В чем разница между обычным пользователем и системным пользователем?
Системные пользователи похожи на обычных пользователей, но создаются с организационной целью. Единственное отличие:
- У них нет срока действия (без выставленного срока)
- Их UID ниже 999, как установлено в /etc/login.defs (можно изменить):
Также есть стандартные системные пользователи, которые идут с ОС или с установкой пакета, большинство из них имеют вышеуказанные атрибуты (Конвенциональные):
- У большинства из них есть /sbin/nologin или /bin/false в качестве оболочки
- У них есть “*” или “!!” в /etc/shadow, что означает, что никто не может просто использовать их.
- И могут иметь атрибуты, которые я показал в первой части.
Чтобы проверить этот список стандартных системных пользователей: /usr/share/doc/setup-/uidgid
Пример может быть добавлением пользователя mypapp в качестве системного пользователя; таким образом, например, если мы хотим настроить политику управления доступом идентификации в нашей среде, которую мы можем автоматизировать для всех пользователей; мы должны сделать это только для системных пользователей на основе их UID, потому что в случае истечения срока действия учетной записи mypapp приложение перестанет работать.
На Alpine Linux, adduser -S
создаст системного пользователя, чей идентификатор пользователя начинается с 100, и который не может войти в систему:
kong:x:100:65533:Linux User,,,:/home/kong:/sbin/nologin
но это отличается без -S
:
horward:x:1000:1000:Linux User,,,:/home/horward:/bin/ash
Ответ или решение
Флаг --system
(или -S
) в команде adduser используется для создания системного пользователя на операционных системах, таких как Alpine Linux. Этот флаг служит важной цели в управлении пользователями и группами в контексте безопасности и администрирования.
Что такое системный пользователь?
Системный пользователь — это тип пользователя, созданный для выполнения фоновых (демонных) процессов или специфических задач, связанных с приложениями, которые не требуют интерактивного входа в систему. Системные пользователи обычно обладают рядом характеристик:
-
UID ниже 1000: В большинстве дистрибутивов Linux, включая Alpine, системные пользователи имеют идентификаторы пользователей (UID) меньше 1000. Это позволяет разделить обычных пользователей и пользователей, предназначенных для системного обслуживания.
-
Нет возможности интерактивного входа: Системные пользователи часто имеют в качестве оболочки
/sbin/nologin
или/bin/false
, что предотвращает возможность их интерактивного использования. Это увеличивает уровень безопасности, так как снижает риск несанкционированного доступа. -
Нет даты истечения: Поскольку системные пользователи создаются для выполнения конкретных задач, у них обычно нет срока действия, что делает их надежными для постоянной работы сервисов.
-
Использование в управлении ресурсами: Организация системных пользователей позволяет применять политики управления доступом и ресурсами в автоматизированном режиме. Это становится особенно важным в больших средах, таких как облачные приложения и контейнеризация.
Преимущества использования --system
-
Безопасность: Системные пользователи, не имеющие возможности для входа, снижают общие риски безопасности, избегая потенциальных атак на учетные записи.
-
Организация: Это позволяет трезво управлять пользователями и ресурсами в системе, особенно в контейнеризованных средах, таких как Docker, где практикуется использование минимальных образов.
-
Совместимость и стандарты: Системные пользователи (%system interaction or specific applications) часто предустановлены, что облегчает администрирование и совместимость различных приложений и служб.
Использование в Docker-контейнерах
В вашем контексте, использование флага --system
и создание системного пользователя в Docker — это рекомендуемая практика. Это позволяет изолировать приложения, усовершенствовать безопасность контейнера и минимизировать потенциальные уязвимости. Например, пользователи, созданные в процессе сборки контейнера, могут быть исключены из интерактивного доступа и могут получать только необходимые привилегии для выполнения своей работы.
Заключение
Использование флага --system
при создании пользователей и групп в системах, таких как Alpine Linux, способствует более безопасному и упорядоченному управлению учетными записями. Когда вы добавляете системного пользователя, вы обеспечиваете, что он получит необходимые атрибуты, которые будут удовлетворять требованиям вашей системы и обеспечивать безопасность, что особенно важно в средах Docker.