Глиф Учебники

Урок 5. Пользователи, группы и sudo

Курс «Ubuntu» · урок 5 из 8 · 5 минут чтения

Linux с самого начала рассчитан на нескольких пользователей. У каждого — своё имя, свой номер (UID), домашняя папка и пароль. Каждый файл кому-то принадлежит, и права на него задаются для владельца, группы и всех остальных (урок Файлы и папки в терминале).

Пользователи бывают не только у людей. Службы работают под своими системными пользователями: веб-сервер — под www-data. Если его взломают, взломщик получит права www-data, а не всего компьютера.

root и sudo

root — главный администратор, его номер — 0. Ему можно всё: менять любые файлы, ставить программы, удалить систему целиком. В Ubuntu у root нет пароля, и войти под ним с паролем нельзя. Вместо этого обычный пользователь выполняет отдельные команды с правами root через sudo:

Bash
sudo apt update

sudo спрашивает пароль вашего пользователя и запоминает его на 15 минут в этом окне терминала. Каждая команда через sudo записывается в журнал системы — видно, кто и что делал.

Пользоваться sudo может участник группы sudo. Пользователь, созданный при установке Ubuntu, в неё уже входит.

ivan $ sudo apt update группы sudo adm petr $ sudo apt update группы petr sudo проверяет пароль ivan группа sudo пароль petr группа sudo root номер 0 выполняет команду и пишет в журнал отказ не в группе sudo запуска не будет
sudo спрашивает пароль того, кто запускает команду, и выполняет её от имени root, только если пользователь входит в группу sudo.

Текущий пользователь

Bash
whoami
id
groups

Где хранятся пользователи

Строка из /etc/passwd:

Текст
ivan:x:1000:1000:Иван Петров,,,:/home/ivan:/bin/bash

Через двоеточие: имя, x (пароль — в /etc/shadow), номер пользователя, номер основной группы, полное имя, домашняя папка и оболочка. Людям Ubuntu выдаёт номера с 1000, системные пользователи обычно получают номера меньше.

ivan : x : 1000 : 1000 : Иван Петров,,, : /home/ivan : /bin/bash оболочка домашняя папка полное имя номер основной группы (GID) номер пользователя (UID) пароль не здесь — он в /etc/shadow имя пользователя
Строка /etc/passwd через двоеточие хранит имя, отметку x вместо пароля, номера пользователя и группы, полное имя, домашнюю папку и оболочку.

Добавить пользователя

Bash
sudo adduser petr

adduser создаёт пользователя, его личную группу petr и домашнюю папку /home/petr, затем спрашивает пароль (дважды) и сведения о человеке — их можно пропустить клавишей Enter. В конце — подтверждение.

Есть и команда useradd, но она низкоуровневая: без дополнительных ключей не создаёт домашнюю папку и не задаёт пароль. Для людей в Ubuntu удобнее adduser.

Пароль другого пользователя меняет sudo passwd petr, свой — passwd. Подробно — в справке Как сменить пароль пользователя или root.

Группы

Группа — способ дать права сразу нескольким пользователям. Добавить пользователя в группу:

Bash
sudo usermod -aG sudo petr
groups petr

-G — дополнительные группы, -a (append) — добавить к тем, что уже есть. Изменения вступают в силу при следующем входе: пользователю нужно выйти из системы и войти снова или заново подключиться по SSH.

Без -a команда usermod -G заменяет все дополнительные группы пользователя указанными. Выполнив её так для себя, можно выпасть из группы sudo и остаться без прав администратора.

дополнительные группы ivan adm sudo sudo usermod -aG www-data ivan adm sudo www-data новая группа добавлена к прежним sudo usermod -G www-data ivan adm sudo www-data прежние группы, включая sudo, заменены
С ключом -aG новая группа добавляется к прежним, а -G без -a заменяет их все, и пользователь теряет группу sudo.

Другие команды для групп:

Группы, которые встречаются чаще всего:

ГруппаЧто даёт
sudoправа администратора через sudo
admчтение системных журналов
www-dataобщий доступ к файлам веб-сервера
dialoutработу с последовательными портами — например, с платами Arduino
dockerуправление Docker без sudo

Группа docker по силе равна root: её участник может запустить контейнер с доступом ко всей системе. Добавляйте в неё только тех, кому дали бы и sudo.

Настройки sudo

Правила sudo записаны в файле /etc/sudoers. Строка %sudo ALL=(ALL:ALL) ALL в нём и разрешает группе sudo любые команды. Свои правила кладут отдельными файлами в папку /etc/sudoers.d/. Править эти файлы нужно только через visudo:

Bash
sudo visudo
sudo visudo -f /etc/sudoers.d/petr

visudo проверяет файл перед сохранением и не даст записать ошибку.

Ошибка в /etc/sudoers, записанная в обход visudo (например, обычным nano), ломает sudo у всех пользователей сразу — исправить её тогда можно из режима восстановления (как в него попасть — в справке Как сменить пароль), а на компьютере с рабочим столом — ещё командой pkexec visudo.

su — стать другим пользователем

Bash
su - petr

su открывает оболочку другого пользователя и спрашивает его пароль. Просто su пытается войти под root — а у root в Ubuntu пароля нет, поэтому вы увидите Authentication failure. Нужна оболочка root — пишите sudo -i.

Удалить пользователя

Bash
sudo deluser petr
sudo deluser --remove-home petr

Первая команда удаляет пользователя, но оставляет его папку /home/petr. Вторая удаляет и папку.

--remove-home стирает все файлы пользователя без возврата — сначала скопируйте нужное. Прежде чем удалять пользователя или лишать его прав администратора, убедитесь, что в системе остаётся хотя бы один участник группы sudo.

Коротко

Проверьте себя

1. Чей пароль спрашивает sudo?
2. Зачем ключ -a в команде sudo usermod -aG sudo petr?
3. Где хранятся хеши паролей пользователей?
4. Почему команда su без имени пользователя в Ubuntu выдаёт Authentication failure?