Как Linux различает пользователей и зачем нужны группы
На домашнем компьютере с Ubuntu или Debian часто одна учётная запись, но система обычно работает минимум с двумя типами: обычными пользователями и служебными. Каждой учётной записи соответствует числовой идентификатор UID, а каждой группе — GID. Права на файлы привязываются к этим числам, а имена нужны для удобства.
Группа — это набор пользователей, которым выдан общий доступ к чему-то: к принтеру, к аудиоустройствам, к съёмным дискам, к административным действиям. Вместо того чтобы настраивать права для каждого человека отдельно, администратор добавляет его в нужную группу. Поэтому многие вопросы вида «почему программа не видит устройство» связаны с членством в группе.
Информация лежит в текстовых файлах: /etc/passwd хранит учётные записи, /etc/group — группы, а /etc/shadow — хеши паролей, доступ к нему ограничен. Править эти файлы вручную не нужно и рискованно: для этого есть команды, которые сохраняют согласованность записей.
Как посмотреть текущих пользователей и свои группы
Прежде чем что-то менять, посмотрите состояние. Команды чтения безопасны и ничего не затрагивают.
- id — ваш UID, основная группа и список всех групп с числовыми идентификаторами;
- groups — только имена групп текущего пользователя;
- groups имя — группы другого пользователя;
- getent group имя-группы — состав группы, то есть кто в неё входит;
- getent passwd — список учётных записей, включая служебные;
- who и w — кто сейчас вошёл в систему.
В выводе id вы увидите несколько групп, и это нормально. На рабочих станциях Ubuntu и Debian обычно встречаются группы вроде sudo, audio, video, plugdev, lpadmin, netdev. Набор зависит от версии дистрибутива и окружения, а точные имена полезно сверять через getent group. Если нужной группы в списке нет, значит, пользователь в ней не состоит, а не то, что она отсутствует в системе: проверить существование можно тем же getent.
Если нужен полный список групп системы, выполните getent group. Он покажет не только файл /etc/group, но и записи из других источников, если система их использует, например из сетевого каталога. На домашнем компьютере вывод обычно совпадает с содержимым файла.
Создание пользователя: adduser и useradd
В Debian и Ubuntu есть две родственные команды. adduser — дружелюбная надстройка: она запрашивает пароль, создаёт домашний каталог, копирует шаблонные файлы и задаёт основную группу. useradd — низкоуровневая утилита, которая по умолчанию делает меньше и требует явных ключей, например -m для создания домашнего каталога. Для домашнего использования разумнее adduser.
Простая последовательность действий:
- Выполните sudo adduser имя. Система предложит придумать пароль и ввести необязательные сведения вроде полного имени; их можно пропустить нажатием Enter.
- Проверьте результат командой id имя — должны появиться UID и основная группа.
- Убедитесь, что создан каталог /home/имя.
- При необходимости задайте пароль позже через sudo passwd имя.
Для удаления служит sudo deluser имя. Домашний каталог при этом по умолчанию остаётся, а ключ --remove-home удалит и его. Применяйте этот ключ осторожно: файлы невозможно вернуть. Если вы только изучаете команды, потренируйтесь на тестовой учётной записи, которую создали сами для проверки, и не трогайте основную.
В графической среде те же действия доступны в настройках, в разделе пользователей; точное название пункта зависит от окружения рабочего стола.
Отдельно стоит сказать про служебные учётные записи. В /etc/passwd вы увидите десятки имён, от которых не нужно входить в систему: они нужны отдельным службам, чтобы те работали с ограниченными правами. Не удаляйте и не изменяйте их без понимания назначения, иначе соответствующая служба перестанет запускаться. Обычные пользователи в современных дистрибутивах получают идентификаторы, как правило, начиная с 1000, и это помогает быстро отличить людей от служб.
usermod -aG: как добавить пользователя в группу правильно
Основная команда для изменения состава групп — usermod. Для добавления в дополнительную группу нужны оба ключа: sudo usermod -aG группа имя. Здесь -G задаёт список дополнительных групп, а -a означает «добавить к существующим».
Именно из-за ключа -a чаще всего возникают проблемы. Если выполнить usermod -G группа имя без -a, пользователь окажется только в указанной группе, а все прежние дополнительные группы будут потеряны. В худшем случае человек лишится группы sudo и потеряет административный доступ. Поэтому, запомнив команду, проверяйте её перед запуском. Прежде чем менять группы, убедитесь, что у вас остаётся рабочая учётная запись с правами администратора, и сделайте резервную копию важных данных; результат проверьте командой id имя до и после изменения.
Альтернатива в Debian и Ubuntu — sudo adduser имя группа. Она добавляет пользователя в существующую группу и по умолчанию не заменяет остальные.
Частые примеры, где это нужно:
- lpadmin — управление принтерами через средства CUPS в Ubuntu и Debian;
- sudo — право запускать команды от имени администратора;
- dialout — доступ к последовательным портам, актуально при работе с платами и адаптерами;
- audio и video — доступ к устройствам, в современных окружениях часто выдаётся автоматически.
Выдавая членство, придерживайтесь минимума: чем больше групп, тем шире возможности учётной записи, в том числе у вредоносной программы.
Почему изменения не видны сразу и как проверить
После добавления в группу команда groups в уже открытом терминале может не показывать новую группу. Причина проста: список групп процесс получает при входе в систему и дальше не обновляет. Чтобы изменения вступили в силу, завершите сеанс и войдите снова либо перезагрузитесь. Для быстрой проверки в одном терминале годится su - имя или newgrp группа, но это временное решение для проверки.
Если после перевхода доступа всё равно нет, проверьте по шагам:
- getent group имя-группы — есть ли ваше имя в списке участников;
- id — отображается ли группа в текущем сеансе;
- права на сам файл или устройство: ls -l путь покажет владельца и группу, а о правах рассказано на странице про chmod;
- не ограничивает ли доступ другая подсистема, например профиль безопасности приложения.
Пароль и права администратора — отдельная тема. О настройке sudo для обычного пользователя рассказано на странице про сообщение о том, что пользователя нет в файле sudoers.