Пользователи и группы в Linux: id, sudo и useradd

Linux Автор: Среда и версия: Ubuntu 24.04, shadow-utils 4.13
содержание

Linux — многопользовательская система с первого дня: у каждого процесса и файла есть владелец, и все проверки доступа считаются от него. Пользователей объединяют в группы, чтобы раздавать права наборами, а не по одному. Здесь разберём, как посмотреть «кто я», из чего состоят учётные записи, как создать пользователя и почему добавление в группу «не работает» до перелогина.

Linux / 01

Проверка идёт по владельцу, затем по группе

Проверка идёт по владельцу, затем по группе01 Кто читает alice · uid 1001 группа dev Файл принадлежит root:dev. 02 К какому набору относится rw-r----- владелец ≠ alice · dev совпала Берём права группы: r--. 03 Что разрешено читать: да писать: нет Другие наборы прав не суммируются с правами группы.01Кто читаетalice · uid 1001группа devФайл принадлежит root:dev.02К какому наборуотноситсяrw-r-----владелец ≠ alice · dev совпалаБерём права группы: r--.03Что разрешеночитать: даписать: нетДругие наборы прав не суммируются с правами группы.
Владелец файла — root, но группа файла — dev. alice читает 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: вторая половина модели доступа, которую группы приводят в движение.

Источники