labctl.graywrk.ru
войти регистрация

общие положения

Платформа labctl (далее — Сервис) обрабатывает минимально необходимый набор персональных данных для регистрации пользователей, хранения прогресса и авторизации. Обработка ведётся в соответствии с Федеральным законом № 152-ФЗ «О персональных данных».

Оператор: graywrk@gmail.com. Сайт не является общедоступным государственным ресурсом и не передаёт данные третьим лицам.

какие данные мы собираем

username
отображаемое имя (3–32 символа). Видно другим пользователям в рейтинге.
email
адрес электронной почты. Используется только для входа как альтернатива username. На данный момент письма не отправляются.
password
хранится исключительно как хеш по алгоритму argon2id (RFC 9106). Открытый текст пароля нигде не сохраняется и не логируется.
cookie сессии
HttpOnly + SameSite=Strict + Secure (по HTTPS) токен ~256 бит. Хранится в таблице sessions с датой истечения.
тема оформления
выбор из 4 тем (dark/light/solarized/nord). Хранится в аккаунте и в localStorage браузера.
прогресс по лабораторным
список решённых лаб, попытки, открытые подсказки — для подсчёта рейтинга и отображения вашего прогресса.
команды терминала
каждая Enter-завершённая команда, введённая в терминале лабы, сохраняется в отдельной таблице audit_log с привязкой к user_id, IP, session-токену и метке времени. Назначение: anti-abuse (защита от использования Сервиса для атак на сторонние ресурсы), forensic-доказательная база для случаев, когда действия пользователя подлежат разбирательству. См. раздел «аудит команд» ниже.

аудит команд терминала

Каждый интерактивный терминал в Сервисе работает внутри изолированного Docker-контейнера. Чтобы предотвратить использование Сервиса для противоправных действий и оператор мог при необходимости доказать «действия конкретного пользователя», выполняется:

  • Запись команд: после нажатия Enter в журнале audit_log появляется запись с текстом команды, идентификатором пользователя, IP-адресом входящего запроса, идентификатором сессии и временем с точностью до микросекунды.
  • Отключение исходящего интернета из контейнера лабораторной (network_mode: none): контейнер не может выполнить curl, wget, nc или любую другую сетевую команду во внешний мир. Сеть доступна только на короткое время установки зависимостей (setup.sh), после чего контейнер пересоздаётся без сети.
  • Сохранение аудита при удалении аккаунта: записи audit_log не имеют FK-каскада к users и переживают удаление аккаунта — это сделано осознанно для возможного судебного разбирательства.

Записи audit_log не содержат паролей или секретов как таковых — только то, что пользователь осознанно вводил в командной строке. Однако содержимое команды может включать PII (например, переданные аргументы) — поэтому доступ к audit_log имеет только оператор.

как хранится

  • База данных PostgreSQL, развёрнутая на том же сервере, что и Сервис. Шифрования на диске нет — данные защищены сетевой изоляцией и паролем СУБД.
  • Логи запросов содержат HTTP-методы, пути, статус-коды и request_id. Никаких паролей, email-ов и сессионных токенов в логах нет.
  • Резервные копии БД (pg_dump) создаются ежедневно, хранятся 7 дней в отдельном volume — вместе с ними сохраняются и записи audit_log.
  • Метрики Prometheus содержат агрегированные счётчики (запросы/длительности), без персональных данных.

сколько храним

  • Аккаунт — пока вы не запросите удаление.
  • Сессия — 30 дней с момента последней активности (продлевается автоматически при входе).
  • Открытые подсказки — бессрочно (используются для корректного рейтинга: «решал ли с подсказками»).
  • Команды терминала (audit_log) — 90 дней. По истечении этого срока записи автоматически удаляются фоновой задачей.
  • Логи доступа — 7 дней (ротация).

ваши права

По 152-ФЗ вы вправе:

  • Получить копию своих данных (username, email, прогресс) — напишите на email ниже.
  • Исправить неточные данные (например, сменить email).
  • Удалить аккаунт и все связанные данные — пишите на email оператора, обработка в течение 7 рабочих дней. Каскадное удаление: сессии, прогресс, записи в рейтинге.
  • Отозвать согласие — равнозначно удалению аккаунта.

Внимание: удаление аккаунта не удаляет записи audit_log за предыдущие 90 дней. Они сохраняются для возможного разбирательства и автоматически удаляются по истечении retention-периода.

куки и localStorage

  • labctl_user — сессионная cookie, требуется для авторизации. Без неё Сервис работает в режиме гостя (только чтение каталога).
  • labctl-theme — в localStorage, выбор темы оформления. Не передаётся на сервер.

Баннеров и аналитики (Google Analytics, Яндекс.Метрика, и т.п.) на Сервисе нет.

передача третьим лицам

Сервис не передаёт персональные данные третьим лицам в коммерческих целях. Исключения:

  • Правоохранительным органам по законному запросу (ст. 6 ч. 1 152-ФЗ — обработка без согласия допускается для исполнения закона). В этом случае оператор предоставляет записи audit_log и сопутствующие метаданные сессии.
  • cdn.jsdelivr.net — единственный внешний ресурс, к которому обращается браузер (для загрузки библиотеки терминала xterm.js). CDN видит ваш IP и URL-реферер; персональных данных (email, username) он не получает.

правовые основания обработки (GDPR Art.6 / 152-ФЗ)

Каждая цель обработки имеет своё правовое основание:

