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

61 lines
2.2 KiB
Markdown

# 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.