# 05 — Пользователи и права (Users & Permissions) ## 1. Хранилище пользователей (SEG0) ``` PASSWD|uid|name|gid|home|hash ``` Пример: ``` PASSWD|0|root|0|/|- PASSWD|100|captain|10|/home/captain|abc123hash PASSWD|101|engineer|20|/home/engineer|def456hash ``` - `uid` / `gid` — положительные целые. - `hash` — простой хеш пароля (не криптографический, только для игровых целей). - Минимальный набор: `root` (uid=0) и хотя бы один пользователь. ## 2. Права доступа (mode bits) ``` rwxrwxrwx (9 бит) + suid/sgid (2 бита) = 12-бит octal ``` | Бит | Название | Проверка | |---|---|---| | `0400` | `r` owner | uid == file.uid | | `0200` | `w` owner | uid == file.uid | | `0100` | `x` owner | uid == file.uid | | `0040..0010` | `rwx` group | gid == file.gid | | `0004..0001` | `rwx` other | всегда | | `4000` | suid | (не используется в командах ls/cat) | | `2000` | sgid | (не используется) | ## 3. Проверка прав (MMC) При каждом `STAT/READ/WRITE/LS/CHDIR` MMC: 1. Получает `uid/gid` из сессии CMC. 2. Загружает inode файла/каталога. 3. Вычисляет effective mode: - если uid == 0 (root) — полный доступ; - иначе комбинирует owner/group/other биты. 4. Возвращает `EACCES` при отказе. ## 4. Аутентификация - Простейшая: `login name pass` сравнивает хеш. - Сессия CMC хранит текущие `uid/gid`. - `su` / `logout` — опциональные команды (см. `07-command-set.md`). ## 5. Экономия - Таблица `PASSWD` ≤ 32 записи (чтобы влезала в SEG0). - Хеш — короткая строка (8–16 символов). - Права проверяются **только** при операциях ФС; CMC не дублирует проверки. См. `06-execution-model.md` — как сессия хранит uid/gid и cwd.