Linux — многопользовательская система с первого дня: у каждого процесса и файла есть владелец, и все проверки доступа считаются от него. Пользователей объединяют в группы, чтобы раздавать права наборами, а не по одному. Здесь разберём, как посмотреть «кто я», из чего состоят учётные записи, как создать пользователя и почему добавление в группу «не работает» до перелогина.
Проверка идёт по владельцу, затем по группе
report.txt через групповую триаду r--, потому что состоит в dev.Кто я: whoami и id
Быстрый ответ даёт whoami, полный — id:
id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),27(sudo),44(video)
uid — числовой идентификатор пользователя: система везде оперирует числами, имена — удобство для людей. gid — первичная группа: обычно её получают новые файлы, но в каталоге с setgid наследуется группа каталога. groups — весь список групп, включая дополнительные; вывод выше сокращён, реальный список Ubuntu длиннее. Особый пользователь — root с uid 0: его привилегии позволяют обходить многие обычные проверки доступа, но не все ограничения системы.
Где живут учётки: /etc/passwd и /etc/group
Пользователи описаны строками в обычном текстовом файле:
grep "^ubuntu" /etc/passwd
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
Семь полей через двоеточие: имя, заглушка пароля (x — сам хэш лежит в закрытом /etc/shadow), uid, gid, комментарий, домашний каталог, шелл. Группы устроены так же в /etc/group: имя, x, gid и список членов. Список всех пользователей системы — это первое поле passwd: cut -d: -f1 /etc/passwd. Сервисные учётки вроде daemon и bin — норма: под ними работают системные службы, входить в них никто не должен.
Создать пользователя и группу
Управление учётками — привилегия root, поэтому в жизни эти команды идут под sudo:
useradd -m alice
grep "^alice" /etc/passwd
alice:x:1001:1001::/home/alice:/bin/sh
Флаг -m создаёт домашний каталог — без него /home/alice не появится. Пароль задаёт отдельная команда passwd alice, она спросит его интерактивно. В поле шелла у свежего пользователя /bin/sh; полноценный bash задаётся флагом -s /bin/bash при создании или командой chsh после.
Группа создаётся и наполняется двумя командами:
groupadd dev
usermod -aG dev alice
id alice
uid=1001(alice) gid=1001(alice) groups=1001(alice),1002(dev)
Флаг -aG читается «append to Groups» — добавить к дополнительным группам. Именно здесь прячется самая дорогая опечатка темы: usermod -G dev alice без -a не добавляет группу, а заменяет весь список дополнительных групп на одну dev. Пользователь молча вылетает из sudo, docker и всего остального.
Зачем это всё: доступ раздают группам
Смысл групп виден на связке с правами доступа. Файл report.txt с владельцем root, группой dev и правами 640 читается владельцем root и участниками dev, если остальные проверки доступа позволяют открыть файл. Новому человеку в команде не трогают ни файлы, ни их права — его просто добавляют в группу. По этой же схеме работают системные группы Ubuntu: членство в sudo даёт право повышать привилегии, членство в docker — обращаться к демону Docker без sudo.
Сама команда sudo выполняет одну команду от root: sudo systemctl restart nginx. Она спрашивает твой пароль, а не root’а, и пишет каждое использование в журнал — поэтому в командах из инструкций она встречается чаще, чем полноценный вход под root.
Ошибки, на которых спотыкаются
usermod -G без -a. Заменяет список групп вместо добавления. Только -aG, всегда.
Группа добавлена, а доступа нет. Список групп процесс получает при входе. Пока не перелогинишься (или не откроешь новую сессию su - alice), id в старой сессии показывает старый список, и Permission denied никуда не уходит.
useradd без -m. Пользователь создан, а домашнего каталога нет: при входе шелл окажется в /, профильные файлы писать некуда. Флаг -m в интерактивных сценариях нужен практически всегда.
Работа под root «потому что удобно». Под root любая опечатка в rm -r может удалить системные данные — обычные права файлов часто не защитят. Рабочий режим: обычный пользователь плюс sudo на отдельные команды.
Частые вопросы
Как посмотреть, в каких группах я состою
groups — короткий список, id — с числовыми идентификаторами. Про другого пользователя: groups alice или id alice.
Чем sudo отличается от su
su - alice открывает целую сессию под другим пользователем (нужен пароль alice), sudo команда выполняет одну команду от root по твоему паролю и записывает это в журнал. Для административных задач стандарт — sudo: точечно и с аудитом.
Как дать пользователю права администратора
В Ubuntu — добавить в группу sudo: usermod -aG sudo alice. После перелогина alice сможет выполнять команды через sudo.
Что такое root
Пользователь с uid 0 и широкими административными привилегиями. В Linux они разделены на capabilities и могут быть ограничены, например в контейнере. Даже привилегия обхода обычных прав не разрешает выполнить файл, у которого не установлен ни один бит x; остаются и другие ограничения, например файловая система только для чтения. Root — не режим «проверки выключены».
Где потренироваться
Пользователи, группы и права — сквозная тема скилл-теста по Linux и вопросов на собеседовании. Логическое продолжение в справочнике — права доступа и chmod: вторая половина модели доступа, которую группы приводят в движение.