DeSoft.ru
236 subscribers
116 photos
10 videos
1 file
213 links
Авторский канал: ИТ, разработка, безопасность, администрирование.

Сайт: desoft.ru
Автор: @y_demin
Download Telegram
Уже несколько заметок были посвящены теме утечек секретов ([1], [2]). На этот раз рассмотрим один из вариантов, как все-таки можно ими управлять, чтобы не пришлось рвать волосы на голове и вырезать коммиты из репозитория.

Платформа с открытым исходным кодом Infisical - централизованное решение с широким набором возможностей по контролю за конфигурациями, ключами и иными конфиденциальными данными. Ее и развернем локально для проверки предлагаемой функциональности.

📝 Некоторые особенности системы
▪️ Формирование структуры управления с разделением по организациям и проектам.
▪️ Версионирование, откаты и ротация секретов.
▪️ Динамические секреты.
▪️ Синхронизация секретов с другими инструментами, решающими подобную задачу.
▪️ Внутренний центр сертификации (PKI) и управление ключами (KMS).
▪️ Поддержка разнообразных методов аутентификации пользователей.
▪️ Богатый api и наличие sdk для быстрого встраивания в код.

🔨 Установка
▫️ Разворачивать будем self-hosted версию, используя docker.
# забираем compose и .env файлы
wget -O docker-compose.yml https://raw.githubusercontent.com/Infisical/infisical/main/docker-compose.prod.yml
wget -O .env https://raw.githubusercontent.com/Infisical/infisical/main/.env.example

▫️ При публикации в прод нужно сгенерировать собственные ключи доступа, задать пароли и настроить требуемые интеграции со сторонними сервисами. Описание переменных окружения здесь. Для тестового стенда оставим все по умолчанию.
# запускаем
docker compose up -d