Регистрация и вход
GDPR Art.6(1)(b) (выполнение договора) — без этих данных мы не можем предоставить Сервис. 152-ФЗ: обработка necessary для исполнения договора (ст.6 ч.1 п.5).
Прогресс и рейтинг
Art.6(1)(b) + ваше согласие (1)(a) при регистрации (чекбокс). Согласие записано в consent_records с версией privacy/tos, IP и UA.
Аудит команд терминала
Art.6(1)(c) (законное обязательство) + Art.6(1)(f) (legitimate interest — защита оператора от злоупотреблений). 152-ФЗ ст.6 ч.1 п.5: осуществление прав и обязанностей оператора.
Передача в правоохранительные органы
Art.6(1)(c) — исполнение закона. 152-ФЗ ст.6 ч.1 п.5.
Тема оформления, cookies
Art.6(1)(a) (consent) — даётся через баннер или выбор темы, отзывается в любой момент.

уведомление Роскомнадзора (152-ФЗ ст.22)

Оператор пользуется исключением по ст.22 ч.2 152-ФЗ: обрабатываются только персональные данные, не относящиеся к специальным категориям (ст.10) и не касающиеся судимости (ст.11). Сеть камер видеонаблюдения, биометрия, медицинские данные, религия, национальность — не обрабатываются. Объём — в пределах категорий, подпадающих под exemption от обязательного уведомления.

При расширении категорий обработки оператор подаст уведомление в установленном порядке.

права по GDPR (глава III)

Если вы — резидент ЕС/Великобритании, вам дополнительно доступны:

  • Art.15 право доступа — через GET /api/me/data или email ниже.
  • Art.16 право на исправление — email оператору.
  • Art.17 право на удаление — через POST /api/me/delete или email. audit_log и consent_records сохраняются 90 дней по Art.17(3)(b).
  • Art.18 право на ограничение обработки.
  • Art.20 право на переносимость данных — экспорт в JSON через GET /api/me/data.
  • Art.21 право возразить против обработки по legitimate interest (аудит) — напишите, мы прекратим, если основания для обработки не перевешивают.
  • Art.7(3) право отозвать согласие в любой момент — равнозначно удалению аккаунта.

Срок ответа на запрос — 1 месяц (Art.12(3)).

трансграничная передача (GDPR глава V)

Сервер Сервиса находится в юрисдикции, не обеспечивающей адекватный уровень защиты по решению Комиссии (Art.45). Поэтому любые передачи за пределы юрисдикции размещения регулируются Standard Contractual Clauses (Art.46(2)(c)):

  • cdn.jsdelivr.net — загружает библиотеку терминала xterm.js. Передаётся: IP-адрес, URL-реферер, информация о браузере. Email, username и идентификационные данные не передаются. jsdelivr действует как processor; их privacy policy применяется как DPA (Data Processing Agreement).

Внутренняя обработка в части audit_log/consent_records/sessions остаётся в той же юрисдикции, что и сервер.

records of processing activities (GDPR Art.30)

Оператор ведёт реестр операций в виде этой политики + исходного кода Сервиса (репозиторий open-source). Каждая таблица БД соответствует одной или нескольким целям обработки:

  • users — идентификация.
  • sessions — аутентификация, IP/UA/срок.
  • attempts, solved, hint_views — прогресс.
  • audit_log — команды терминала, 90 дней.
  • consent_records — доказательство согласия.

уведомление о нарушении (GDPR Art.33-34)

При обнаружении персональных данных breach (несанкционированный доступ, утрата, изменение):

  • В течение 72 часов с момента обнаружения оператор уведомляет надзорный орган (если breach вероятна риска для прав и свобод субъектов).
  • При высоком риске — уведомляет затронутых субъектов без чрезмерной задержки.
  • Доказательство breach (логи, время, объём) сохраняется для отчёта регулятору.

Для 152-ФЗ — оператор уведомляет Роскомнадзор и ФСТЭК по процедуре Постановления Правительства РФ №1119.

приватность по дизайну и по умолчанию (GDPR Art.25)

  • Данные собираются минимально: только то, что нужно для предоставления Сервиса (Art.5(1)(c) data minimisation).
  • Контейнеры лабораторных физически изолированы от интернета (network_mode: none) — случайная или намеренная утечка через сеть исключена.
  • Пароли хранятся как argon2id hash (RFC 9106), никогда не логируются.
  • Cookie HttpOnly + SameSite=Strict + Secure по HTTPS.
  • CSP, HSTS, X-Frame-Options применены edge-Caddy.
  • Регистрация требует явного согласия (consent checkbox) + подтверждения возраста (13+).

children's data (GDPR Art.8)

Сервис не предназначен для лиц младше 13 лет. При регистрации пользователь подтверждает возрастной порог чекбоксом (age_confirm); запись сохраняется в consent_records.age_confirmed. При выявлении обработки данных лица младше 13 без parental consent — данные удаляются без задержки.

изменения политики

Любые изменения публикуются на этой странице с обновлённой датой «последнее обновление» в шапке. Существенные изменения (новые типы данных, новые получатели) дополнительно анонсируются.

контакты и жалобы

Вопросы по обработке данных, запросы на доступ/исправление/удаление, отзыв согласия — graywrk@gmail.com.

Вы имеете право подать жалобу в надзорный орган (Art.77 GDPR / Роскомнадзор по 152-ФЗ), если считаете, что обработка нарушает ваши права.