2.2 KiB
2.2 KiB
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:
- Получает
uid/gidиз сессии CMC. - Загружает inode файла/каталога.
- Вычисляет effective mode:
- если uid == 0 (root) — полный доступ;
- иначе комбинирует owner/group/other биты.
- Возвращает
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.