morok. Руководство администратора
Документ описывает установку, проверку, обновление и удаление morok на серверах и рабочих станциях без доступа к интернету, а также настройки среды. Работа с программой — в руководстве пользователя. Проверка за 5–10 минут на демо-данных — в сценарии проверки.
morok — инструмент подготовки тестовых данных, а не средство защиты информации.
1. Системные требования
| Параметр | Требование |
|---|---|
| Архитектура | x86_64 (amd64) |
| ОС | Astra Linux Special Edition 1.8 (пакет .deb); РЕД ОС 8 (пакет .rpm) |
| Другие версии | Astra Linux SE 1.7 и РЕД ОС 7.3 не проверялись; поддержка не заявляется |
| Прочие дистрибутивы Linux | не проверялись; статический бинарник может работать, но поддержка не заявляется |
| Зависимости ОС | нет (статический бинарник) |
| Права | установка — sudo; работа — обычный пользователь |
| Память | не зависит от размера данных (потоковая обработка); метод shuffle держит в памяти до max_rows значений столбца (по умолчанию 1 000 000), сверх этого использует временные файлы |
| Диск | место под результат (по размеру сопоставим с исходными данными) и под временные файлы shuffle |
| Сеть | не требуется. Нужна только для подключения к БД PostgreSQL, которую вы указываете сами |
Для дампов PostgreSQL в формате custom нужна утилита pg_restore из репозитория вашей ОС (пакет клиента PostgreSQL). Для остальных форматов никаких дополнительных программ не требуется.
2. Состав дистрибутива
Дистрибутив — набор файлов в одном каталоге:
| Файл | Назначение |
|---|---|
morok-<версия>-astra-linux-amd64.deb |
пакет для Astra Linux |
morok-<версия>-red-os-x86_64.rpm |
пакет для РЕД ОС |
morok-<версия>-macos-arm64, morok-<версия>-macos-amd64 |
исполняемые файлы для macOS (Apple Silicon, Intel; дополнительная платформа, см. раздел 3.5) |
SHA256SUMS |
контрольные суммы всех файлов поставки |
Файлы загружаются со страницы программы https://scr1.ru/morok/ (раздел «Как получить»); контрольные суммы опубликованы там же — в таблице и в файле morok-<версия>-SHA256SUMS.txt (содержимое совпадает с SHA256SUMS). После загрузки: sha256sum -c --ignore-missing morok-<версия>-SHA256SUMS.txt. Те же файлы публикуются на странице релизов GitVerse https://gitverse.ru/vzkhrv/morok/releases; там каждый файл сжат gzip (<файл>.gz: GitVerse не принимает вложения .deb, .rpm и файлы без расширения). После загрузки: gunzip <файл>.gz, затем sha256sum -c --ignore-missing SHA256SUMS.txt — суммы относятся к исходным файлам и совпадают с суммами на странице программы.
Лицензионное соглашение (EULA.txt), перечень компонентов третьих лиц и их лицензий (NOTICE.txt) и справочная страница входят в пакеты; для macOS эти документы доступны на странице программы.
Файлы, устанавливаемые пакетом:
| Путь | Назначение |
|---|---|
/usr/bin/morok |
исполняемый файл |
/usr/share/man/man1/morok.1.gz |
man-страница (man morok) |
/usr/share/doc/morok/user-guide.md |
руководство пользователя |
/usr/share/doc/morok/admin-guide.md |
руководство администратора |
/usr/share/doc/morok/expert-scenario.md |
сценарий проверки за 5–10 минут |
/usr/share/doc/morok/report.schema.json |
JSON Schema отчёта |
/usr/share/doc/morok/EULA.txt |
лицензионное соглашение |
/usr/share/doc/morok/NOTICE.txt |
компоненты третьих лиц |
/usr/share/doc/morok/CHANGELOG.md |
история изменений |
/usr/share/morok/examples/morok.yaml |
пример конфигурации |
/usr/share/morok/demo/ |
синтетический демо-набор (data/, morok.yaml, morok-events.yaml, README.md) |
Пакет не создаёт пользователей, служб, заданий планировщика и файлов в /etc. Конфигурация и ключ — файлы пользователя, пакет их не трогает.
На некоторых минимальных образах Astra Linux каталог /usr/share/doc исключается из установки настройкой dpkg (path-exclude). Тогда документация в пакете числится, но на диск не распаковывается; файлы можно распаковать вручную из пакета (dpkg-deb -x morok-*-astra-linux-amd64.deb /каталог) или прочитать на странице загрузки.
3. Установка
Установка выполняется офлайн, из файла пакета. Репозитории ОС и сеть не нужны.
3.1. Проверка контрольных сумм
Скопируйте на целевую машину пакет(ы) и SHA256SUMS в один каталог и выполните:
sha256sum -c SHA256SUMS
Ожидаемый вывод: по строке <файл>: OK для каждого файла. Если на машине есть только один из пакетов, добавьте --ignore-missing:
sha256sum -c --ignore-missing SHA256SUMS
Любое сообщение FAILED означает, что файл повреждён при копировании; не устанавливайте его, скопируйте заново. Сверьте также значение SHA256SUMS с опубликованным на странице загрузки: контрольные суммы выявляют случайное повреждение, но не подмену пакетов вместе с файлом сумм.
3.2. Astra Linux (.deb)
sudo apt install ./morok-*-astra-linux-amd64.deb
Команда apt install с путём к локальному файлу не требует индексов репозиториев, так как у пакета нет зависимостей. Если в системе настроен недоступный репозиторий, сообщения о нём можно игнорировать либо использовать sudo dpkg -i morok-*-astra-linux-amd64.deb.
3.3. РЕД ОС (.rpm)
sudo dnf install --disablerepo='*' ./morok-*-red-os-x86_64.rpm
Параметр --disablerepo='*' исключает обращение к репозиториям, которых нет без сети.
3.4. Проверка установки
morok version
morok --help
man morok
morok version выводит строки: версия, коммит, дата сборки, версия Go. morok --help выводит справку на русском языке. Состав пакета:
dpkg -L morok # Astra Linux
rpm -ql morok # РЕД ОС
Проверка работы на демо-данных — по сценарию проверки (5–10 минут).
3.5. macOS (дополнительная платформа)
macOS — дополнительная платформа для разработчиков и администраторов; в заявке на включение в реестр и в обязательствах по поддержке она не заявляется. Основные платформы — Astra Linux и РЕД ОС. Поддерживаются macOS 12 и новее. Поставка для macOS — один исполняемый файл без установщика: пакета, справочной страницы и демо-набора нет.
Определите архитектуру процессора:
uname -marm64— Apple Silicon (M1 и новее), файлmorok-<версия>-macos-arm64;x86_64— Intel, файлmorok-<версия>-macos-amd64.Загрузите файл и контрольные суммы со страницы программы в один каталог, например в Терминале:
cd ~/Downloads curl -fLO https://scr1.ru/morok/morok-<версия>-macos-arm64 curl -fLO https://scr1.ru/morok/morok-<версия>-SHA256SUMS.txtНа странице релизов GitVerse тот же файл опубликован сжатым:
morok-<версия>-macos-arm64.gz. Распакуйте его командойgunzip morok-<версия>-macos-arm64.gz; контрольные суммы — вSHA256SUMS.txt.Проверьте контрольную сумму:
shasum -a 256 -c --ignore-missing morok-<версия>-SHA256SUMS.txtОжидаемый вывод:
morok-<версия>-macos-arm64: OK. ПриFAILEDзагрузите файл заново.Снимите атрибут карантина. Файл подписан только ad-hoc подписью компоновщика Go, без сертификата разработчика Apple и без нотаризации (подпись и нотаризация вне объёма поставки). Файл, загруженный браузером, получает атрибут карантина, и macOS блокирует его запуск с сообщением «Не удаётся проверить разработчика». Команда снимает атрибут:
xattr -d com.apple.quarantine morok-<версия>-macos-arm64Сообщение
No such xattrозначает, что атрибута нет (например, файл загружен черезcurl), — это не ошибка. Вместо команды можно разрешить запуск в «Системных настройках» → «Конфиденциальность и безопасность» → «Всё равно открыть» после первой заблокированной попытки.Установите файл в каталог из
PATHпод именемmorok:sudo install -m 0755 morok-<версия>-macos-arm64 /usr/local/bin/morokБез прав администратора — в домашний каталог:
mkdir -p ~/.local/bin install -m 0755 morok-<версия>-macos-arm64 ~/.local/bin/morok echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zprofileПоследняя команда нужна один раз; откройте новое окно Терминала.
Проверьте установку:
morok version morok --helpmorok versionвыводит версию, коммит, дату сборки и версию Go.
Лицензионное соглашение, перечень компонентов третьих лиц и руководства для macOS доступны на странице программы. Демо-набор и сценарий проверки — в пакетах Astra Linux и РЕД ОС либо в репозитории проекта (demo/, scripts/demo-check.sh).
4. Обновление
Установите более новый пакет тем же способом, что и первый; настройки пользователей не затрагиваются:
sudo apt install ./morok-<новая версия>-astra-linux-amd64.deb # Astra Linux
sudo dnf upgrade --disablerepo='*' ./morok-<новая версия>-red-os-x86_64.rpm # РЕД ОС
macOS: загрузите новый файл, проверьте контрольную сумму, снимите атрибут карантина и замените файл (шаги 2–5 раздела 3.5).
Перед обновлением сверьте контрольные суммы (раздел 3.1) и прочитайте CHANGELOG.md. Программа не проверяет наличие обновлений и не обращается к сети: о новых версиях сообщает страница загрузки, а доставка пакета на закрытый контур — ваша процедура.
После обновления:
- проверьте
morok version; - если менялась версия формата конфигурации или схемы отчёта, это указано в
CHANGELOG.md; - результаты прежнего прогона не пересчитываются: пересоздайте набор, если он должен соответствовать новой версии. При том же ключе, конфигурации и данных методы
hmac,generate,shuffle,generalizeдают тот же результат, если в описании изменений не указано иное. Исключение —generateсkind: birthdate: результат зависит от года запуска.
5. Удаление
sudo apt remove morok # Astra Linux
sudo dnf remove morok # РЕД ОС
sudo rm /usr/local/bin/morok # macOS (или rm ~/.local/bin/morok)
Удаляются файлы пакета. Файлы пользователей (конфигурации, ключи, результаты, отчёты) остаются; удалите их самостоятельно. Ключи храните и уничтожайте по принятым у вас правилам.
6. Среда выполнения
6.1. Зависимости
Бинарник статически собран и не требует библиотек ОС. Единственное исключение — дамп PostgreSQL в формате custom: нужен pg_restore из репозитория ОС. Если его нет, программа завершится с кодом 3 и сообщением, какой пакет поставить; путь можно указать параметром source.pgdump.pg_restore. pg_restore запускается без подключения к серверу. Дампы MySQL/MariaDB (mysqldump) читаются самой программой, внешние программы не нужны.
6.2. Сетевое взаимодействие
- Программа обращается к сети только для подключения к PostgreSQL по DSN, указанному пользователем (
source.type: pgиtarget.type: pg). Другие форматы работают без сети. - Телеметрии, проверки обновлений, загрузки словарей и лицензионных проверок нет. Словари ФИО и адресов встроены в бинарник.
- Для проверки отсутствия сетевой активности запустите демо-сценарий в сетевом пространстве без интерфейсов (
unshare -n, если утилита есть в системе) либо с отключённым сетевым интерфейсом; результат не изменится. - Для PostgreSQL используйте учётную запись с минимальными правами: чтение таблиц для источника, запись для приёмника. Исходная БД читается в транзакции только для чтения.
6.3. Хранение ключа
- Ключ — hex-строка не короче 64 символов; создание:
openssl rand -hex 32 > key.hexилиhead -c 32 /dev/urandom | xxd -p -c 64 > key.hex. - Файл ключа должен иметь права не шире
0600и принадлежать пользователю, запускающему программу:chmod 600 key.hex. При более широких правах программа не запустится (код 4). - Не помещайте ключ в систему контроля версий, в каталог источника или рядом с обезличенными наборами, которые передаются разработчикам.
- Для автоматизации используйте переменную окружения (
key.env), значение которой подставляет система управления секретами; в отчёте и сообщениях ключ не выводится, только его несекретный идентификатор. - Смена ключа меняет все результаты. Если разные наборы должны быть согласованы между собой, они обрабатываются одним ключом. Политику ротации определяет эксплуатирующая организация.
- Резервное копирование ключа — по правилам вашей организации; без ключа воспроизвести тот же результат нельзя.
6.4. Права файлов
| Объект | Рекомендуемые права |
|---|---|
| файл ключа | 0600, владелец — пользователь запуска |
| конфигурация | 0640 или 0600; ключа в ней нет, но она раскрывает структуру данных |
| исходные данные | как принято для исходных данных; программа их только читает |
| результат и отчёт | программа создаёт файлы с правами 0644; при необходимости ограничьте их umask каталога или родительским каталогом |
временные файлы shuffle |
создаются с правами 0600 в системном каталоге временных файлов и удаляются после работы |
Каталог результата не должен совпадать с каталогом источника или находиться внутри него (и наоборот); каталог отчёта не должен находиться внутри каталога источника.
6.5. Журналирование
Файлов журналов программа не ведёт. Вывод:
- stdout — итоговая сводка по таблицам и список файлов отчёта;
- stderr — прогресс (отключается флагом
--quiet), предупреждения и сообщения об ошибках; - отчёт
report.mdиreport.json— постоянная запись о каждом прогоне (версия, хеш конфигурации, идентификатор ключа, счётчики).
В сообщениях и отчёте нет значений данных, ключа и DSN. Для сохранения журнала в среде CI перенаправьте stderr и stdout средствами оболочки или системы CI.
Коды возврата: 0 — успех; 1 — внутренняя ошибка или прерывание; 2 — неверные аргументы или конфигурация; 3 — ошибка чтения или записи данных; 4 — ключ отсутствует или некорректен; 5 — --strict: в полях без правил найдены персональные данные либо часть путей вложенного формата не проверена.
6.6. Дампы MySQL и MariaDB
source.type: mysqldump и target.type: mysqldump обрабатывают SQL-дамп, созданный mysqldump или mariadb-dump. Программа читает файл дампа и пишет файл результата; к серверу MySQL она не подключается, mysqldump и mysql не запускает. Результат восстанавливается обычной командой mysql < результат.sql.
Поддерживаемые ключи mysqldump:
| Ключ | Поведение |
|---|---|
| (по умолчанию) | INSERT INTO ... VALUES (...),(...); с несколькими записями; столбцы берутся из CREATE TABLE. |
--complete-insert |
INSERT со списком столбцов. |
--extended-insert / --skip-extended-insert |
Несколько записей в команде или по одной. |
--hex-blob |
Двоичные значения в виде 0x.... |
--insert-ignore |
INSERT IGNORE INTO. |
--replace |
REPLACE INTO. |
--databases, --all-databases |
Базы разделяются командами USE; при одноимённых таблицах в разных базах задайте source.mysqldump.database. |
Ограничения:
- Не поддерживаются для таблиц из конфигурации: XML (
--xml), выгрузка в файлы (--tab),LOAD DATA,INTO OUTFILE; сжатые дампы нужно распаковать заранее; дампыmydumperне проверялись. - Команда
INSERTможет занимать несколько строк (так пишетmariadb-dump) и должна заканчиваться;; оборванная команда — код 3. - MySQL не выгружает вычисляемые (generated) столбцы, MariaDB выгружает их вместе со значениями: по умолчанию программа определяет вариант по числу значений в первой записи.
- Строки между
DELIMITER ;;иDELIMITER ;(тела триггеров и процедур) не считаются командами дампа. - Память зависит от длины самой длинной команды (
net_buffer_lengthуmysqldump, по умолчанию около 1 МБ; уmariadb-dumpкоманда может быть длиннее), а не от размера дампа. - Результат записывается теми же кодировкой и режимом SQL, что в дампе (строки
SET NAMESи/*!...*/копируются без изменений).
7. Использование в CI
Требования к окружению задачи: пакет morok установлен на исполнителе (или бинарник доступен по пути), ключ передаётся переменной окружения из секретов, исходные данные и конфигурация доступны на диске. Пример скрипта задачи (shell):
#!/usr/bin/env bash
set -euo pipefail
# MOROK_KEY задаётся системой CI из секретов (hex, не короче 64 символов)
: "${MOROK_KEY:?не задан ключ}"
morok version
morok validate -c ci/morok.yaml
# --strict: код 5, если в полях без правил найдены персональные данные
morok run -c ci/morok.yaml --strict --quiet --force
# отчёт сохраняется как артефакт задачи
test -s out/report/report.md
В ci/morok.yaml укажите key.env: MOROK_KEY. Пример реакции на коды возврата:
set +e
morok run -c ci/morok.yaml --strict --quiet --force
rc=$?
set -e
case "$rc" in
0) echo "обезличивание выполнено" ;;
5) echo "найдены ПДн без правил, дополните конфигурацию" >&2; exit 5 ;;
4) echo "проблема с ключом" >&2; exit 4 ;;
*) echo "ошибка morok, код $rc" >&2; exit "$rc" ;;
esac
Рекомендации:
- Результат и отчёт сохраняйте в каталог, не входящий в репозиторий кода.
- Одну конфигурацию и один ключ используйте для всех наборов, которые должны быть связаны между собой.
- Не печатайте содержимое результата и ключа в журнал CI.
8. Устранение неполадок
| Симптом | Причина и действие |
|---|---|
apt install ./morok-*-astra-linux-amd64.deb пытается обратиться к репозиторию |
Недоступный источник в /etc/apt/sources.list. Используйте sudo dpkg -i morok-*-astra-linux-amd64.deb. |
dnf выводит ошибки репозиториев |
Не указан --disablerepo='*'. |
sha256sum -c сообщает FAILED |
Файл повреждён при копировании. Скопируйте заново. |
man morok не находит страницу |
Минимальный образ без man-утилит или без /usr/share/man. Прочитайте morok --help и руководства. |
| код 4: «файл ключа ... доступен другим пользователям» | chmod 600 на файл ключа. |
код 2 для mysqldump: «неизвестен список столбцов» |
Создайте дамп с определениями таблиц (без --no-create-info) или с --complete-insert. |
код 2 для mysqldump: «встречается в нескольких базах» |
Укажите source.mysqldump.database. |
код 3 для custom-дампа: не найден pg_restore |
Установите пакет клиента PostgreSQL из репозитория ОС либо укажите source.pgdump.pg_restore. |
Список типовых ошибок программы с текстами — в разделе 11 руководства пользователя.
9. Поддержка и обновления
Контакты поддержки, страница загрузки и порядок выпуска версий указаны на публичной странице продукта. История изменений — CHANGELOG.md. Сведения о лицензии — EULA.txt, о компонентах третьих лиц — NOTICE.txt.