ОП.05Пользователи, группы и sudoзанятие 5Материалы

Часть 5 из 7

Создание пользователей и групп

В этой части создадим учётные записи для условной команды разработки: двух разработчиков anna и boris, тестировщика viktor и общую группу devteam, а затем проверим, что изменилось в системных файлах.

  1. 5.1 Группа и пользователь: groupadd и useradd
  2. 5.2 Интерактивное создание: adduser
  3. 5.3 Пароль и дополнительные группы
  4. 5.4 Ключ -a в usermod
  5. 5.5 Что изменилось в системных файлах

5.1 Группа и пользователь: groupadd и useradd

Условная команда разработки состоит из двух разработчиков, Анны и Бориса, и тестировщика Виктора. Разработчикам нужен общий каталог с исходным кодом, тестировщику доступ к нему не нужен. Для этого создадим группу devteam и три учётные записи. Все команды этой части меняют системные файлы, поэтому выполняются через sudo.

Команда groupadd создаёт группу: добавляет строку в /etc/group и выдаёт свободный GID. Команда useradd создаёт учётную запись: добавляет строки в /etc/passwd и /etc/shadow и создаёт личную группу в /etc/group. Домашний каталог без ключей не создаётся, а оболочкой записывается /bin/sh, поэтому нужные свойства указывают ключами.

Ключ useraddЧто делает
-mсоздать домашний каталог /home/имя и скопировать в него файлы из /etc/skel
-s /bin/bashоболочка после входа; без ключа в Ubuntu записывается /bin/sh
-c "Anna Developer"комментарий: полное имя
-G группыдополнительные группы через запятую

Каталог /etc/skel (skeleton — «каркас») содержит файлы, которые получает каждый новый пользователь: настройки оболочки .bashrc, .profile и .bash_logout. Если администратору нужно, чтобы у всех новых пользователей была одинаковая настройка, её кладут в /etc/skel.

В терминалеГруппа devteam и пользователь anna
  1. sudo groupadd devteam# новая группа
    что делает

    Что делает команда. Создаёт группу devteam.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    groupadd
    создать группу
    devteam
    имя новой группы
  2. sudo useradd -m -s /bin/bash -c "Anna Developer" anna# учётная запись с домашним каталогом
    что делает

    Что делает команда. Создаёт учётную запись anna с домашним каталогом, оболочкой bash и полным именем.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    useradd
    создать учётную запись
    -m
    создать домашний каталог и скопировать файлы из /etc/skel
    -s /bin/bash
    оболочка после входа: /bin/bash
    -c "Anna Developer"
    комментарий: "Anna Developer"
    anna
    имя новой учётной записи
  3. getent passwd anna
    что делает

    Что делает команда. Выводит строку учётной записи anna.

    По частям:

    getent
    получить запись из системной базы данных
    passwd
    база учётных записей
    anna
    какая запись
  4. getent group devteam
    что делает

    Что делает команда. Выводит строку группы devteam вместе со списком участников.

    По частям:

    getent
    получить запись из системной базы данных
    group
    база групп
    devteam
    какая запись
  5. sudo ls -la /home/anna# домашний каталог anna
    что делает

    Что делает команда. С правами root выводит содержимое домашнего каталога anna со скрытыми файлами.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    -a
    показать и скрытые файлы
    /home/anna
    что показать (абсолютный путь)
  6. ls -la /etc/skel# откуда взялись файлы
    что делает

    Что делает команда. Выводит файлы каталога-образца, которые копируются каждому новому пользователю.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    -a
    показать и скрытые файлы
    /etc/skel
    что показать (абсолютный путь)
Результат

у anna UID 1002 и GID 1003; группа devteam создана без участников; в домашнем каталоге три файла из /etc/skel.

Снимок 5.1Ubuntu 24.04
  1. 1UID 1002: номер 1001 занят записью installer Live-сеанса
  2. 2личная группа anna получила GID 1003: номер 1002 уже у devteam
  3. 3группа devteam создана без участников
  4. 4домашний каталог принадлежит anna
  5. 5файлы скопированы из /etc/skel
useradd создал учётную запись, личную группу и домашний каталог с файлами из /etc/skel.Весь снимок ↗

