Files
BarotraumaLuaProjects/atlas_os/docs/05-users-permissions.md

2.2 KiB
Raw Permalink Blame History

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).
  • Хеш — короткая строка (816 символов).
  • Права проверяются только при операциях ФС; CMC не дублирует проверки.

См. 06-execution-model.md — как сессия хранит uid/gid и cwd.