Документация проекта AtlasOS
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user