useradd создал учётную запись, личную группу и домашний каталог с файлами из /etc/skel.

Что показывает снимок. useradd создал запись anna с UID 1002 и личной группой 1003; группа devteam пока без участников; в домашний каталог скопированы файлы /etc/skel.

Где это пригодится. useradd с ключами используют в скриптах подготовки сервера: команда не задаёт вопросов и одинаково работает при каждом запуске.

На снимке видно, что UID и GID одной учётной записи не обязаны совпадать. Номер группы anna — 1003, потому что 1002 уже заняла группа devteam. Система работает с номерами, и такое расхождение ни на что не влияет.

5.2 Интерактивное создание: adduser

В Ubuntu есть вторая команда — adduser. Это программа-надстройка над useradd: она сама создаёт личную группу и домашний каталог, выбирает оболочку, запрашивает пароль и полное имя. Ключи запоминать не нужно, поэтому для ручного создания пользователей удобнее adduser, а в скриптах пишут useradd с ключами.

Пароль вводится дважды, набранные символы на экране не отображаются — даже звёздочками. Остальные вопросы можно пропустить клавишей Enter. Пустые поля комментария сохраняются запятыми: в строке boris будет Boris Developer,,,.

В терминалеПользователь boris через adduser
  1. sudo adduser boris# создание с вопросами
    что делает

    Что делает команда. Создаёт учётную запись boris по шагам: группа, пользователь, домашний каталог, пароль и полное имя.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    adduser
    создать учётную запись по шагам с вопросами
    boris
    имя новой учётной записи
  2. Lab-2026-pass# пароль дважды; символы не видны
  3. Boris Developer# полное имя; остальные вопросы — Enter
  4. y# подтвердить данные
Результат

adduser создал группу и пользователя boris с номером 1004, домашний каталог и добавил boris в группу users.

Снимок 5.2Ubuntu 24.04
  1. 1adduser создаёт личную группу и пользователя с одинаковым номером
  2. 2домашний каталог и файлы из /etc/skel
  3. 3пароль запрашивается дважды; набранные символы не видны
  4. 4комментарий: полное имя
  5. 5пользователь добавлен в группу users
adduser создаёт учётную запись по шагам и задаёт вопросы.Весь снимок ↗

adduser создаёт учётную запись по шагам и задаёт вопросы.

Что показывает снимок. adduser создал группу и пользователя boris с номером 1004, домашний каталог, запросил пароль и полное имя и добавил boris в группу users.

Где это пригодится. Для ручного создания пользователя на рабочей машине adduser удобнее: команда сама задаёт нужные вопросы.

5.3 Пароль и дополнительные группы

Учётная запись, созданная useradd, пароля не имеет: во втором поле /etc/shadow стоит !, и войти под ней по паролю нельзя. Пароль задаёт команда passwd имя. Обычный пользователь командой passwd без имени меняет только свой пароль и сначала вводит старый; администратор через sudo задаёт пароль любому пользователю без старого.

В группу пользователя добавляет команда usermod -aG группа имя. Ключ -G задаёт дополнительные группы, ключ -a (append — «добавить») означает, что новая группа добавляется к уже существующим. Членство вступает в силу при следующем входе пользователя в систему: процессы, запущенные раньше, продолжают работать со старым списком групп. Новый процесс, запущенный от имени пользователя через sudo -u или su -, читает группы заново и получает новую группу сразу — этим мы воспользуемся в части 6.

