Проблема безопасности SSH Agent Forwarding

 

Вот что говорит нам man ssh_config про ForwardAgent(перевод):

Agent forwarding нужно включать с осторожностью. Пользователи, которые смогут обойти настройки разрешений файлов на удалённом хосте (в частности для unix-socket агента (ssh-agent)) могут получить доступ к локальному агенту через перенаправленное(forwarded)-соединение. Атакующий не сможет вытащить сами ключи из агента, однако получит возможность проводить с ключами действия, позволяющие ему проходить аутентификацию, используя загруженные в агент идентификаторы

Просто запомните: если ваш бастион(прим. пер.: jump box — сервер-бастион для доступа в закрытый сетевой контур) скомпроментирован, и вы используете SSH agent forwarding, чтобы через него подключаться к другим машинам, то высок риск компроментации и этих удалённых машин.

Вместо этого лучше используйте ProxyCommand или ProxyJump (добавлен в OpenSSH 7.3). В таком случае ssh перенаправит TCP-соединение на удалённую машину через бастион, а само соединение будет установлено с вашей локальной машины. Если кто-нибудь на бастионе попробует провести MITM (man-in-the-middle) атаку на ваше соединение, то ssh об этом предупредит (прим. пер.: видимо, речь идёт о предупреждении об изменившимся ssh fingerprint(отпечатке))

Пример конфига ssh с использованием ProxyCommand:

Оригинал
https://defn.io/2019/04/12/ssh-forwarding/

Планирование резервного копирования с использованием backupninja

Эта заметка — перепечатка своего ответа на вопрос в сервисе toster.ru

Искал решение для планирование резервных копий различными утилитами на различные хранилища и остановился на backupninja
Умеет по расписанию бэкапить БД и файлы и отправлять их на сторонний сервер разными способами, включая rsync, rdiff, duplicity

В /etc/backup.d/ создаёте конфиги вида 10-db.mysql , 50-ftp.dup
Числа в начале файла описывают очерёдность выполнения в случае одновременного запуска (сначала сдампить базу, а затем заливать из папки с архивом на ftp).
Расширение файла указывает на тип задачи (.mysql — бэкап mysql, .dup — используем duplicity)

Читать далее «Планирование резервного копирования с использованием backupninja»

Kubernetes NodePort / LoadBalancer / Ingress? Когда что использовать?

Чем отличаются всякие там NodePorts, LoadBalancer и Ingress? Все они дают возможность внешнему трафику попасть в ваш кластер, но дают эту возможность по-разному. Давайте-ка разберёмся, как они это делают и когда какой тип сервиса лучше использовать.

ClusterIP

ClusterIP — это дефолтный тип сервиса в кубах, он поднимает вам сервис внутри кластера на внутрекластеровом IP. Доступа для внешнего трафика нет, только внутри кластера.

YAML для ClusterIP выглядит как-то так:

Читать далее «Kubernetes NodePort / LoadBalancer / Ingress? Когда что использовать?»

dapp — утилита для сборки и деплоя контейнеров. Особенности работы

dapp — утилита от российской компании Флант , которая занимается внедрением devops-практик (kubernetes, ci/cd и всё такое, ну вы в курсе)
Подробное описание можно прочитать на Хабре, а я бы хотел остановиться на некоторых особенностях работы с ней при сборке образов (здесь и далее под образом подразумевается docker image)


На момент написания статьи актуальная версия dapp 0.36.*


В качестве примера для наглядности и понимания общей картины возьмём за основу немного урезанное содержимое dappfile.yaml из официальной документации

Читать далее «dapp — утилита для сборки и деплоя контейнеров. Особенности работы»

TinyMCE 4. Управляем настройками редактора через data-* атрибуты HTML

Представьте, что у вас есть сайт. А на этом сайте у вас подключен TinyMCE. Да подключен не к одному textarea, а к пачке разных, и надо сделать так, чтобы на разных textarea были разные настройки. Что в первую очередь приходит в голову? Правильно! Наделаем разных классов и будем по css-селекторам создавать разные инстансы. А что получим в итоге? Тоже правильно! Лапша в коде
Сделаем по-умному Читать далее «TinyMCE 4. Управляем настройками редактора через data-* атрибуты HTML»

Получаем wildcard сертификаты LetsEncrypt

13 март 2018 года LetsEncrypt наконец объявила, что, они начали поддерживать wildcard-сертификаты. Теперь можно за раз получить сертификат, включащий в себя все субдомены

Процесс всё так же автоматизирован через консольную утилиту certbot. Отличие в том, что теперь подтверждение домена можно сделать только через TXT-запись в DNS-зоне, а не через webroot, как раньше. Читать далее «Получаем wildcard сертификаты LetsEncrypt»

Summernote. Автоформатирование при просмотре исходного кода

В summernote для codeview используется codemirror, так что нам надо, чтобы сам summernote расставил переносы строк (prettifyHtml: true), а средствами codemirror`а мы уже сделаем отступы.

При клике на кнопку codeview выполним 3 команды. Клик по кнопке ловится через event, который ловим средствами самого summernote.

  1. Выделим весь текст
  2. Сделаем автоотступы для всего выделения
  3. Переставим курсор в начало текста, чтобы снять выделение

 

Быстрый перенос базы mysql на другой сервер с помощью percona xtrabackup

По мотивам официального мануала

Скорость переноса данных, по сравнению с обычными консольными dump / restore просто колоссальная, т.к. переносятся целиком файлы таблиц.

Особенность в том, что на целевом сервере не должно быть рабочей mysql с нужными данными

На серверах должен быть установлен Percona XtraBackup

Source server

Делаем частичный бэкап (partial backup), указывая опцию —database, где через пробел перечисляем базы для бэкапа. Важным моментов является то, что необходимо забрать и базу mysql для сохранения учётных записей и разрешений

Читать далее «Быстрый перенос базы mysql на другой сервер с помощью percona xtrabackup»

PHP профайлер tideways + xhgui

Введение

Об удобстве использования профайлера, да ещё с графическим интерфейсом и говорить нечего, особенно когда надо найти узкие места под нагрузкой.

tideways — само расширение php для сбора данных о производительности кода

xhgui — графический веб-интерфейс (см. скриншот выше), который, помимо всего прочего, сохраняет данные профилирования в mongodb и затем использует их для вывода статистики

Установка

Нам понадобятся:

  1. Настроенный веб-сервер с fastcgi (в данном примере nginx + php-fpm)
  2. Сервер mongodb
  3. php-mongod
  4. gcc, make, php-devel, чтобы собрать расширение tideways

Читать далее «PHP профайлер tideways + xhgui»

map в nginx

Кейс следующий:

Есть запросы к API с передачей уникального токена в GET параметре. По этому токену (user_token=) имеются лимиты на запросы через limit_req_zone, типа такого:

Необходимо для некоторых токенов отключить лимиты. Тут на помощь и приходит map модуль nginx. Он позволяет динамически получать переменную, значение которой будет зависеть от значений других, входных, переменных. Т.е., грубо говоря, мы имеем function(a, b) { … return c } Читать далее «map в nginx»