Утро понедельника. Вам в чат прилетает три сообщения подряд:
«Привет! Я новый фронтендер, создай мне учётку на сервере — alice.»
«Добавь alice в группу developers, ей нужен доступ к /var/www/project.»
«И ещё: bob уволился в пятницу, убери его из системы, пожалуйста.»
Три задачи. В прошлом уроке мы разобрались, где Linux хранит информацию о пользователях — /etc/passwd, /etc/group, UID, GID. Теперь — как этой информацией управлять. Руками, через терминал, как настоящий админ.
Все команды в этом уроке требуют прав суперпользователя, поэтому перед каждой — sudo.
Начнём с создания пользователя. И тут вас ждёт первый сюрприз: в Linux для этого есть две команды с почти одинаковыми названиями. Новичков это сбивает с толку каждый раз.
sudo useradd alice
sudo adduser alice
Одни и те же буквы, только порядок слов другой. Но разница — колоссальная:
useradd |
adduser |
|
|---|---|---|
| Тип | Низкоуровневая утилита | Интерактивный скрипт-обёртка |
| Домашняя папка | Не создаёт (без флага -m) |
Создаёт автоматически |
| Пароль | Не запрашивает | Запрашивает сразу |
| Оболочка | Может не назначить | Назначает /bin/bash |
| Где работает | Везде (POSIX) | Debian/Ubuntu |
Если коротко: adduser — «сделай всё за меня». useradd — «я сам разберусь, дай мне рычаги».
Давайте создадим пользователя обоими способами и посмотрим разницу на практике.
Способ 1: adduser — как заказать пиццу по телефону
Вы звоните, оператор задаёт вопросы, вы отвечаете — пицца приезжает:
sudo adduser alice
Система запустит диалог:
Adding user 'alice' ...
Adding new group 'alice' (1001) ...
Adding new user 'alice' (1001) with group 'alice' ...
Creating home directory '/home/alice' ...
Copying files from '/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Full Name []: Alice Johnson
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
Одна команда — и пользователь полностью готов: домашняя папка, пароль, оболочка. Поля Room Number и прочее можно пропускать через Enter — они необязательные и из 80-х (тогда в университетах указывали номер комнаты сотрудника).
Способ 2: useradd — как собрать пиццу самому
Каждый ингредиент выбираете сами:
sudo useradd -m -s /bin/bash -c "Bob Smith" bob
Что здесь написано?
-m— создать домашнюю директорию/home/bob. Без этого флага — пользователь будет, а папки не будет. Сюрприз.-s /bin/bash— назначить оболочку bash. Без этого на некоторых системах получите/bin/shили вообще ничего.-c "Bob Smith"— полное имя (запишется в поле GECOS в/etc/passwd).
И пароль — отдельной командой:
sudo passwd bob
Система дважды попросит ввести пароль. Теперь bob может входить в систему.
Проверим, что оба пользователя на месте:
grep alice /etc/passwd
# alice:x:1001:1001:Alice Johnson:/home/alice:/bin/bash
grep bob /etc/passwd
# bob:x:1002:1002:Bob Smith:/home/bob:/bin/bash
ls /home/
# alice bob user
Оба в /etc/passwd, у обоих есть домашние директории. Результат одинаковый — способ разный.
Отлично, пользователи есть. Теперь — группы. Помните пример из прошлого урока? Три разработчика, общий проект, и 777 — это не выход. Давайте сделаем правильно.
Создаём группу:
sudo groupadd webdev
Проверяем:
grep webdev /etc/group
# webdev:x:1003:
Группа создана, GID = 1003, участников пока нет — пустота после последнего двоеточия. Исправим это:
sudo usermod -aG webdev alice
sudo usermod -aG webdev bob
Проверяем:
grep webdev /etc/group
# webdev:x:1003:alice,bob
Оба на месте. Разберём эту важнейшую команду usermod -aG по буквам — она будет встречаться вам постоянно:
usermod— изменить параметры пользователя.-G webdev— задать дополнительную группу.-a(append) — добавить к существующим группам, а не заменить их.
Посмотрим, как выглядит результат глазами alice:
groups alice
# alice : alice webdev
id alice
# uid=1001(alice) gid=1001(alice) groups=1001(alice),1003(webdev)
Две группы: основная alice (создана автоматически вместе с пользователем) и дополнительная webdev (добавили вручную). Теперь alice имеет доступ ко всем файлам с группой-владельцем webdev.
usermod умеет не только добавлять в группы. Это швейцарский нож для изменения пользователей:
| Команда | Что делает |
|---|---|
sudo usermod -l newname oldname |
Переименовать пользователя |
sudo usermod -d /new/home -m user |
Сменить домашнюю папку (и переместить файлы) |
sudo usermod -s /bin/zsh user |
Сменить оболочку |
sudo usermod -L user |
Заблокировать учётную запись (Lock) |
sudo usermod -U user |
Разблокировать учётную запись (Unlock) |
Блокировка (-L) — хитрая штука. Она не удаляет пользователя, а просто ставит ! перед хешем пароля в /etc/shadow. Человек не может войти, но все его файлы и настройки на месте. Удобно, когда сотрудник ушёл в отпуск или под вопросом — удалять рано, а доступ нужно закрыть прямо сейчас.
Теперь — удаление. Помните сообщение из начала урока? «Bob уволился, убери его из системы.» Делается просто:
sudo userdel bob
Это удалит пользователя из /etc/passwd и /etc/shadow, но не тронет его домашнюю директорию. Файлы останутся в /home/bob — вдруг понадобятся. Если нужно удалить всё с концами — добавьте флаг -r:
sudo userdel -r bob
Пользователь, домашняя папка, почтовый ящик — стёрты. Как будто bob'а никогда не было.
Удаление группы — аналогично:
sudo groupdel webdev
Но есть нюанс: группу нельзя удалить, если она является основной для какого-то пользователя. Сначала смените ему группу — потом удаляйте.
Соберём всё вместе. Вернёмся к тем трём сообщениям из начала урока — и решим каждую задачу:
# Задача 1: создать учётку для alice
sudo adduser alice
# Задача 2: дать доступ к проекту
sudo usermod -aG developers alice
# Задача 3: удалить bob'а
sudo tar czf /backup/bob_home.tar.gz /home/bob # на всякий случай
sudo userdel -r bob
# Бонус: проверить, что всё в порядке
id alice
# uid=1001(alice) gid=1001(alice) groups=1001(alice),1001(developers)
grep bob /etc/passwd
# (пусто — bob'а больше нет)
Три задачи — пять минут работы. Утренний кофе ещё не остыл. И напоследок — шпаргалка, которую стоит держать под рукой, пока команды не запомнятся сами:
| Задача | Команда |
|---|---|
| Создать пользователя (интерактивно) | sudo adduser имя |
| Создать пользователя (скрипт) | sudo useradd -m -s /bin/bash имя |
| Задать/сменить пароль | sudo passwd имя |
| Создать группу | sudo groupadd имя |
| Добавить в группу | sudo usermod -aG группа имя |
| Посмотреть группы | groups имя или id имя |
| Удалить пользователя | sudo userdel -r имя |
| Удалить группу | sudo groupdel имя |
В следующем уроке — пакетный менеджер на продвинутом уровне: откуда apt берёт программы, как откатить сломавшее всё обновление и что делать, когда нужного пакета нет в стандартном списке.
useradd — низкоуровневая команда создания пользователя. Требует явного указания параметров (-m, -s, -c).
adduser — интерактивная обёртка над useradd (Debian/Ubuntu). Создаёт домашнюю папку, запрашивает пароль, назначает оболочку — всё за один раз.
passwd — задаёт или меняет пароль пользователя.
usermod -aG — добавляет пользователя в дополнительную группу. Флаг -a обязателен, без него группы заменяются, а не дополняются.
userdel -r — удаляет пользователя вместе с домашней директорией. Без -r файлы остаются.
groupadd / groupdel — создание и удаление групп.