▫️ Идем в приложение на 80 порт (http://localhost), создаем аккаунт администратора и попадаем в панель управления.

⚒️ Подготовка
Необходимо создать проект, пользователя, клиента и несколько секретов. Подробно процесс описал в полной версии статьи на сайте. Здесь же опущу эти шаги в угоду размера поста.

🚀 Получение доступа к секретам с использованием python sdk
▫️ Устанавливаем sdk
pip install infisicalsdk

▫️ Записываем в переменные окружения системы полученные Client ID, Client Secret, Project ID
export CLIENT_ID=<my client id>
export CLIENT_SECRET=<my client secret>
export PROJECT_ID=<my project id>

▫️ Обращаемся к Infisical из python скрипта и получаем секреты
import os
from infisical_sdk import InfisicalSDKClient
# забираем переменные окружения
client_id = os.getenv("CLIENT_ID")
client_secret = os.getenv("CLIENT_SECRET")
project_id = os.getenv("PROJECT_ID")
# инициализация клиента и авторизация
client = InfisicalSDKClient(host="http://localhost")
client.auth.universal_auth.login(client_id=client_id, client_secret=client_secret)
# получаем список всех секретов в dev окружении
secrets = client.secrets.list_secrets(project_id=project_id, environment_slug="dev", secret_path="/")
print(secrets)
# получаем секрет MYAPI_KEY из окружения prod по имени
mysecret = client.secrets.get_secret_by_name(
secret_name="MYAPI_KEY",
project_id=project_id,
environment_slug="prod",
secret_path="/",
)
print(mysecret)


💡 Дополнительно стоит отметить, что система поставляется в том числе в виде cli инструмента, с помощью которого можно как получать и проверять секреты с центрального сервера, генерируя из них переменные окружения или файлы конфигураций, так и анализировать репозитории на утечки секретов по аналогии с уже рассмотренным GitLeaks. Еще одним полезным применением Infisical cli является возможность добавления утилиты прямо в Dockerfile для формирования переменных окружения контейнера в реальном времени, что исключает необходимость прямой передачи секретов.

📌 Решение несложно настраивается, предоставляет широкий набор вариантов интеграции, а в совокупности с целым комплексом решаемых задач станет неплохим подспорьем как для небольшой команды, так и для крупной организации с множеством проектов, где требования контроля и безопасности очень высоки. В качестве примера была рассмотрена одна из наиболее важных функций платформы, отдельного внимания стоят реализации центра сертификации и системы управления ключами.

#management #opensource #selfhosted #security
👍4🔥1
Не успел начать, а уже итоги подводить пора 😄🤩🎉
Please open Telegram to view this post
VIEW IN TELEGRAM
👏6👍4
⚠️ В преддверии праздников мошенники начинают проявлять особую активность. Число фейковых сайтов, Telegram-аккаунтов, чатов и каналов растет кратно. Способы все те же - сыграть на новогодней суете, поймать наиболее невнимательных пользователей, заманить их очередной распродажей, обвалом цен, супер скидками и тому подобное.

Для получения этой "невероятной выгоды" достаточно лишь скачать приложение, ввести данные карты или аккаунта на поддельной странице, которая будет оформлена вполне аккуратно и даже с соблюдением фирстиля оригинала.

❗️ Из недавних новостей: [Снова фейковый Wildberries], [Банкер в приложении для текинга посылок]

👮🏻‍♂️ Будьте бдительны, не попадайтесь на уловки мошенников!
👍2😱2
Начнем новый год с вечно актуальной темы про бэкапы (см. полную версию на сайте).

Одним из подходов к созданию бэкапов является размещение на целевом сервере агента или независимой программы, которая занимается созданием и передачей резервных копий в некое удаленное центральное хранилище. Подход довольно гибкий, т.к. позволяет детально проработать настройки индивидуально под каждую машину.

⚠️ В этом варианте кроется главная опасность, которую часто упускают из виду - компрометация резервируемого сервера может привести к компрометации единого хранилища. Известны случаи работы шифровальщиков, попавших на один из связанных с центральным хранилищем серверов, и, как не трудно догадаться, зашифрованными оказываются как данные на самой машине, так и все бэкапы на общем сервере.

Учтем отмеченную выше особенность и рассмотрим пример организации файловых бэкапов с использованием программы с открытым исходным кодом restic.

📝 Вводные данные

🔹 Рабочие станции
Две виртуальные машины на Linux и облачный сервер с большим диском для хранения.

🔹 Инструменты
1. Мультиплатформенная программа для создания резервных копий restic.
- Репозиторий на GitHub
- Документация
2. Автоматизация для restic - resticker.
3. REST API сервер для удаленных бэкапов на restic - rest server.

⚡️ Разворачиваем rest-server

🔹 Готовим
▪️ .htpasswd файл для двух тестовых пользователей
▪️ docker-compose.yml для запуска сервера
--append-only - включает режим только на создание резервных копий без возможности удаления или изменения ранее добавленных.
--private-repos - доступ пользователей только к их личному репозиторию (включая вложенные репозитории) на сервере по имени, т.е. http://host:8000/user1/ для user1 и http://host:8000/user2/ для user2 соответственно.

🔹 Стартуем
docker compose up -d


⁉️ На момент публикации rest-server еще не поддерживает ротацию бэкапов. Временное решение для контроля за устаревшими резервными копиями - прямо на сервере настраивать отдельный restic клиент, который смотрит на репозитории и отрабатывает очистку по заданным правилам.

📌 Устанавливаем и настраиваем restic на первой целевой машине

# установка
sudo apt install restic
# создание удаленного репозитория
restic -r rest:http://user1:password1@host:8000/user1/ init
# бэкап каталога tmp
restic -r rest:http://user1:password1@host:8000/ backup /path/to/tmp
# проверка созданной копии
restic -r rest:http://user1:password1@host:8000/ snapshots


❗️ При попытке создать репозиторий с корнем, отличным от имени пользователя, получим ошибку авторизации. При попытке удалить старые копии получим ошибку сервера. Рекомендуется поэкспериментировать с обращениями к серверу и убедиться в корректности созданных ограничений.

💡 Как автоматизировать данный процесс? Заполняем переменные окружения и прописываем задание в cron для запуска restic. Все тоже самое, только завернутое в docker контейнер, позволяет сделать упомянутый выше resticker. Им и воспользуемся при работе со второй машиной.

📌 Запускаем resticker на второй целевой машине

🔸 Готовим
▪️ .env файл с переменными окружения
▪️ docker-compose.yml для запуска resticker
- RUN_ON_STARTUP - выполнить бэкап при старте контейнера.
- RESTIC_BACKUP_SOURCES - примонтированный в /data контейнера тольно на чтение каталог tmp.
- BACKUP_CRON: "0 15 1 * * *" - задание cron для бэкапа указанного источника ежедневно в 01:15 ночи. Информация о формате в описании go-cron.

🔸 Стартуем
docker compose up -d


После запуска можем наблюдать проверку на наличие репозитория, попытку инициализации в случае отсутствия, процесс самого резервного копирования и установку задания cron.

🔥 Таким образом, используя связку rest-server, restic и resticker можно организовать централизованный сбор и хранение файловых бэкапов с автоматической обработкой заданий по расписанию. Наличие приватных репозиториев и режима только на запись обеспечивают защиту от случайного или преднамеренного удаления данных.

#backup #opensource #selfhosted #tools #restic
👍3👏2🔥1
🔥 Подборка инструментов для аудита безопасности UNIX серверов. Проверка корректности выполненных настроек, рекомендации, отчеты, оценка соответствия международным стандартам в области информационной безопасности.

1️⃣ Lynis (самый богатый по функциональности инструмент из представленных)

2️⃣ VPS Security Audit Script (простое, интуитивно понятное решение - более чем достаточно для базовой настройки арендованной виртуальной машины)

3️⃣ Lunar

4️⃣ Linux Security Auditing Tool (LSAT)

5️⃣ Linux Basic Security Audit script (LBSA)

6️⃣ Nix Auditor

📚 Дополнительно
How-To-Secure-A-Linux-Server - детальное руководство по настройке и контролю за обеспечением безопасности Linux.

#security #tools #unix #linux #полезное
🔥5👏1
На этот раз взглянем на образы Docker с точки зрения оценки безопасности, способах обнаружения проблем и уменьшения поверхности возможной деятельности злоумышленников (см. расширенную версию на сайте).

🔨 Сканер безопасности Trivy
Комплексное решение для сбора информации об образе, поиска известных уязвимостей (CVE), секретов и ошибок конфигураций.

🔸 Актуальную версию берем из релизов репозитория.

🔸 Пример запуска инструмента с выводом результатов в табличном виде в консоль. Параметр --ignore-unfixed позволяет отфильтровать результаты, которые, по мнению trivy, нельзя исправить.
trivy image testapp-image-name --ignore-unfixed


🔸 Для получения более детальной информации по каждому найденному случаю сохраняем результат в json.
trivy image testapp-image-name -f json -o trivy_testapp.json


🔸 По умолчанию ищет секреты и уязвимости. Дополнительно можно включить режим поиска ошибок конфигурации и лицензий.

🔨 Программа для проверки образов Dockle
Dockle - линтер и аудитор образов. Проверяет соответствие лучшим практикам по аналогии с Hadolint и рекомендациям или показателям CIS Benchmark for Docker Центра интернет-безопаcности (CIS). Полный перечень метрик, их описание и способы достижения в документации к dockle.

🔸 Устанавливаем

🔸 Пример вызова
# с сохранением в json
dockle -f json -o dockle_testapp.json testapp-image-name
# с выводом в консоль
dockle testapp-image-name


⁉️ Несколько важных моментов касательно рассмотренных выше утилит были отмечены в докладе Анатолия Карпенко из Luntry.

➡️ trivy имеет список исключений при сканировании секретов, согласно которому файлы, содержащие в имени test, example и другие будут проигнорированы, о чем следует помнить во время использования программы.
➡️ dockle проверяет фиксированный список имен файлов при поиске чувствительной информации, что также снижает эффективность инструмента в этой конкретной задаче.

⚒️ Syft и Grype
Про утилиту syft я уже рассказывал в предыдущей заметке цикла. Результаты ее работы использует сканер уязвимостей grype. Принцип аналогичен работе trivy - сканируем, формируем детальный отчет для дальнейшего анализа.

🔸 Собираем SBOMs с помощью syft
syft testapp-image-id -o syft-json=syft.json


🔸 Устанавливаем grype

🔸 Запускаем с сохранением отчета в json
grype sbom:syft.json --output json --file grype.json
✔️ Scanned for vulnerabilities [93 vulnerability matches]
├── by severity: 1 critical, 3 high, 17 medium, 6 low, 60 negligible (6 unknown)
└── by status: 6 fixed, 87 not-fixed, 0 ignored


⚡️ Способы устранения
trivy и grype на выходе предоставили нам отчеты в формате json, в которых описаны разной степени важности уязвимости в исследуемом образе. Часть из них может быть исправлена в автоматическом режиме и имеет соответствующую метку fixed, другая же часть не поддерживает исправление или вовсе неизвестна.

🔹 Как починить образ?
Используем программу для модификации слоев copa.
▪️ Добавляет патч слой к целевому образу и формирует новый, расширенный образ.
▪️ Работает на основе результатов сканнеров уязвимостей.
▪️ По умолчанию принимает результаты от trivi, однако, за счет возможности подключения плагинов, появилась и поддержка grype.

🔹 Что еще можно сделать?
fixed уязвимости поправили, но остался целый пласт незатронутых проблем.
▪️ Заменить полный базовый образ системы на минималистичный (distroless, alpine) по возможности.
▪️ Поддерживать актуальные версии используемых библиотек и утилит.
▪️ Очистить образ от неиспользуемых ресурсов с помощью программы mint.
▫️ Убирает "ненужные" исполняемые файлы.
▫️ Отслеживает работу через временный контейнер, собираем детальную информацию об обращениях и вызовах приложения, генерирует новый, облегченный образ.
▪️ Удалить промежуточные слои со временными или чувствительными данными с помощью docker-squash.

#docker
👍2🔥2
📝 Подборка инструментов с открытым исходным кодом для выгрузки информации с сайтов частично или полностью. У каждого своя специфика, выходной формат и качество сбора данных, так что в зависимости от задачи пригодиться могут разные решения.

◼️ website-scrapper - загрузчик статических сайтов на nodejs,
website-scraper-puppeteer - динамических сайтов.

◼️ goclone - утилита на go для клонирования сайта.

◼️ PyWebCopy - аналогичного назначения утилита на python.

◼️ SiteMirror - еще одно простое решение на python.

◼️ WebsiteToGPT - преобразовывает контент сайта в текстовые файлы.

◼️ Univer Clipsheet - расширение для Chrome для веб-скрапинга. Удобная и гибкая работа с данными как статического так и динамического ресурса.

◼️ Gowitness - программа для создания скриншотов веб-сайтов со встроенным граббером и веб-интерфейсом для просмотра результатов.

🔥 Дополнительно

◼️ Wappix - ридер экспортированных чатов WhatsApp.

◼️ tg-archive - архиватор каналов и чатов Telegram c представлением их в виде статического сайта.

#tools #полезное
👍3🔥1
Рассмотрим поднятие кластера базы данных PostgreSQL (см. заметку на сайте).

Autobase - платформа или лучше назвать инструмент автоматизации для простого и быстрого поднятия кластера PostgreSQL.

🏠 Архитектура согласно документации.

📌 Основные компоненты

▪️ python приложение для управления кластерами PostgreSQL - patroni.
▪️ key-value хранилище конфигураций - etcd.
▪️ сервис плавающего приоритета для предоставления единой точки доступа к кластеру - vip-manager.
▪️ система управления подключениями или пулер соединений - PgBouncer.
▪️ балансировщик нагрузки - HAProxy.

Для тех, кто не жаждет разбираться в тонкостях построения отказоустойчивого кластера, разработчиками системы были подготовлены ряд скриптов, Ansible конфигураций и сервисов, в том числе UI, благодаря которым процесс запуска свелся к нескольким несложным шагам.

🔨 Подготовка

➡️ 3 виртуальные машины (2 CPU, 2 Gb RAM) на Debian 12 под ноды
▪️ ставим ssh сервер
▪️ пользователя добавляем в sudo
▪️ на проде организовываем доступ через ключи (на тестовых можно обойтись и паролем)

➡️ 1 виртуальная машина для консоли управления также на Debian 12
▪️ ставим Docker

➡️ все машины в одной сети (рекомендация разработчиков для поддержки функции мониторинга кластера)

🚀 Запускаем консоль управления
docker run -d --name autobase-console \
  --publish 80:80 \
  --publish 8080:8080 \
  --env PG_CONSOLE_API_URL=http://192.168.1.135:8080/api/v1 \
  --env PG_CONSOLE_AUTHORIZATION_TOKEN=secret_token \
  --env PG_CONSOLE_DOCKER_IMAGE=autobase/automation:latest \
  --volume console_postgres:/var/lib/postgresql \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume /tmp/ansible:/tmp/ansible \
  --restart=unless-stopped \
  autobase/console:latest

▫️ 192.168.1.135 - адрес виртуальной машины консоли (api сервис стартует рядом с ui и бд консоли, поэтому адрес один и тот же)
▫️ 80 - порт ui
▫️ 8080 - порт api сервиса

🔥 Создаем кластер
Идем в консоль по адресу машины на 80 порт.

▫️ Для входа используем заданный при старте контейнера PG_CONSOLE_AUTHORIZATION_TOKEN.
▫️ Create cluster - Your Own Machines.
▫️ По умолчанию предлагается использовать 3 ноды. Их и заполняем информацией о созданных ранее виртуальных машинах.
▫️ Выбираем метод авторизации и заполняем учетные данные.
▫️ В поле Cluster VIP address указываем незанятый (!) адрес в сети, который будет использован как единая точка входа для кластера.
▫️ Включаем балансировщик HAProxy load balancer
▫️ Выбираем версию PostgreSQL
▫️ Стартуем

✔️ В разделе Operations можно отслеживать процесс исполнения через логи системы.
✔️ В случае успешного запуска в разделе Clusters появится развернутый экземпляр с расширенной информацией и мониторингом состояния.

⁉️ Резервное копирование и восстановление кластеров реализовано с помощью инструментов pgBackRest и WAL-G, однако управление из ui пока недоступно - в скором времени планируется внедрить, судя по планам и комментариям разработчиков.

Таким образом можно развернуть PostgreSQL кластер с минимальным участием в настройке целого пласта зависимостей. Рассмотренное средство вполне способно стать бесплатной альтернативой облачным провайдерам кластеров баз данных для решения бизнес-задач, а доступная масштабируемость позволит справляться с возрастающей нагрузкой по мере ее возникновения, не испытывая при этом никаких трудностей.

В следующей части настоящего цикла углубимся в предлагаемые конфигурации, самостоятельно соберем образы участвующих в работе компонентов и внесем корректировки в параметры для разрешения вопроса резервного копирования и восстановления данных кластера, не дожидаясь их появления в ui.

#db #tools #selfhosted
👍3🔥2
🔥 Пока инет малость сбоит, самое время подписаться на канал в дзен. Тут все работает 🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3👍2🔥2
🥷 Ранее упоминал про некоторые способы распространения программ-стилеров. Одним из них является использование фейковых или взломанных онлайн сервисов для конвертации документов.

⚒️ Чтобы не пришлось отправлять личные фото, видео или документы на чей-то сомнительный сервер, приведу подборку приложений-конвертеров с открытым исходным кодом для размещения на собственном сервере.

🔸 Reubah - веб-сервис для преобразования форматов изображений и документов. Простое и аккуратное решение, не требует хранилища, валидирует входные данные. Из минусов - слабый охват форматов.

🔥 HRConvert2 - швейцарский нож в конвертации файлов. Работает с изображениями, аудио, видео, документами, архивами, 3д моделями и многим другим - заявлена поддержка аж 445 разных форматов. Также имеется OCR, сканирование на наличие вирусов и возможность расшарить ресурсы.

🔸 Stirling-PDF - призван заменить собой вечно заблокированные, платные функции в популярных ридерах pdf файлов, такие как вставка изображений, добавление текста, преобразование, конвертация, сжатие и так далее.

🔸 imgproxy - инструмент для базовой обработки изображений "на лету", т.е. по прямой ссылке на картинку в сети без необходимости скачивать оригинал и подкидывать в редактор вручную. Быстро, удобно, однако часть полезных функций скрыты за pro версией.

🔸 ConvertX - молодой проект, еще один вариант self-hosted конвертера с поддержкой, как указано, более 1000 форматов преобразования.

#tools #selfhosted #полезное
👍4
Расскажу про реализованный исследовательский проект в области видеоаналитики, в рамках которого удалось собрать жизнеспособный прототип и найти ему практическое применение в индустрии спорта.

⚽️ Задача заключалась в разработке автоматизированной системы оценки качества исполнения каких-либо спортивных упражнений, элементов, снарядов. Для примера были взяты стандартные положения в футболе, а именно штрафные удары и пенальти.

🔎 Схема работы

🔹 На вход системы подаются короткие видео фрагменты эталонного и анализируемых записей ударов футболистов.

🔹 ML модуль обрабатывает кадры видео и производит:

✔️ Детекцию мяча
✔️ Определение момента удара
✔️ Построение скелета игрока

🔹 Для каждого из направлений работы ML модуля готовились соответствующие модели на базе yolo. Отдельное внимание уделялось комбинированному скелетному генератору (совместная работа нескольких моделей из раздела pose estimation), т.к. от точности формирования скелета зависит дальнейшая работа комплекса в целом.

🔹 Зафиксировав кадр момента удара и получив с него скелет с более чем 20 контрольными точкам, модуль оценки производит расчет пространственных характеристик (положение тела и его частей).

🔹 На основе собранных характеристик по всем входным данным, выполняется сравнительный анализ качества исполнения стандартного положения с формированием итогового отчета, отметкой расхождений и рекомендациями по внесению корректировок в технику.

🙎‍♂️ Для кого

Инструмент будет полезен игрокам, тренерам, аналитическим платформам, автоматизированным тренировочным комплексам.

⚡️ Перспективные направления

Футбол, баскетбол, гимнастика, боевые единоборства, теннис, тяжелая атлетика, пауэрлифтинг.

💡 Что дальше

▪️ Специализация под конкретный вид спорта с учетом особенностей и требований.
▪️ Расширение набора метрик оценки.
▪️ Клиентский сервис.
▪️ Модули внешней интеграции для расширения функциональности уже существующих систем.

💻 Участники проекта

💥 Демин Юрий - Backend, ML
💥 Рязанов Владимир - Frontend
💥 Мясников Филипп - ML
💥 Листопад Валентина - Design

#проекты
🔥7👏3
В одной из предыдущих заметок были рассмотрены вопросы организации бэкапов на restic. Здесь же приведу дальнейшие манипуляции с репозиториями, которые позволят эффективно использовать представленный инструмент (см. расширенную версию с примерами на сайте или в дзен).

🔎 Подготовка

Удобнее тестировать функциональность на локальном хранилище, поэтому подготовим новый репозиторий
restic -r ~/restic_extra/repo init


и сделаем несколько снимков с промежуточными изменениями файлов
restic -r ~/restic_extra/repo --verbose backup ~/restic_extra/data


📝 Проверка данных

🔹 Список снимков репозитория
restic -r ~/restic_extra/repo snapshots


🔹 Список файлов снимка
# для конкретного снимка
restic -r ~/restic_extra/repo ls 83d1269c

# для последнего снимка
restic -r ~/restic_extra/repo ls latest


🔹 Занимаемое дисковое пространство
# сколько места требуется для восстановления последнего снимка
restic -r ~/restic_extra/repo stats latest

# сколько места занимает снимок в хранилище
restic -r ~/restic_extra/repo stats --mode raw-data latest


🔹 Верификация данных
# проверка структуры хранилища, целостности снимков
restic -r ~/restic_extra/repo check

# расширенная проверка с включением файлов в снимках
restic -r ~/restic_extra/repo check --read-data


📌 Рекомендация разработчиков системы говорит о необходимости периодического проведения верификации данных дабы вовремя обнаружить проблемы с хранилищем и данными и предпринять меры по их устранению. Пример обнаружения и исправления поврежденного репозитория представлен в документации.

🪓 Очистка хранилища

🔹 Исключение нежелательных данных из репозитория
В результате удаления файлов с помощью команды rewrite формируется новый снимок, однако старый, где были обнаружены искомые файлы, остается в хранилище. Применим опцию --forget для автоматического удаления замененных снимков.
restic -r ~/restic_extra/repo rewrite --exclude secret.txt --forget


🔹 Удаление данных
Хоть мы и очистили хранилище от снимков с нежелательными данными, сами данные остались нетронутыми, а лишь потеряли привязку к снимкам. Для очистки от неиспользуемых более данных существует команда prune.
restic -r ~/restic_extra/repo prune


📌 Для автоматизации процесса очистки forget и prune могут быть использованы вместе.
# оставляем 2 последних снимка, остальное очищаем
restic -r ~/restic_extra/repo forget --keep-last 2 --prune

За правила очистки отвечает опция --keep-*. Все доступные варианты использования здесь.

🗂 Восстановление данных
# восстанавливаем последний снимок в каталог repo_restored
restic -r ~/restic_extra/repo restore latest --target ~/restic_extra/repo_restored

Команда restore также поддерживает различные параметры фильтрации для более детальной настройки, что подробно расписано в документации.

💡 Представленные разделы работы с бэкапами в restic показывают гибкость и глубокую проработку инструментария, что позволяет спроектировать и создать на его основе собственную систему хранения и контроля файловых резервных копий. Хоть версия программы еще не добралась до релиза, множество сценариев применения уже могут быть воплощены в реальных условиях эксплуатации.

#backup #opensource #selfhosted #tools #restic
👍5👏1
🦾 Подборка AI-ассистентов для разработчика

Помощники для программистов развиваются не по дням, а по часам. Это уже не просто автодополнение недостающих фрагментов, но и расширенный анализ и генерация кода, создание и обработка файлов, построение архитектуры, сборка и отладка приложений, работа в терминале и управление браузером и многое другое.

⚡️ Cline - популярный агент с широкой функциональностью. Поставляется в виде расширения для VS Code.

🔥 Roo-Code - форк Cline, "как Cline, только лучше". Представлен также в виде расширения для VS Code и Eclipse.

🔸 Continue - поддерживает работу как через внешние провайдеры AI, так и с использованием локальных моделей. Расширение для VS Code и JetBrains.

💥 Tabby - self-hosted решение. Позволяет развернуть на своем сервере приложение c web UI для управления репозиториями и совместной разработки с поддержкой AI моделей, и подключиться к нему из расширения для IDE.

🔸 Mutahunter - генератор unit тестов с возможностью встраивания в ci/cd.

🔸 Vanna - система взаимодействия с базами данных на естественном языке, генератор sql запросов.

🔸 GPT-Migrate - AI переводчик исходного кода с одного языка/фреймворка на другой.

Напишите свой опыт использования подобных помощников в комментариях. На каких языках, для каких задач применялся и на сколько хорошо справлялся тот или иной ассистент.

#tools #ai #полезное
👍2🔥2
Существует множество способов быстро передать данные с целевой машины. Одним из наиболее простых вариантов является публикация через веб сервер для открытия в браузере. Приведу несколько решений по организации доступа к локальным данным по http протоколу, как для одноразового применения, так и для постоянного целевого использования.

📌 python нынче поставляется в комплекте многих операционных систем, его базовый http сервер и применим.

▪️ Переходим в каталог с данными.
▪️ Запускаем сервер
python3 -m http.server 8000

▪️ Забираем данные через браузер.
▪️ Завершаем работу сервера.

Для разовых манипуляций более чем достаточно.

📌 Браузерный файловый менеджер File Browser
Уже куда более приятный инструмент для работы с расшаренными ресурсами прямо в веб интерфейсе.

▪️ Загрузка каталогов и файлов на / с сервера
▪️ Создание, удаление, изменение файлов и директорий
▪️ Доступ по временной ссылке
▪️ Многопользовательский доступ
▪️ Обработка событий с возможностью добавления собственных скриптов
# устанавливаем
curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash

# задаем адрес и порт в настройках
filebrowser config init -a 0.0.0.0 -p 8080

# добавляем админа
filebrowser users add demo demo -perm.admin

# запускаем над каталогом с данными
filebrowser -r /home/desoft/data


📌 Схожим набором функций обладает еще одно минималистичное решение - Mikochi
Можно запустить через бинарник, поднять в docker или kubernetes.
# запускаем
docker run \
-p 8080:8080 -v /home/desoft/data:/data \
-e DATA_DIR="/data" -e USERNAME=demo \
-e PASSWORD=demo zer0tonin/mikochi:latest


📌 Богатая на возможности программа RClone
Помимо основного назначения синхронизации файлов с облачными хранилищами, утилита предоставляет функцию трансляции файловой системы через веб сервер для взаимодействия по http протоколу.
# устанавливаем
sudo -v ; curl https://rclone.org/install.sh | sudo bash

# запускаем
# --dir-cache-time - время хранения кэша записей смонтированной директории
# --poll-interval - время ожидания между опросами изменений
rclone serve http -vvv /home/desoft/data --addr 0.0.0.0:8020 --dir-cache-time 5s --poll-interval 0


▪️ Широкий выбор операционных систем, в том числе Linux, macOS, BSD, Windows
▪️ Поддержка буферизации и кэширования файлов
▪️ Подключение как локальных, так и облачных хранилищ
▪️ Поддержка запросов на чтение отдельных частей файлов
▪️ Мониторинг обращений
▪️ Гибкая настройка параметров

Полный перечень доступных конфигураций здесь.

#share #opensource #selfhosted #tools
👍6