id показывает, каким ядро видит процесс: номер пользователя и номера групп.
Оболочку в терминале запустили при входе от student, и каждая команда из неё получает ту же учётную запись — так работал и cat в начале урока. Каталог сводки в проверке не участвует: ядро смотрит на процесс и на сам файл.
Ядро хранит учётную запись процесса числами. UID (user identifier) — номер пользователя, GID (group identifier) — номер группы. Имена student и root нужны людям; ядро сравнивает числа.
У root UID равен 0. Номер обычного пользователя выдаётся при создании учётной записи и на разных машинах бывает разным.
Кроме пользователя, у процесса есть группы. Группа объединяет учётные записи для общего доступа: например, всем участникам группы reports можно читать сводки.
Основная группа у процесса одна, её номер и есть GID. Дополнительных групп может быть несколько. При проверке доступа ядро учитывает все.
id печатает всё сразу, например uid=1000(student) gid=1000(student) groups=1000(student),27(sudo): UID, основную группу и список групп, каждую числом и именем. id root описывает другую учётную запись.
Список групп процесс получает от процесса, который его запустил, и потом не обновляет. Заново из учётной записи его читают вход в систему и sudo -u, когда запускают новый процесс. Поэтому две похожие команды могут напечатать разное:
| Команда | Что описывает | Когда видна новая группа |
|---|---|---|
id |
текущий процесс — твою оболочку | после нового входа в систему |
id student |
учётную запись, как она записана сейчас | сразу после добавления |
Группе reports разрешено читать сводку. Тебя только что добавили в reports. В том же терминале ты запускаешь новую оболочку командой bash и в ней — cat summary.txt. Что будет?
-
bash, запущенный из старой оболочки, наследует её список групп. Выполни в нёмid— reports в списке не будет. -
Пароль группы — старая редкая возможность
newgrp, участнику группы он не нужен. Отказ будет из-за списка групп оболочки:idпокажет его без reports. -
cdменяет только текущий каталог оболочки, группы остаются прежними. Сравниidдо и послеcd— вывод одинаковый.
Новая оболочка — процесс, запущенный из старой, и список групп она наследует от неё. id в ней покажет прежние группы, id student — уже с reports. Новый список даст новый вход в систему.
Главное в шаге
- Ядро различает пользователей и группы по номерам — UID и GID; имена нужны людям.
- У процесса одна основная группа и могут быть дополнительные, доступ проверяется по всем.
-
Список групп процесс наследует при запуске; заново из учётной записи его читают вход в систему и
sudo -u.