В терминалеПароли и группа devteam
  1. sudo passwd anna# пароль anna
    что делает

    Что делает команда. Задаёт пароль учётной записи anna; пароль вводится дважды.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    passwd
    задать пароль или показать его состояние
    anna
    чей пароль
  2. Lab-2026-pass# пароль дважды
  3. sudo useradd -m -s /bin/bash -c "Viktor Tester" viktor# тестировщик
    что делает

    Что делает команда. Создаёт учётную запись viktor с домашним каталогом и оболочкой bash.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    useradd
    создать учётную запись
    -m
    создать домашний каталог и скопировать файлы из /etc/skel
    -s /bin/bash
    оболочка после входа: /bin/bash
    -c "Viktor Tester"
    комментарий: "Viktor Tester"
    viktor
    имя новой учётной записи
  4. sudo passwd viktor
    что делает

    Что делает команда. Задаёт пароль учётной записи viktor.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    passwd
    задать пароль или показать его состояние
    viktor
    чей пароль
  5. Lab-2026-pass# пароль дважды
  6. sudo usermod -aG devteam anna# anna в devteam
    что делает

    Что делает команда. Добавляет anna в группу devteam, сохраняя остальные группы.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    usermod
    изменить учётную запись
    -a
    добавить к имеющимся группам
    -G
    дополнительные группы; без -a прежний список групп заменяется целиком
    devteam
    группа devteam
    anna
    чью запись изменить
  7. sudo usermod -aG devteam boris# boris в devteam
    что делает

    Что делает команда. Добавляет boris в группу devteam, сохраняя остальные группы.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    usermod
    изменить учётную запись
    -a
    добавить к имеющимся группам
    -G
    дополнительные группы; без -a прежний список групп заменяется целиком
    devteam
    группа devteam
    boris
    чью запись изменить
  8. id anna
    что делает

    Что делает команда. Выводит номера и группы anna.

    По частям:

    id
    вывести номера пользователя и его группы
    anna
    чей номер показать
  9. id boris
    что делает

    Что делает команда. Выводит номера и группы boris.

    По частям:

    id
    вывести номера пользователя и его группы
    boris
    чей номер показать
  10. getent group devteam# участники группы
    что делает

    Что делает команда. Выводит строку группы devteam вместе со списком участников.

    По частям:

    getent
    получить запись из системной базы данных
    group
    база групп
    devteam
    какая запись
Результат

в списке групп anna и boris появилась devteam; в строке группы два участника.

Снимок 5.3Ubuntu 24.04
  1. 1пароль сохранён
  2. 2-aG: добавить группу к уже имеющимся
  3. 3devteam появилась в списке групп anna и boris
  4. 4участники группы в /etc/group
Пароли заданы, anna и boris добавлены в группу devteam.Весь снимок ↗

Пароли заданы, anna и boris добавлены в группу devteam.

Что показывает снимок. Пароли anna и viktor заданы; anna и boris добавлены в devteam без потери других групп.

Где это пригодится. Так новый сотрудник получает доступ к ресурсам команды: одна команда usermod -aG вместо настройки прав на каждый каталог.

5.4 Ключ -a в usermod

Ключ -G без -a работает иначе: он задаёт полный список дополнительных групп. Все группы, которых нет в списке, у пользователя пропадают. Если так ошибиться с администратором, он потеряет группу sudo и вместе с ней возможность исправить ошибку.

На снимке viktor сначала получает группу testers правильной командой. Затем usermod -G devteam viktor без -a заменяет весь список: testers пропадает. Последняя команда задаёт список заново — только testers.

В терминалеusermod -G без -a
  1. sudo groupadd testers# группа тестировщиков
    что делает

    Что делает команда. Создаёт группу testers.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    groupadd
    создать группу
    testers
    имя новой группы
  2. sudo usermod -aG testers viktor# правильно: с -a
    что делает

    Что делает команда. Добавляет viktor в группу testers, сохраняя остальные группы.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    usermod
    изменить учётную запись
    -a
    добавить к имеющимся группам
    -G
    дополнительные группы; без -a прежний список групп заменяется целиком
    testers
    группа testers
    viktor
    чью запись изменить
  3. id viktor
    что делает

    Что делает команда. Выводит номера и группы viktor или сообщает, что такой записи нет.

    По частям:

    id
    вывести номера пользователя и его группы
    viktor
    чей номер показать
  4. sudo usermod -G devteam viktor# ошибка: без -a
    что делает

    Что делает команда. Заменяет весь список дополнительных групп viktor одной группой devteam: testers пропадает.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    usermod
    изменить учётную запись
    -G
    дополнительные группы; без -a прежний список групп заменяется целиком
    devteam
    группа devteam
    viktor
    чью запись изменить
  5. id viktor# testers пропала
    что делает

    Что делает команда. Выводит номера и группы viktor или сообщает, что такой записи нет.

    По частям:

    id
    вывести номера пользователя и его группы
    viktor
    чей номер показать
  6. sudo usermod -G testers viktor# исправить: полный список групп
    что делает

    Что делает команда. Задаёт viktor список дополнительных групп заново: только testers.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    usermod
    изменить учётную запись
    -G
    дополнительные группы; без -a прежний список групп заменяется целиком
    testers
    группа testers
    viktor
    чью запись изменить
  7. id viktor
    что делает

    Что делает команда. Выводит номера и группы viktor или сообщает, что такой записи нет.

    По частям:

    id
    вывести номера пользователя и его группы
    viktor
    чей номер показать
