Управление группами пользователей в Linux

Зачем использовать группы в Linux
Группы позволяют назначать права не отдельным пользователям, а целым коллекциям аккаунтов. Это снижает число ошибок, упрощает аудит и ускоряет изменение прав при смене обязанностей. Термины:
- Primary group — основная группа пользователя; влияет на создаваемые файлы (uid:gid).
- Secondary groups — дополнительные группы; дают дополнительные права.
Важно: группа — это только механизм принадлежности; права на файлы и ресурсы всё ещё устанавливаются через владельцев, группы и ACL.
Создание групп в Linux
Команда для создания группы — groupadd. Базовая форма:
groupadd [опции] имя_группыПример: создать группу writers:
groupadd writersКоманда добавит запись в /etc/group и /etc/gshadow. Просмотреть можно через:
cat /etc/group
cat /etc/gshadowТребуются привилегии root. Выполняйте команды с sudo или под root.
Обработка ошибок и флаги
Если группа уже существует, вы увидите:
groupadd: group 'writers' already existsЧтобы подавить ошибку и сделать операцию идемпотентной, используйте –force (-f):
groupadd --force writersЗадание конкретного GID
Система назначает GID автоматически. Чтобы явно указать идентификатор, применяйте -g:
groupadd -g 600 writersЕсли GID занят, появится:
groupadd: GID '600' already existsФлаг -o (–non-unique) разрешает использовать уже существующий GID. Это редко рекомендуется, так как может вызвать путаницу.
groupadd -o -g 600 writersПрактика: для системных групп используйте диапазоны GID, зарезервированные дистрибутивом, а для пользовательских — другой диапазон.
Пароль у группы
groupadd поддерживает флаг -p, но он ожидает зашифрованную строку пароля, а не открытый текст. Не передавайте plaintext!
Генерация хеша (SHA-512) через OpenSSL:
openssl passwd -6 'секрет' # вернёт хеш, который можно передать в -p
groupadd -p '$6$...hash...' writersОднако на практике пароли групп используются редко. Вместо этого применяют механизмы контроля доступа (sudo, ACL, PAM, LDAP). Для управления паролями групп эффективнее использовать gpasswd:
gpasswd writers # интерактивно задаёт/убирает пароль
gpasswd -r writers # удаляет пароль у группыСистемные группы
Системные группы — для сервисных аккаунтов и операций (например, backup). Создавайте с флагом -r:
groupadd -r hardwareteamСистемные группы обычно получают GID из малого диапазона и служат для изоляции сервисов.
Получение списка членов группы
Узнать членов группы можно через getent:
getent group writersВывод — строка из /etc/group с перечислением членов. Для машин в домене LDAP getent покажет объединённый список (локальные + каталог).
Добавление пользователей в группу
Для модификации существующего пользователя используйте usermod. Базовый синтаксис для добавления в группы:
usermod -a -G группа пользователь- -G задаёт список вспомогательных групп (через запятую).
- -a добавляет (append); без -a вы перезаписываете список вспомогательных групп.
Примеры:
usermod -a -G writers randomuser
usermod -a -G writers,admin,owner randomuserДобавление нового пользователя сразу в группы
useradd позволяет задать вспомогательные группы при создании:
useradd -G writers randomuser
useradd -G writers,admin,owner randomuserУчтите, что у разных дистрибутивов могут отличаться умолчания (домашний каталог, shell). Проверяйте man useradd.
Удаление пользователей из группы
Чтобы удалить пользователя из одной из вспомогательных групп, перезапишите список -G без удаляемой группы. Пример: у пользователя random есть admin (primary), writers и editors (вспомогательные). Чтобы убрать editors:
usermod -G writers randomВажно: всегда сохраняйте хотя бы одну основную группу для пользователя. Чтобы сменить основную группу, применяется -g.
Удаление групп
Удаляется через groupdel:
groupdel writersЕсли группы нет, получите ошибку:
groupdel: group 'writers' does not existПеред удалением проверьте, что в группе нет активных требований от сервисов и пользователей.
Дополнительные утилиты и способы
- gpasswd — управление паролем группы и админами группы. Позволяет добавлять/удалять участников и назначать админов группы:
gpasswd -a user group # добавить
gpasswd -d user group # удалить- vigr/vigr -s — безопасное редактирование /etc/group и /etc/gshadow. Используйте вместо прямого редактирования файла в текстовом редакторе.
- PRAGMA: не редактируйте /etc/group напрямую без блокировки/резервных копий.
Масштабирование: что делать при тысячах пользователей
Локальные /etc/group плохо масштабируют. Альтернативы:
- LDAP/Active Directory + SSSD — централизованная база пользователей/групп, кэширование и единое управление.
- Configuration management (Ansible/Chef/Puppet) — для согласованного создания пользователей и групп на серверах.
- IdM/FreeIPA — если нужна интеграция аутентификации, авторизации и политики.
Пример фрагмента Ansible для создания группы и добавления пользователя:
- name: Ensure group exists
ansible.builtin.group:
name: writers
gid: 600
state: present
- name: Ensure user exists and is member of groups
ansible.builtin.user:
name: randomuser
groups: writers,admin
append: yes
state: presentMental model и эвристики
- Отдавайте приоритет группе над индивидуальными правами: меньше уникальных правил = проще аудит.
- Разделяйте системные группы (для сервисов) и рабочие группы (для людей).
- Для критичных сервисов используйте отдельные GID-диапазоны и документируйте их.
Безопасность и лучшие практики
- Не храните открытые пароли в скриптах и репозиториях. Для groupadd -p передавайте только хеш.
- Используйте /etc/gshadow для безопасного хранения паролей групп; редактируйте через vigr.
- Отслеживайте, какие группы имеют привилегии sudo, доступ к критичным ресурсам и записям в ACL.
- Применяйте аудит: регулярно выгружайте список групп и сопоставление с ролями.
Пример команды для экспорта групп и членов:
getent group > groups-$(date +%F).txtКогда групп недостаточно или когда они не работают
- Для гибких правил доступа используйте POSIX ACL или SELinux/AppArmor, если нужен finer-grained control.
- Для распределённых авторизаций и SSO используйте LDAP/SSSD или внешние провайдеры.
- Если группы приводят к конфликтам GID при миграции, спланируйте маппинг GID и используйте non-unique только в исключительных случаях.
Чек-листы по ролям
Администратор сервера:
- Создать документ по GID-диапазонам.
- Использовать vigr для правок /etc/group.
- Регулярно выводить и проверять списки членов групп.
DevOps:
- Автоматизировать создание групп/пользователей через CM.
- Интегрировать с LDAP/IdM для масштабирования.
- Настроить мониторинг изменений в /etc/group и /etc/gshadow.
Служба поддержки/Helpdesk:
- Проверять первичную группу пользователя перед изменением.
- Информировать о влиянии изменений на доступ к файлам и сервисам.
Справочник команд (cheat sheet)
| Действие | Команда |
|---|---|
| Создать группу | groupadd writers |
| Создать системную группу | groupadd -r hardwareteam |
| Создать с GID | groupadd -g 600 writers |
| Создать с хеш-паролем | groupadd -p ‘$6$hash’ writers |
| Добавить в группу (существ. пользователь) | usermod -a -G writers randomuser |
| Добавить при создании пользователя | useradd -G writers randomuser |
| Просмотреть членов группы | getent group writers |
| Удалить из группы | usermod -G writers user (перезаписать список) |
| Удалить группу | groupdel writers |
| Редактировать безопасно | vigr (для /etc/group) |
| Управлять паролями группы | gpasswd -a/-d/-r |
Простая методология внедрения групп
- Определите роли и карты доступа (who needs access to what).
- Спроектируйте набор групп, минимально достаточный для ролей.
- Выберите GID-политику и задокументируйте её.
- Автоматизируйте создание через CM и проверяйте idempotence.
- Настройте аудит и предупреждения на изменения групп.
- Проводите ревью прав регулярно.
Решение: локальные группы или каталог
flowchart TD
A[Небольшая сеть '<100 пользователей'?] -->|Да| B[Использовать локальные /etc/group с CM]
A -->|Нет| C[Централизованный каталог 'LDAP/AD/IdM']
C --> D{Нужна SSO и политики?}
D -->|Да| E[FreeIPA/AD + SSSD]
D -->|Нет| F[LDAP + SSSD]Критерии приёмки
- Группы созданы в соответствии с документированной политикой GID.
- Каждый изменённый аккаунт имеет минимум одну основную группу.
- Изменения прогнаны через систему конфигурации (если применимо).
- Проведён тест доступа к ресурсам (файлы/сервисы) после изменения.
Глоссарий
- GID — идентификатор группы (число).
- Primary group — основная группа пользователя.
- Secondary groups — дополнительные группы.
- SSSD — System Security Services Daemon для подключения к каталогам.
Итог
Группы — основной инструмент для управления доступом в Linux. Для одиночных серверов достаточно groupadd/usermod/groupdel и vigr. При росте числа пользователей переходите на централизованные каталоги и автоматизацию. Всегда документируйте политику групп, контролируйте GID и применяйте меры безопасности (не передавайте открытые пароли, используйте gshadow и аудиты).
Important: проверяйте последствия изменений на тестовой среде перед применением в продакшн.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента