Skip to main content

Глава 2. Пользователи, группы и права доступа

Учебная методичка. Ubuntu Server 26.04.1 LTS (Resolute Raccoon). Проверено по официальной документации и на виртуальной машине Ubuntu Server 26.04.1 LTS с sudo-rs 0.2.13; 7 октября 2026 года.

Цель и результаты обучения

Цель занятия — научиться управлять локальными учётными записями и предоставлять пользователям только необходимые права.

После изучения материала студент должен уметь:

  • создавать, изменять и удалять пользователей и группы;
  • читать сведения об учётной записи и объяснять назначение UID и GID;
  • отличать блокировку пароля от прекращения доступа к системе;
  • применять sudo и проверять разрешённые административные команды;
  • определять владельца, группу и права файла или каталога;
  • организовывать доступ нескольких пользователей к общим данным.

Учебная среда: виртуальная машина Ubuntu Server из первой главы, запущенная в Oracle VirtualBox. Адаптер 1 работает в режиме сетевого моста, адрес получается автоматически по DHCP. Адаптер 2 подключён к NAT, но его IPv4 и IPv6 в Ubuntu не настроены. Работа ведётся через консоль VirtualBox либо SSH по адресу интерфейса моста. Настройки сети в этой главе менять не требуется.

Основная учётная запись, созданная при установке, — student с паролем 123456. Имя узла — от 562-01 до 562-13 по номеру рабочего места, считая от входа. Команды с sudo выполняют из сеанса student; при запросе его пароля вводят 123456. Эта запись сохраняется для администрирования и совместной работы.

Дополнительные учебные пользователи — student1, student2, student3. Первые два работают с общим файлом через группу labteam, третий используется для проверки доступа пользователя вне группы. Блокировку, изменение паролей и удаление в упражнениях выполняют только над дополнительными записями. Примеры в теоретической части объясняют отдельные операции; последовательность практической работы приведена в конце главы.

1. Пользователи и группы в Linux

Учётная запись связывает пользователя или службу с идентификатором, настройками входа и правами доступа. Имя удобно человеку, но ядро использует числовой UID — идентификатор пользователя. Группа имеет числовой GID. Владельцы файлов также записываются в файловой системе числовыми идентификаторами.

В системе различают:

Вид учётной записи Назначение
Обычная Работа человека: вход, запуск программ, хранение личных файлов
Системная Запуск конкретной службы или выполнение служебных задач
root Администрирование системы; UID равен 0

Системная запись может не иметь обычного домашнего каталога, пригодного для входа пароля или интерактивной оболочки. Например, оболочка /usr/sbin/nologin предназначена для отказа в обычном интерактивном входе. Не следует удалять такие записи только потому, что ими никто не пользуется вручную: они могут принадлежать установленным службам.

У пользователя есть основная группа и могут быть дополнительные группы. Основная группа указана в записи пользователя; дополнительные группы позволяют предоставлять общие права без смены основной группы. При обычном создании нового файла его группа определяется группой процесса; для каталога с установленным битом setgid действует наследование группы каталога.

Проверка текущей учётной записи:

whoami
id
groups

whoami выводит имя текущего эффективного пользователя. id показывает UID, основной GID и группы. groups выводит имена групп. Сведения об основной записи можно проверить командой id student. Дополнительных пользователей проверяют после их создания в разделе 3.

Локальные записи хранятся на самом сервере. В организациях серверы могут также получать пользователей из каталога LDAP или Active Directory. Поэтому для поиска учётных записей удобно применять getent, который обращается к настроенным источникам сведений, а не только читать локальные файлы:

getent passwd student
getent group sudo

Далее рассматриваются локальные пользователи. Подключение к централизованным каталогам — отдельная задача.

Выучить: учётная запись, UID и GID

Учётная запись — набор сведений, связывающий пользователя или службу с идентификатором и параметрами работы в системе.

UID — числовой идентификатор пользователя. GID — числовой идентификатор группы. UID пользователя root равен 0.

Основная группа указана в записи пользователя. Дополнительные группы предоставляют членство в других группах. Числовые идентификаторы важнее имён для определения владельцев файлов.

2. Администратор, root и sudo

Процесс, работающий от имени root, обладает широкими полномочиями: может управлять пользователями, устанавливать программы и менять системные файлы. Ошибка в таком сеансе затрагивает всю систему. Для обычной работы используют личную запись, а административные команды выполняют через sudo.

В стандартной установке Ubuntu пароль root заблокирован. Пользователь, созданный установщиком, получает административные права через группу sudo. Это позволяет администрировать сервер без назначения пароля root. Управление пользователями в Ubuntu Server.

sudo id
sudo -l

Первая команда запускает id с повышенными правами; в результате будет виден UID 0. Вторая показывает правила sudo, применимые к текущему пользователю. При стандартной настройке запрашивается пароль вызывающего пользователя. Успешная проверка пароля может временно запоминаться; команда sudo -k сбрасывает это подтверждение.

В Ubuntu 26.04 по умолчанию применяется реализация sudo-rs. Базовые команды этой главы сохраняются, однако отдельные возможности и настройки отличаются от традиционного sudo. Проверяйте установленную реализацию командами sudo --version и man sudo. В sudo-rs этой версии при вводе пароля по умолчанию могут отображаться символы обратной связи; отсутствие видимых символов также возможно в зависимости от реализации и настроек. Это не означает, что ввод не работает. Замена системных утилит в Ubuntu, обратная связь при вводе пароля в Ubuntu 26.04.

Если требуется несколько связанных действий администратора, можно открыть его оболочку:

sudo -i
whoami
exit

exit возвращает в исходный сеанс. Для отдельной операции предпочтительнее одна команда с sudo: так легче видеть, какой именно команде предоставлены полномочия.

Запомнить: sudo

sudo — средство запуска команды от имени другого пользователя в соответствии с правилами доступа; обычно его используют для административных команд от root.

sudo -l показывает разрешения текущего пользователя. sudo -i открывает административную оболочку, а exit завершает её. В обычном сеансе нашего стенда используется student.

3. Создание учётной записи

В Ubuntu для интерактивного создания локального пользователя удобно применять adduser:

sudo adduser student1
sudo adduser student2

Утилита создаёт запись, домашний каталог и, при обычной конфигурации, одноимённую основную группу; копирует шаблонные файлы и предлагает назначить пароль. Дополнительные сведения о пользователе можно оставить пустыми. Пароль вводят по запросу программы, а не включают в командную строку.

После завершения обеих команд проверьте созданные записи:

id student1
id student2
getent passwd student1
getent passwd student2
ls -ld /home/student1 /home/student2

Не запоминайте конкретное значение UID из примера: оно зависит от уже существующих записей. Новый пользователь не становится администратором автоматически. Справка adduser для Ubuntu 26.04.

Чем useradd отличается от adduser

useradd — низкоуровневая утилита, удобная для сценариев. Чтобы результат не зависел от значений по умолчанию, существенные параметры задают явно:

sudo useradd -m -d /home/student3 -s /bin/bash -U student3
sudo passwd student3

Здесь -m создаёт домашний каталог, -d задаёт его путь, -s выбирает оболочку, -U создаёт одноимённую группу. Первой командой пароль не назначается; его задают отдельной командой passwd. Не запускайте этот пример повторно, если student3 уже создан. Справка useradd.

Шаблон /etc/skel

При создании домашнего каталога в него копируются файлы из /etc/skel. В том числе это могут быть .profile и .bashrc, определяющие часть настроек сеанса и оболочки.

ls -la /etc/skel
sudo ls -la /home/student1

Ключ -a показывает скрытые файлы, имена которых начинаются с точки. Изменение /etc/skel влияет на последующее создание пользователей и не обновляет автоматически существующие домашние каталоги. В шаблоне нельзя хранить общие пароли, закрытые SSH-ключи и другие секреты.

Переключение между пользователями

Пользователь student1 уже создан предыдущими командами. Из сеанса student выполните:

su - student1
whoami
pwd
exit

su обычно запрашивает пароль целевой записи — здесь пароль student1, назначенный при создании. Команда exit возвращает в сеанс student. Дефис включает режим входа: устанавливается соответствующее окружение и выполняется переход в домашний каталог. Администратор с подходящим правилом sudo может открыть такой сеанс без знания пароля другого пользователя:

sudo -iu student1
whoami
pwd
exit

После переключения проверьте whoami, прежде чем выполнять команды. Смена пользователя не изменяет владельцев уже существующих файлов.

Записать: создание перед проверкой

Домашний каталог — каталог личных файлов и настроек пользователя. Оболочка — программа, принимающая и выполняющая команды пользователя.

Порядок действий: создать запись → назначить пароль → проверить id и getent passwd → переключиться на неё.

adduser создаёт пользователя интерактивно. useradd требует явного выбора нужных параметров. su - student1 обычно запрашивает пароль student1; sudo -iu student1 применяется из административного сеанса. После проверки вернитесь командой exit.

4. Файлы учётных записей

/etc/passwd

Несмотря на название, этот файл обычно не содержит хеши паролей. Каждая локальная запись состоит из семи полей, разделённых двоеточиями. Пример условный:

student1:x:1001:1001:Учебный пользователь:/home/student1:/bin/bash
Номер поля Содержимое Значение в примере
1 Имя пользователя student1
2 Указатель на сведения о пароле x: сведения находятся в shadow
3 UID 1001
4 GID основной группы 1001
5 Комментарий, поле GECOS Учебный пользователь
6 Домашний каталог /home/student1
7 Оболочка /bin/bash

Поля UID и GID выполняют разные задачи, даже если их значения совпадают. Файл доступен для чтения обычным пользователям, поскольку приложениям нужны сведения об именах и владельцах. Для изменения записей применяют административные утилиты, а не обычный текстовый редактор. Формат passwd.

/etc/shadow

Этот файл хранит защищённые сведения о пароле и сроках действия локальной записи. В нём девять полей:

Поле Назначение
Имя Связь с записью пользователя
Пароль Хеш с параметрами алгоритма либо специальный маркер
Последнее изменение Дата изменения пароля, выраженная числом дней от 01.01.1970
Минимальный срок Через сколько дней разрешена очередная смена
Максимальный срок Через сколько дней требуется смена
Предупреждение За сколько дней предупреждать об истечении
Неактивность Период после истечения пароля до отключения записи
Истечение записи Дата прекращения действия учётной записи
Резерв Поле для будущего использования

Хеширование не является обратимым шифрованием: система проверяет введённый пароль с помощью соответствующего алгоритма. Однако полученные хеши позволяют проводить подбор вариантов без обращения к серверу. Поэтому содержимое shadow не включают в отчёты и не показывают группе на проекторе.

Начальный ! в поле пароля означает блокировку парольной проверки. Значение * также не является пригодным хешем для обычного парольного входа. Отдельные способы входа, например SSH-ключи, требуют отдельной проверки. Формат shadow.

/etc/group и /etc/gshadow

/etc/group содержит имя группы, поле пароля, GID и список дополнительных участников. Основная группа пользователя определяется полем GID в passwd, поэтому отсутствие имени в списке /etc/group ещё не означает отсутствие членства в группе. /etc/gshadow хранит защищённые сведения о группах. Для повседневной работы достаточно getent group, id и команд управления группами.

Выучить: файлы учётных записей

/etc/passwd — основные сведения о локальных пользователях, включая UID, основной GID, домашний каталог и оболочку.

/etc/shadow — защищённые сведения о паролях и сроках действия локальных записей. /etc/group — сведения о локальных группах и дополнительных участниках.

Хеш пароля — результат специального преобразования для проверки пароля. Это не исходный пароль и не обратимо зашифрованная копия, однако хеш позволяет проверять варианты при подборе.

5. Изменение пользователей и групп

Создать общую группу и включить в неё пользователей:

sudo groupadd labteam
sudo usermod -aG labteam student1
sudo usermod -aG labteam student2
id student1
getent group labteam

В сочетании -aG буква G задаёт дополнительные группы, а a означает добавление к существующему списку. usermod -G без -a заменяет список дополнительных групп. Ошибка может убрать пользователя из sudo и других нужных групп. Справка usermod.

Изменения членства не обновляют автоматически уже работающие процессы. Для проверки прав пользователь должен начать новый сеанс: выйти и снова войти либо открыть новый сеанс через sudo -iu. Вывод id student1 показывает сведения о записи, а id внутри старого сеанса — группы текущего процесса.

Другой способ добавить или удалить участника дополнительной группы:

sudo gpasswd -a student1 labteam
sudo gpasswd -d student1 labteam

Основную группу изменяют отдельным параметром:

sudo usermod -g labteam student1

Перед этим группа должна существовать. Переназначение основной группы не следует считать универсальной заменой группы у всех файлов пользователя: файлы вне домашнего каталога нужно проверять отдельно.

Имя, домашний каталог и оболочка

Смена имени и перенос домашнего каталога — разные операции. У usermod параметр -l меняет имя записи, -d задаёт новый домашний каталог, -m переносит содержимое. Новое имя должно быть свободно; изменения выполняют для пользователя, завершившего свои сеансы. Одноимённая группа не переименовывается автоматически. Поскольку UID остаётся прежним, принадлежащие записи файлы сохраняют владельца; приложения и сценарии, использующие старое имя или путь, могут потребовать изменений. В этом занятии имена student1, student2, student3 сохраняются для единообразия стендов.

Изменение оболочки выполняют через usermod -s, например sudo usermod -s /bin/bash student1. Ограничение интерактивной оболочки само по себе не заменяет проверку всех предоставленных пользователю способов доступа.

Выучить: добавление в группу

usermod -aG ГРУППА ПОЛЬЗОВАТЕЛЬ добавляет дополнительную группу, сохраняя существующие. -G без -a заменяет список дополнительных групп.

После изменения групп начинают новый сеанс. id student1 показывает сведения о записи, а id без имени — идентификаторы и группы текущего процесса.

6. Пароли, блокировка и сроки действия

Обычный пользователь меняет свой пароль командой passwd. Администратор может назначить пароль другой локальной записи:

sudo passwd student1
sudo passwd -S student1
sudo chage -l student1

passwd -S показывает состояние пароля и параметры сроков. Основные обозначения: P — пригодный пароль, L — заблокированный пароль, NP — отсутствие пароля. Наличие P не гарантирует возможность входа: её могут ограничивать другие правила. Справка passwd.

Блокировка пароля

sudo passwd -l student1
sudo passwd -S student1
sudo passwd -u student1

Блокировка запрещает использование сохранённого пароля для проверки. Она не является полным отключением пользователя: могут оставаться SSH-ключи, уже открытые сеансы и другие механизмы доступа. Разблокировку применяют только для записи, у которой ранее был назначен пригодный пароль.

Если необходимо прекратить действие локальной учётной записи, можно задать истёкшую дату:

sudo usermod --expiredate 1 student1

Число 1 означает день после начала отсчёта Unix, то есть заведомо прошедшую дату. Проверяйте отказ для всех используемых служб: применение ограничений зависит от их конфигурации, в том числе PAM. Истечение записи не завершает уже работающие процессы и сеансы. Для восстановления в учебном примере:

sudo chage -E -1 student1

В рабочей среде отзыв доступа включает также проверку сеансов, SSH-ключей, правил sudo, служебных токенов и принадлежности к группам. Различие блокировки пароля и записи в usermod.

Сроки действия пароля

chage управляет возрастом пароля и датой окончания действия записи:

Пример Результат
sudo chage -l student1 Показать параметры
sudo chage -d 0 student1 Потребовать смену пароля при следующем соответствующем входе
sudo chage -M 90 student1 Задать максимальный возраст пароля 90 дней
sudo chage -m 5 student1 Задать минимальный интервал между сменами 5 дней
sudo chage -W 7 student1 Предупреждать за 7 дней до истечения
sudo chage -I 10 student1 Отключать запись через 10 дней после истечения пароля
sudo chage -E 2026-12-31 student1 Задать дату окончания действия записи
sudo chage -M -1 student1 Убрать ограничение максимального возраста пароля
sudo chage -I -1 student1 Убрать ограничение по неактивности после истечения пароля
sudo chage -E -1 student1 Убрать дату окончания действия записи

Параметр -d 0 меняет дату последней смены, а не устанавливает дату отключения записи. Возраст пароля и срок действия учётной записи — разные ограничения. После изменений проверяют chage -l. Справка chage проекта shadow-utils.

Периодическая смена пароля — технически доступная настройка, но её не нужно включать автоматически для всех серверов. Современные рекомендации NIST требуют смены при признаках компрометации и не рекомендуют произвольную обязательную ротацию. Организационные требования определяются отдельно. NIST SP 800-63B, требования к паролям.

Запомнить: три разные операции

Блокировка пароля запрещает проверку по сохранённому паролю. Истечение учётной записи задаёт прекращение её действия при входе через службы, учитывающие это ограничение. Завершение сеанса останавливает текущую пользовательскую сессию.

Блокировка пароля не завершает открытые сеансы и не доказывает запрет входа по SSH-ключу.

Записать: passwd -S — состояние пароля; chage -l — сроки; chage -d 0 — требование смены пароля; chage -E — дата окончания действия записи.

7. Проверка качества паролей

Linux использует PAM — набор модулей, через которые службы могут выполнять проверку пользователя и другие связанные операции. Проверка качества нового пароля может выполняться модулем pam_pwquality. Для Ubuntu 26.04 используют пакет libpam-pwquality; рекомендации устанавливать старый libpam-cracklib в эту методичку не перенесены.

Дополнительное упражнение выполняют после снимка виртуальной машины и при сохранённом административном сеансе:

sudo apt update
sudo apt install libpam-pwquality
sudo pam-auth-update

В интерфейсе pam-auth-update проверьте включение профиля проверки качества пароля, сохранив необходимые существующие профили. Утилита управляет порядком модулей на основе профилей пакетов. Не следует без проверки добавлять строки в /etc/pam.d/common-password: ошибочный порядок модулей может нарушить смену паролей. Справка pam-auth-update.

Пример учебной настройки в /etc/security/pwquality.conf:

minlen = 15
dcredit = 0
ucredit = 0
lcredit = 0
ocredit = 0
enforce_for_root

minlen задаёт минимальную длину. Нулевые значения credit не дают сокращать её за счёт наличия разных классов символов. enforce_for_root распространяет отказ при недостаточном качестве и на смену пароля администратором; сравнение с прежним паролем при административном сбросе ограничено, поскольку старый пароль не вводится.

