# Безопасность и личная автоматизация (терминал + интернет) PAPA YU рассчитан на **личное использование**. Ниже — как настроена защита и как приложение может работать с терминалом и интернетом (Chrome, GitHub и т.д.) оставаясь надёжно защищённым. --- ## 1. Что разрешено по умолчанию - **Файлы:** чтение/запись только в выбранных пользователем путях; защита служебных каталогов (`.git`, `node_modules`, `target`, `dist` и т.д.). - **Сеть:** только исходящие HTTPS-запросы к настроенным API (LLM, OpenRouter и т.д.) из кода приложения; никакого произвольного доступа с фронтенда. - **Браузер:** через встроенный механизм Tauri (`shell:allow-open`) можно открывать только ссылки `http(s)://`, `mailto:`, `tel:` в **стандартном браузере** системы (Chrome, Safari и т.д.). Произвольные команды в shell для этого не нужны. --- ## 2. Личная автоматизация: терминал и интернет Чтобы приложение могло **самостоятельно** выполнять ограниченный набор действий в терминале и открывать ссылки (GitHub, документация и т.д.), используется отдельная capability **personal-automation**. ### Что даёт personal-automation - **Открытие URL в браузере** (если по какой-то причине нужен явный вызов): - macOS: `open` с аргументом-URL (только `https?://...`). - Linux: `xdg-open` с URL. - Windows: `cmd /c start "" `. - **Терминал — только разрешённые команды и аргументы:** - **git**: `status`, `pull`, `push`, `add`, `commit`, `checkout`, `branch`, `log`, `diff`, `clone`, `fetch`, `merge` и аргументы по валидатору (URL репозитория, имена веток/путей). - **npm**: `install`, `run`, `ci`, `test`, `build`, `start`, `exec`, `update` и допустимые имена скриптов/пакетов. - **npx**: `-y`, `create-*`, `run`, `exec` и допустимые имена. - **cargo**: `build`, `test`, `run`, `check`, `clippy`, `fmt`, `install` и допустимые аргументы. - **python3**: `-m pytest`, `pip install` и т.п. с ограниченными аргументами. Любая **другая** команда или аргумент вне этого списка **заблокированы** на уровне Tauri (scope shell). ### Как включить Capability `personal-automation` уже подключён в проекте: окно `main` получает эти разрешения вместе с базовыми. Ничего дополнительно включать не нужно. ### Как ужесточить защиту 1. **Отключить выполнение команд в терминале:** В `src-tauri/capabilities/` удалите или переименуйте `personal-automation.json` и пересоберите приложение. Останется только открытие ссылок через стандартный `shell:allow-open` (без явных `open`/`xdg-open`/`start` из capability). 2. **Сузить список команд:** Отредактируйте `personal-automation.json`: удалите ненужные блоки `{"name": "...", "cmd": "...", "args": [...]}` или сократите `args` до конкретных подкоманд/валидаторов. 3. **Оставить только открытие ссылок:** В `personal-automation.json` оставьте только команды `open-url`, `xdg-open-url` и при необходимости `start-url`; блоки `git`, `npm`, `cargo`, `python3`, `npx` удалите. --- ## 3. Принципы защиты - **Нет произвольного кода:** фронтенд не может выполнить произвольную строку в shell (например, `bash -c "..."`). Разрешены только команды и аргументы из scope. - **Allowlist команд:** в `verify` и `auto_check` на бэкенде выполняются только команды из `src-tauri/config/verify_allowlist.json` с фиксированными аргументами. - **Подтверждение пользователя:** применение изменений к проекту только после явного подтверждения (`user_confirmed`). - **Сеть:** все вызовы к LLM/API идут из Rust (reqwest); ключи и URL задаются через переменные окружения, не хранятся в фронтенде. --- ## 4. Рекомендации для личного использования - Храните `.env.openai` (ключи API) только локально и не коммитьте их в репозиторий. - Используйте один аккаунт/профиль ОС для повседневной работы; не запускайте приложение с правами администратора без необходимости. - При необходимости отключите или сузьте `personal-automation` по инструкциям выше. --- *См. также: `README.md` (раздел «Безопасность»), `config/verify_allowlist.json`.*