Результат

после -G devteam у viktor осталась только devteam; после исправления — только testers.

Снимок 5.4Ubuntu 24.04
  1. 1после -aG у viktor есть группа testers
  2. 2usermod -G без -a
  3. 3testers пропала, список заменён на devteam
  4. 4исправление: -G с нужным списком групп
Без ключа -a команда usermod -G заменяет весь список групп.Весь снимок ↗

Без ключа -a команда usermod -G заменяет весь список групп.

Что показывает снимок. Команда без -a заменила группы viktor: testers пропала, осталась devteam; исправление задало список заново.

Где это пригодится. Перед изменением групп администратора проверяют команду: без -a он потеряет группу sudo.

5.5 Что изменилось в системных файлах

Команды useradd, adduser, passwd и usermod меняют те же файлы, которые мы читали в частях 1–3. Новые строки добавляются в конец файлов, поэтому их выводит команда tail: tail -n 3 — последние три строки.

В терминалеНовые строки
  1. tail -n 3 /etc/passwd# три новые учётные записи
    что делает

    Что делает команда. Выводит три последние строки /etc/passwd — новые учётные записи.

    По частям:

    tail
    оставить только последние строки
    -n 3
    сколько последних строк оставить: 3
    /etc/passwd
    абсолютный путь
  2. tail -n 5 /etc/group# новые группы
    что делает

    Что делает команда. Выводит пять последних строк /etc/group — новые группы.

    По частям:

    tail
    оставить только последние строки
    -n 5
    сколько последних строк оставить: 5
    /etc/group
    абсолютный путь
  3. sudo tail -n 3 /etc/shadow# хеши паролей
    что делает

    Что делает команда. С правами root выводит три последние строки /etc/shadow — хеши паролей новых записей.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    tail
    оставить только последние строки
    -n 3
    сколько последних строк оставить: 3
    /etc/shadow
    абсолютный путь
  4. ls -l /home# домашние каталоги
    что делает

    Что делает команда. Выводит домашние каталоги с владельцами и правами.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    /home
    что показать (абсолютный путь)
Результат

в каждом файле появились строки anna, boris и viktor; хеши паролей начинаются с $y$ и различаются, хотя пароль у всех трёх один.

Снимок 5.5Ubuntu 24.04
  1. 1пустые поля комментария сохранены запятыми
  2. 2общая группа devteam и группа testers
  3. 3$y$ — алгоритм yescrypt
  4. 4соль — своя у каждой записи
  5. 5хеш: одинаковый пароль дал три разных хеша
  6. 6домашние каталоги закрыты для остальных: drwxr-x---
Новые строки в /etc/passwd, /etc/group и /etc/shadow и домашние каталоги.Весь снимок ↗

Новые строки в /etc/passwd, /etc/group и /etc/shadow и домашние каталоги.

Что показывает снимок. В /etc/passwd, /etc/group и /etc/shadow добавились строки новых записей; у одинаковых паролей разные хеши; домашние каталоги закрыты для остальных.

Где это пригодится. Эти строки проверяют после создания пользователей скриптом: всё ли создано так, как задумано.

Итоги части 5

  • groupadd создаёт группу; useradd -m -s /bin/bash -c "…" — учётную запись с домашним каталогом.
  • adduser создаёт запись по шагам с вопросами; в скриптах пишут useradd.
  • passwd имя задаёт пароль; usermod -aG группа имя добавляет в группу.
  • usermod -G без -a заменяет весь список дополнительных групп.
  • UID и GID одной записи могут не совпадать; одинаковые пароли дают разные хеши.

В отчётСнимок id anna и id boris с группой devteam и снимок tail /etc/group.

Открыть в отдельной вкладке ↗