Настройки могут также находиться в /etc/security/pwquality.conf.d/*.conf: эти файлы читаются в порядке имён перед основным конфигурационным файлом. Перед изменением проверьте существующие параметры и аргументы PAM-модуля, которые могут их переопределять. Формат pwquality.conf, параметры pam_pwquality.

После настройки испытайте смену пароля дополнительного учебного пользователя: короткий пароль должен быть отклонён, достаточно длинная непредсказуемая парольная фраза — принята при соблюдении остальных проверок. Основную запись student и её пароль 123456 в этом упражнении не меняйте. Установка модуля сама по себе не заменяет существующий пароль, но при последующей смене новые требования будут применяться и к student. Поэтому дополнительное упражнение выполняют на снимке и после проверки возвращают стенд к исходному состоянию. Не публикуйте выбранные для теста пароли в отчёте. Проверка длины и словаря не равнозначна полноценной проверке по перечню скомпрометированных паролей.

Историю ранее использованных паролей можно контролировать модулем pam_pwhistory, но число сохраняемых значений и порядок модулей определяются политикой. В базовом занятии не требуется включать историю или обязательные комбинации символов. Рекомендации NIST по выбору паролей.

Запомнить: PAM

PAM (Pluggable Authentication Modules) — механизм подключаемых модулей, через который службы могут выполнять аутентификацию, проверки учётной записи и управление сеансом.

Аутентификация — проверка заявленной личности. Авторизация — определение разрешённых действий. Проверка качества нового пароля и предоставление прав администратора решают разные задачи.

8. Предоставление административных прав

Для назначения полного административного доступа через стандартное правило Ubuntu пользователя добавляют в группу sudo:

sudo usermod -aG sudo student1

После нового входа проверяют id и sudo -l. Это существенное расширение полномочий: пользователь сможет управлять всей системой. В основной практике ниже вместо этого предоставляется право на одну диагностическую команду.

Правила sudoers

Правила хранятся в /etc/sudoers и подключаемых файлах /etc/sudoers.d. Для изменения используют visudo: утилита проверяет синтаксис перед сохранением. При использовании sudo-rs проверьте также локальную справку man sudoers-rs; поддержка расширенных возможностей может отличаться.

Стандартное правило полного доступа группы имеет вид:

%sudo ALL=(ALL:ALL) ALL
Часть правила Смысл
%sudo Правило применяется к участникам группы sudo
Первое ALL Все узлы, к которым относится правило
(ALL:ALL) Запуск от имени любого пользователя и группы
Последнее ALL Разрешены все команды

Для учебной демонстрации ограниченного доступа создайте файл через:

sudo visudo -f /etc/sudoers.d/lab-id

Его содержимое:

student1 ALL=(root) /usr/bin/id

Затем из административного сеанса:

sudo chown root:root /etc/sudoers.d/lab-id
sudo chmod 0440 /etc/sudoers.d/lab-id
sudo visudo -c

Имя lab-id выбрано без точки, чтобы файл обрабатывался стандартным подключением каталога sudoers.d. Проверка visudo -c должна завершиться без ошибок. Убедитесь, что /usr/bin/id существует; путь проверяется командой command -v id. Справка sudoers-rs.

Правило разрешает запуск указанной команды от имени root. Отсутствие ограничения аргументов означает, что допускаются её аргументы. Утилита id выводит сведения об идентификаторах и подходит для демонстрации. Любую другую программу перед делегированием нужно оценивать отдельно: редактор с доступом к произвольным файлам, оболочка, интерпретатор или менеджер пакетов могут фактически предоставить полный административный доступ. NOPASSWD в этой практике не используется.

Запомнить: правило sudoers

sudoers — правила, определяющие, кто, на каких узлах, от чьего имени и какие команды может запускать через sudo.

%sudo ALL=(ALL:ALL) ALL предоставляет группе sudo полный доступ по этому правилу. Отдельное ограниченное правило не отменяет более широких разрешений пользователя.

Записать: редактирование — visudo; проверка синтаксиса — visudo -c; проверка своих разрешений — sudo -l.

9. Владелец, группа и права доступа

Каждый файл и каталог имеет владельца, группу и набор прав. Посмотреть их можно командой ls -l; для самого каталога используют ls -ld.

Условный пример:

-rw-r----- 1 student1 labteam 124 Oct 6 12:00 report.txt

Первый символ указывает тип объекта: - — обычный файл, d — каталог, l — символическая ссылка. Следующие девять символов состоят из трёх троек: права владельца, группы и остальных пользователей. Далее среди прочих полей показаны имя владельца, имя группы и имя файла.

Тройка Чтение r Запись w Выполнение x
rw- у владельца Да Да Нет
r-- у группы Да Нет Нет
--- у остальных Нет Нет Нет

Для базовых прав без ACL выбирается один класс: если процесс соответствует владельцу — применяются права владельца; иначе, если он входит в группу файла — права группы; иначе — права остальных. Права этих классов не складываются. Если владелец лишён чтения, наличие чтения для остальных не выдаёт ему это право. У привилегированных процессов есть возможности обхода обычных проверок; проверять ограничения нужно от имени обычного пользователя.

Файл и каталог: различное значение прав

Право Для обычного файла Для каталога
r Читать содержимое Получать список имён
w Изменять содержимое Создавать, удалять и переименовывать записи при наличии нужного x
x Выполнять как программу при соблюдении остальных условий Проходить через каталог и обращаться к объектам по имени

Для доступа к файлу необходимо право прохода x во всех каталогах его пути. Чтение списка имён каталога само по себе не разрешает читать содержимое файлов.

Удаление файла обычно определяется правами w и x родительского каталога, а не правом записи в самом файле. Поэтому файл только для чтения может быть удалён пользователем, которому разрешено менять каталог. Дополнительно влияют специальные биты, ACL, атрибуты и состояние файловой системы. Например, sticky bit в /tmp ограничивает удаление чужих файлов. В основном упражнении используются обычные права без ACL и специальных битов.

Выучить: права r, w, x

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

Для файла: r — чтение, w — изменение содержимого, x — выполнение. Для каталога: r — список имён, w — изменение записей при наличии x, x — проход и обращение к объектам по имени.

Удаление файла обычно определяется правами родительского каталога. Права владельца, группы и остальных в базовой модели не складываются.

10. Изменение прав и владельцев

Символьная запись chmod

chmod меняет права; обозначения u, g, o, a относятся к владельцу, группе, остальным и всем классам. Операторы +, -, = добавляют, убирают и задают права соответственно.

Для примеров этого раздела сначала подготовьте отдельный каталог и объекты. Выполняйте команды в обычном сеансе student:

mkdir -p ~/chapter02-permissions/scripts ~/chapter02-permissions/shared
cd ~/chapter02-permissions
touch script.sh report.txt private.txt

Файл script.sh здесь служит для проверки права выполнения; содержимое сценария в этом упражнении не создаётся. Просматривайте изменения через ls -l, не запускайте пустой файл. Все следующие примеры с относительными именами выполняются из ~/chapter02-permissions.

chmod u+x script.sh
chmod g-w report.txt
chmod o= report.txt
chmod u=rw,g=r,o= report.txt

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

Восьмеричная запись

Значения r, w, x соответствуют числам 4, 2, 1. Сумма задаёт одну тройку:

Значение Права
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx

Три цифры задают права владельца, группы и остальных:

chmod 600 private.txt
chmod 640 report.txt
chmod 750 scripts
chmod 770 shared

600 подходит личному файлу, 640 — файлу с чтением для группы, 750 — каталогу с полным доступом владельца и просмотром для группы, 770 — общему каталогу владельца и группы. Перед выполнением объекты должны существовать. Режим 777 предоставляет запись всем пользователям и не должен служить универсальным способом исправления ошибки доступа.

При рекурсивном изменении учитывайте различие файлов и каталогов. chmod -R 770 сделает исполняемыми и обычные документы. Для отдельного учебного дерева, в котором нет исполняемых файлов, режимы можно разделить:

sudo find /srv/lab-permissions -type d -exec chmod 770 {} +
sudo find /srv/lab-permissions -type f -exec chmod 660 {} +

Команды применяют только к заранее проверенному каталогу упражнения. Символ X в символьном режиме позволяет добавлять выполнение каталогам и файлам, у которых уже есть хотя бы один бит выполнения; это полезно для смешанных деревьев.

Владение и группа

sudo chown student1 report.txt
sudo chown student1:labteam report.txt
sudo chgrp labteam report.txt
ls -l report.txt

Первая команда меняет владельца, вторая — владельца и группу, третья — только группу. Для обычного пользователя смена группы ограничена группами, в которые он входит, и принадлежностью файла; смену владельца выполняет администратор. chown и chgrp не меняют режим доступа автоматически. Не выполняйте рекурсивную смену владельца системных каталогов ради устранения одной ошибки. Справка chown.

Выучить и записать: числовые права

r = 4, w = 2, x = 1. Права одной тройки складываются: rw- = 6, r-x = 5, rwx = 7. Три цифры обозначают владельца, группу и остальных.

640 — владелец читает и пишет, группа читает, остальные не имеют прав. 770 — полный доступ владельцу и группе, отсутствие прав у остальных.

chmod меняет режим доступа; chown — владельца и при указании группу; chgrp — группу. Смена владельца и смена прав — разные операции.

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

Удаление записи и удаление её данных — разные решения. Сначала определяют, какие данные нужно сохранить, и прекращают работу её сеансов и служб. Для архива домашнего каталога учебного пользователя можно использовать:

sudo tar -czf /root/student1-home.tar.gz -C /home student1
sudo tar -tzf /root/student1-home.tar.gz

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

В Ubuntu применяют deluser:

sudo deluser student1

Без параметра удаления домашнего каталога данные сохраняются. Если удаление данных согласовано:

sudo deluser --remove-home student1

Низкоуровневые аналоги — userdel student1 и userdel -r student1; ключ -r удаляет домашний каталог и почтовый ящик, но не гарантирует удаление всех файлов пользователя на других дисках и в других каталогах. После удаления числовой UID у сохранившихся файлов остаётся. Повторное использование этого UID другой записью может передать ей права владельца. Поэтому оставшиеся данные необходимо учесть. Управление пользователями Ubuntu, справка useradd о связанных утилитах.

Удаление группы выполняют sudo groupdel labteam. Сначала убеждаются, что группа больше не нужна и не является основной для существующих пользователей. Удаление записи группы не переписывает автоматически GID у файлов и не отзывает группы у уже работающих процессов. Справка deluser.

Запомнить: удаление записи и данных

Удаление учётной записи не равнозначно удалению всех её файлов. У сохранившихся файлов остаётся числовой UID владельца.

Перед удалением определяют, что нужно сохранить, завершают связанные сеансы и проверяют оставшиеся данные. Основную административную запись student в упражнениях сохраняют.

12. Практическая работа: доступ к общему файлу

Задача: создать трёх обычных пользователей, разрешить двум из них работу с общим файлом через группу, проверить отказ для третьего и предоставить одному пользователю ограниченную административную команду.

Практическая работа начинается с исходного состояния после первой главы. Если вы уже выполняли примеры разделов 3–8, верните VM к снимку после установки: команды создания не нужно повторять для существующих записей. Перед началом создайте снимок VirtualBox, например before-users-lab. Оставьте открытой консоль администратора student. Используйте свежую виртуальную машину после первой главы или предварительно убедитесь, что имена student1, student2, student3, labteam и каталог /srv/lab-permissions не заняты. Если результаты предыдущего упражнения уже существуют, вернитесь к исходному снимку либо проверьте их с преподавателем перед повторным запуском команд.

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

В административном сеансе:

sudo adduser student1
sudo adduser student2
sudo useradd -m -d /home/student3 -s /bin/bash -U student3
sudo passwd student3
sudo groupadd labteam
sudo usermod -aG labteam student1
sudo usermod -aG labteam student2
id student1
id student2
id student3
getent group labteam

Назначьте дополнительным пользователям отдельные пароли. student1 и student2 должны входить в labteam, а student3 — оставаться вне этой группы. Членство в sudo для этих трёх записей не требуется. Основная запись student продолжает использовать пароль 123456.

Шаг 2. Создать общий каталог и файл

sudo mkdir /srv/lab-permissions
sudo chown root:labteam /srv/lab-permissions
sudo chmod 770 /srv/lab-permissions
sudo touch /srv/lab-permissions/report.txt
sudo chown student1:labteam /srv/lab-permissions/report.txt
sudo chmod 640 /srv/lab-permissions/report.txt
sudo ls -ld /srv/lab-permissions
sudo ls -l /srv/lab-permissions/report.txt

Ожидаемые режимы: каталог drwxrwx---, файл -rw-r-----. Владелец каталога — root, группа — labteam; владелец файла — student1. Для вновь создаваемых файлов группа и права могут отличаться в зависимости от основной группы процесса и umask; в упражнении они назначены явно.

Шаг 3. Проверить права без sudo внутри пользовательского сеанса

Откройте сеанс student1:

sudo -iu student1
id
printf 'Отчёт по лабораторной работе\n' > /srv/lab-permissions/report.txt
cat /srv/lab-permissions/report.txt
exit

Запись должна пройти: student1 владеет файлом и имеет rw-. Теперь проверьте другого участника группы:

sudo -iu student2
id
cat /srv/lab-permissions/report.txt
printf 'Дополнение\n' >> /srv/lab-permissions/report.txt
exit

Чтение должно пройти, добавление текста — завершиться отказом в доступе, поскольку группа имеет только r--. После exit разрешите группе запись из административного сеанса:

sudo chmod 660 /srv/lab-permissions/report.txt
sudo -iu student2
printf 'Дополнение от второго пользователя\n' >> /srv/lab-permissions/report.txt
cat /srv/lab-permissions/report.txt
exit

Теперь добавление должно пройти. Проверьте третьего пользователя, который не входит в общую группу:

sudo -iu student3
id
cat /srv/lab-permissions/report.txt
exit

Чтение должно завершиться отказом: у student3 нет права прохода через каталог. Отдельно объясните, почему при режиме каталога 770 участник группы мог бы удалить файл даже до выдачи записи в сам файл. Для ограничения удаления чужих файлов нужна другая организация каталога, например использование sticky bit; это выходит за условия данного упражнения.

Шаг 4. Отозвать участие в группе

sudo gpasswd -d student2 labteam
sudo -iu student2
id
cat /srv/lab-permissions/report.txt
exit

В новом сеансе labteam должна отсутствовать, чтение файла — завершаться отказом. Причина начинается уже с каталога: у остальных пользователей нет права прохода. Восстановите участие:

sudo usermod -aG labteam student2

Шаг 5. Проверить пароль и его блокировку

sudo passwd -S student1
sudo chage -l student1
sudo passwd -l student1
sudo passwd -S student1
sudo passwd -u student1

После блокировки ожидается состояние L, после восстановления пригодного пароля — P. В отчёте объясните, почему это не доказывает полный отзыв доступа. Не проверяйте блокировку на единственной административной записи.

Шаг 6. Делегировать одну команду

Создайте правило /etc/sudoers.d/lab-id и проверьте его по разделу 8. Затем:

sudo -iu student1
sudo -l
sudo /usr/bin/id
sudo /usr/bin/whoami
printf 'Код запрещённой команды: %s\n' "$?"
exit

После ввода пароля student1 команда id должна показать UID 0. whoami должна быть запрещена, если у student1 нет других разрешающих правил. Текст отказа зависит от реализации sudo. В проверенной версии sudo-rs возможен ответ sudo: I'm sorry student1. I'm afraid I can't do that. Оценивайте результат по отсутствию выполнения запрещённой команды и ненулевому коду; в испытании этой версии код равен 1. printf в примере получает $? сразу после запрещённой команды.

Если разрешены обе команды, исследуйте членство в группах и вывод sudo -l: правила предоставляют права совместно, и ограниченное правило не отменяет более широкое разрешение.

Что включить в отчёт

  1. Версию Ubuntu и используемую реализацию sudo.
  2. UID, основной GID и дополнительные группы учебных пользователей.
  3. Режимы и владельцев каталога и файла.
  4. Результаты чтения и записи до и после chmod 660.
  5. Отказ в доступе для student3 и результат доступа student2 после удаления из группы в новом сеансе.
  6. Состояния пароля до блокировки, после блокировки и после восстановления.
  7. Разрешённую и запрещённую команды sudo с объяснением результата.

Пароли и содержимое /etc/shadow в отчёт не включают. Приводят только нужные команды и результаты, а не всю историю терминала.

Завершение работы

Предпочтительный вариант для одноразового стенда — вернуть виртуальную машину к снимку before-users-lab. Если преподаватель требует сохранить результаты, оставьте стенд до проверки.

Для ручной очистки исключительно созданных в упражнении объектов завершите пользовательские сеансы, затем из административного сеанса выполните:

sudo rm /etc/sudoers.d/lab-id
sudo visudo -c
sudo rm /srv/lab-permissions/report.txt
sudo rmdir /srv/lab-permissions
sudo deluser --remove-home student1
sudo deluser --remove-home student2
sudo deluser --remove-home student3
sudo groupdel labteam

Перед удалением убедитесь, что файл и каталог содержат только результаты упражнения. Если каталог не пуст, rmdir остановится; исследуйте оставшееся содержимое. Системную и исходную административную записи не удаляют.

13. Контрольные вопросы

  1. Чем UID отличается от имени пользователя, а GID — от UID?
  2. Почему getent passwd полезнее чтения только /etc/passwd при подключённом каталоге пользователей?
  3. Чем отличается основная группа от дополнительных? Почему -aG безопаснее для добавления группы, чем -G?
  4. Почему новая группа может не отображаться командой id в уже открытом сеансе?
  5. Какие сведения находятся в passwd, shadow и group? Почему хеши паролей нельзя публиковать?
  6. Чем отличаются блокировка пароля, истечение записи и завершение сеанса?
  7. Как различаются chage -d 0, chage -M 90 и chage -E 2026-12-31?
  8. Почему запуск редактора от root нельзя считать безопасным ограниченным делегированием?
  9. Разберите режимы 640, 660, 750 и 770. Чем право x каталога отличается от x файла?
  10. Может ли пользователь удалить чужой файл без права записи в него? Какие права нужно проверить?
  11. Почему chmod -R 770 не подходит дереву обычных документов?
  12. Что произойдёт с сохранившимся файлом после удаления владельца и последующего повторного использования его UID?

Документация и актуальность

Актуализация для Ubuntu Server 26.04.1 LTS включает sudo-rs, использование libpam-pwquality, уточнение блокировки пароля и действия сроков, исправление формата passwd и трактовки sudoers, а также безопасный по назначению пример ограниченного делегирования. Практическая работа и вопросы служат закреплению материала.

Основные первичные источники:

Справку по установленной на стенде версии команды можно открыть через man имя_команды. Если поведение отличается от ожидаемого, сначала проверьте версию Ubuntu, установленные пакеты, применяемые правила и текущие группы процесса.