ServerAdmin.ru
26.7K subscribers
208 photos
24 videos
8 files
2.5K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
​​Продолжаю тему чатов. В этот раз рассмотрю любимый многими Rocket.Chat. Я его никуда не внедрял и скорее всего не буду. Чтобы освежить свои впечатления, решил установить и пощупать последнюю версию. Сначала думал статью написать, но по факту я нашел полностью рабочую инструкцию, по которой за 15 минут всё настроил. Не вижу смысла повторять.

Как я уже упоминал ранее, Rocket.Chat это JavaScript, а приложение для общения на Electron. Для меня это приговор. Мне совершенно не нравится эта связка, потому что она тормозная. Это самый существенный минус данного чата. Ставить приложение на компьютер нет никакого смысла. Там под капотом тот же Chromium. Проще всё в одном браузере открывать, нежели плодить их в системе.

К сожалению, сейчас очень много приложений написаны на Electron и тормозят, поэтому однозначно давать минус рокет чату не стоит за это. Но в связке с JavaScript получается минус в квадрате. Дальше расскажу о плюсах. Их у Rocket.Chat хватает. Стоит отдать ему должное.

Рокет предлагает самый большой функционал в бесплатной версии среди всех известных мне чатов. Тут не нужны никакие компромиссы. Есть, пожалуй, всё, что надо от чата. Что мне больше всего понравилось - расширенное управление правами и доступами. Можно настроить практически всё, что угодно и как угодно. В mattermost этого вообще нет в бесплатной версии.

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

Подвожу итог. Если подбираете себе selfhosted чат, пробовать Rocket.Chat однозначно надо. Если вас не смущают технологии, на которых он построен, и устраивает быстродействие и работа клиента, то внедряйте и пользуйтесь. Продукт зрелый, известный, много кто пользуется. Каких-то явных проблем с ним нет.

https://rocket.chat/
https://github.com/RocketChat

Помимо своего сервера, есть возможность покупать чат по подписке как saas сервис. Цены раза в 3 ниже, чем за Slack. Вместо картинки с чатом, покажу вам лучше админку и настройки, которые там есть.

#chat #selfhosted
​​На прошлой неделе в официальном блоге Zabbix прочитал статью "5 основных причин использовать Zabbix для мониторинга сети". Решил тезисно перевести её и сохранить, чтобы можно было показывать тем, кто будет спрашивать "Почему Zabbix?" Примерно для этого же я написал в свое время статью сравнение Zabbix vs Prometheus. Теперь всегда даю ссылку, если меня кто-то спрашивает, зачем еще нужен Zabbix, если есть Prom. Одно другому не мешает.

1️⃣ Бесплатное решение с открытым исходным кодом. Пояснять тут нечего. У Zabbix нет платной версии. В open source всегда доступен полнофункциональный продукт. Продаётся только тех. поддержка, доработки, обучение и сертификация.

2️⃣ Обширный функционал. С помощью Zabbix можно реализовать абсолютно любые проверки. Никаких компромиссов и ограничений. Доступен как агентный, так и безагентный мониторинг, snmp, ipmi, modbus и другие протоколы. Стандартные механизмы обработки получаемых данных дополняются постобработкой с помощью javascript. Для триггеров тоже нет практически никаких ограничений. Свой внутренний синтаксис для их написания позволяет реализовать практически любую логику. Доступно множество готовых интеграций с системами оповещений. Есть возможность настроить многоступенчатые, гибкие планы рассылок уведомлений с условиями и зависимостями.

3️⃣ Все данные хранятся только у вас. Zabbix позволяет выполнять self-hosted установку на различные устройства. Все ваши данные всегда под вашим контролем. Вы сами выбираете, где, как и сколько их хранить, а так же откуда собирать. Никакой зависимости от сторонних сервисов как в случае с saas мониторингом (отсылка к New Relic наверное).

4️⃣ Хороший баланс функционала и простоты настройки. Стандартные настройки и шаблоны закрывают базовые потребности в мониторинге. Но при этом нет никаких ограничений в расширении функционала путём создания своих собственных шаблонов. Для этого есть все инструменты. Также Zabbix хорошо масштабируется на работу множества пользователей с ним без усложнения процедуры управления всем этим хозяйством.

5️⃣ Коммерческие услуги. Помимо помощи от большого open source сообщества вокруг Zabbix, у вас всегда есть возможность получить профессиональную техническую поддержку. И этим пользуются многие крупные коммерческие организации. Так же у Zabbix есть своя программа обучения и сертификации.

Видео на английском по этой же теме - https://www.youtube.com/watch?v=R525x4O89Qw Много конкретных примеров веб интерфейса на настроенном сервере. Если смотреть в Яндекс.Браузере, будет доступен синхронный перевод на русский язык (забавно послушать, docker image - образ доктора 😂).

#zabbix #мониторинг
​​Недавно узнал любопытную тему из области информационной безопасности, с которой раньше не пересекался. Как-то не было необходимости. По роду своей деятельности я обычно единоличный посетитель вверенных мне серверов. Редко кого-то приходится туда пускать в консоль. А даже если приходится, то чаще всего временно и несистемно.

Есть shell для пользователей, которые позволяют настраивать различные ограничения (restricted shell) на выполнение команд. Например, rsh или rbash. У них есть ряд встроенных ограничений. И есть целый набор трюков, которые позволяют эти ограничения обходить. Например, открыть vi и выполнить там:
:set shell=/bin/bash

Еще более простой трюк с awk:
awk 'BEGIN {system("/bin/sh")}'

То же самое можно сделать через find:
find / -name file01 -exec /bin/awk 'BEGIN {system("/bin/sh")}' \;

Если запрещены редакторы и использование > и >>, а нужно создать скрипт, существует такой ход:
echo "rm -rf /" | tee script.sh

И таких способов очень много. Я где-то видел репозиторий с десятками подобных способов обхода различных ограничений. Ссылку не сохранил, а сейчас не получилось найти. Буду рад, если кто-то подскажет.

Посмотрел на всё это и еще раз убедился, что в хорошего безопасника можно вырасти только из крепкого админа. Сама по себе эта профессия не может существовать, а должна быть ответвлением или следующим этапом профессии системного администратора. Та же самая история с devops.

Кто-то на практике занимался подобными настройками? В случае с linux терминалом мне кажется это нереально всё закрыть. Постоянно найдется какая-то лазейка. Я когда то давно подобными ограничениями занимался на терминальном сервере Windows. Отключал и ограничивал все инструменты, которые может использовать пользователь, чтобы что-то сломать. Оставлял только то, что надо для непосредственной задачи.

#bash #terminal #security
​​Если вам необходимо регулярно проверять хосты и сервисы на уязвимости, и не хочется колхозить различные проверки с помощью nmap и других сканеров, можете попробовать OpenVAS. Это Open Source проект.

https://github.com/atomicorp/gvm
https://github.com/atomicorp/openvas-docker
https://www.openvas.org/

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

Для установки есть свой репозиторий для rpm-based дистрибутивов. Попробовать проще всего, запустив openvas в docker.

docker run -d -p 443:443 --name openvas atomicorp/openvas

Далее идём в веб интерфейс, авторизуемся как admin / admin. Первым делом нужно добавить host в разделе Configuration -> Targets. Затем создать задачу в Scans -> Tasks. Теперь задачу можно запустить и посмотреть, как всё это работает. Настройка интуитивна, так что больших проблем возникнуть не должно.

После работы задачи, можно посмотреть отчёт. Ниже пример подобного отчёта при сканировании чистой системы Centos 8 с единственно открытым ssh портом.

#security #selfhosted
​​Я регулярно пользуюсь терминалом Windows. Решил его немного украсить. Результат можете посмотреть в прикреплённом изображении. Если хотите себе что-то подобное, то читайте дальше, как это сделать.

1️⃣ Идём в Microsoft Store и устанавливаем Windows Terminal.

2️⃣ Скачиваем и устанавливаем шрифты Nerd Fonts.
https://github.com/ryanoasis/nerd-fonts/releases
Качаем файл CascadiaCode.zip, распаковываем шрифты и устанавливаем. Запускаем Windows Terminal и устанавливаем шрифт CaskaydiaCove NF.

3️⃣ Открываем консоль PowerShell и устанавливаем модуль oh-my-posh:
Install-Module oh-my-posh -Scope CurrentUser
Что это такое, читаем на сайте: https://ohmyposh.dev
Сморим список всех доступных тем и выбираем ту, что понравится.
Get-PoshThemes
Я выбрал Aliens, устанавливаю её в текущий терминал и смотрю на неё.
Set-PoshPrompt -Theme Aliens
Если нравится, то ставлю ее на постоянку. Для этого запускаю редактор профиля:
code $PROFILE
И пишу в текстовый файл:
Import-Module oh-my-posh
Set-PoshPrompt -Theme Aliens
Перезапускаем терминал и проверяем новую тему оформления.

4️⃣ Устанавливаем значки иконок и раскраску консоли:
Install-Module -Name Terminal-Icons -Repository PSGallery
Испортируем модуль в консоль и проверяем работу:
Import-Module -Name Terminal-Icons
Некоторые иконки директорий и файлов должны получить уникальные изображения и подсветку. Если всё в порядке, добавляем модуль в профиль для автозагрузки:
code $PROFILE
Добавляем в конец:
Import-Module -Name Terminal-Icons

5️⃣ Пользуемся настроенной красотой.

Этот же самый профиль можно настроить и для WSL консоли.

#windows #terminal
​​Достаточно известная и функциональная программа для нагрузочного тестирования - k6. Проект open source, можно установить у себя. Если есть желание, покупается по схеме saas в облаке. K6 недавно вошёл в состав Grafana Labs. Так что теперь этот продукт станет суперсовременным и молодёжным. Есть интеграция с InfluxDB и Grafana.

https://k6.io
https://github.com/grafana/k6

Если только подыскиваете себе подобный инструмент, то стоит начать с k6. Ранее я уже описывал тулзы подобного рода: yandex.tank и artillery.io. Аrtillery тоже молодёжный - yaml конфиги, автоматизация и javascript в бэкенде. А у k6 - go, что выглядит привлекательнее, так как быстрее. Сами же тесты на javascript пишутся.

Поставить k6 проще простого. Для rpm и deb based дистрибутивов есть репозитории. А запустить можно и в docker. Готовим docker-compose.yaml:

version: '3.4'
services:
 k6:
  image: loadimpact/k6:latest
  command: run /test.js
  volumes:
   - ./test.js:/test.js

Пишем простой скрипт для теста. В течении 30 секунд в 10 потоков бомбим https://test.k6.io (не роняйте сайт своей школы или управы района)

import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
 vus: 10,
 duration: '30s',
};
export default function () {
 http.get('https://test.k6.io');
 sleep(1);
}

Запускаем тест:

docker-compose up

Результат увидите тут же в консоли. Все остальные подробности в документации. Она там очень качественная, как и для всех продуктов Grafana Labs.

#нагрузочное_тестирование
​​У меня уже было много заметок про различные системы мониторинга (#мониторинг). Сегодня будет еще одна - Icinga. Это весьма зрелая и качественная система мониторинга, на которую стоит обратить внимание, если выбираете, на чём остановиться и еще не решили, что вам нужен Zabbix или Prometheus.

Изначально это был форк Nagios. Но со временем их пути сильно разошлись, так что можно считать Icinga самостоятельным продуктом. Причем качественным и полностью бесплатным:

https://icinga.com/
https://github.com/Icinga

Icinga полноценная система мониторинга, которая включает в себя:
- Автоматизацию мониторинга инфраструктуры, в том числе сетевой, в том числе с использованием иерархической распределенной структуры.
- Сбор метрик и логов.
- Аналитику.
- Оповещения.
- Отчёты.
- Визуализацию, в том числе с помощью дополнительных модулей для дашбордов.

В общем, там есть всё, что надо, для полноценного мониторинга. Данные может собирать как с помощью агентов, так и без них. Бэкенд написан на C++, веб интерфейс на php. В качестве БД поддерживает MySQL, Oracle Database, PostgreSQL.

Когда тестировал, очень понравился красивый, лакончиный, отызвчивый и шустрый веб интерфейс. Прям приятно по нему потыкать, все быстро открывается, логично распределено. Попробовать проще всего, развернув всё через docker-compose. Есть репозиторий:
https://github.com/lippserd/docker-compose-icinga
Там готовый compose файл, но есть ошибки в Dockerfile в /env/icingaweb2/. Рабочая версия файла будет такая:

FROM alpine/git
WORKDIR /
COPY icingadb-load-monitoring.patch .
RUN git clone https://github.com/Icinga/icingadb-web.git icingadb && \
cd icingadb && \
git checkout e6e5bb30d37eacaf5498f96412b4b5f400cc9309 && \
cd .. && \
git apply --directory icingadb icingadb-load-monitoring.patch

FROM icinga/icingaweb2:2.9
USER root
RUN rm -rf /usr/share/icingaweb2/modules/icingadb/*
USER www-data
COPY --from=0 /icingadb /usr/share/icingaweb2/modules/icingadb

Используйте эту репу только для тестов. Я не знаю, кто и зачем ее сделал и можно ли доверять всему. На постоянку лучше развернуть без докера.

После запуска всех контейнеров идите в веб интерфейс на порт 8080, учетка - icingaadmin / icinga.

Можете также публичное demo посмотреть:
https://icinga.com/demo/

#мониторинг #selfhosted
Очередная перегитлеровка. На этот раз речь пойдёт о Docker. Хипстеры взяли контейнеры, плотненько их забили по нодам кластера. Один из контейнеров вызвал kernel panic и всё упало.

Гитлер их разносит за то, что в прод тащат непроверенные контейнеры из docker hub, которые написали русские хакеры. За то, что там конструкции типа: curl | sudo bash, за то, что знают только то, что написано в статьях на hackernews и т.д.

Видео как бальзам на душу для тех, кто не любит Docker. Гитлер популярно объяснил, что с ним не так. Особенно доставила его фраза:

Isolation my ass!

и слова успокаивающей плачущую женщину:

Don't cry, you can run bash on Windows 10 now.

Юмор на 10 из 10, очень сочно.

https://www.youtube.com/watch?v=PivpCKEiQOQ

#юмор #видео
​​В репозиториях популярных дистрибутивов живёт небольшая утилита exa, которая делает всё то же самое, что и ls, только красиво окрашивает вывод. В Debian/Ubuntu она в unstable репе. В rpm-based дистрах в федореном репозитории.

https://github.com/ogham/exa
https://the.exa.website/

Утилита состоит из одного бинарника, так что можно просто скачать и запустить. Есть поддержка git, так что можно увидеть статус (modified, Untracked) каждого файла.

Exa умеет делать древовидное отображение каталогов и файлов с возможностью ограничивать глубину. Например:

# exa --tree --level=2 /boot

Удобная и функциональная утилита. Можно просто заменить ls символьной ссылкой и пользоваться только exa. Работает так же быстро.

#terminal #утилита
​​Еще одна тематическая игра с уклоном в программирование - MHRD. Дизайн в стиле командной строки. Вы будете выполнять задачи инженера по железу. Вам надо создавать и программировать печатные платы.

https://store.steampowered.com/app/576030/MHRD/

У вас будет своя среда для разработки программного обеспечения. Пишите код на MHRD hardware design language. Конечная цель, как я понял - разработать полностью свой CPU.

Игра для тех, кто любит поработать после работы 😁 🤡 Русского языка нет.

Немного отзывов:

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

Игра затягивает настолько, что на силу оторвался написать обзор.
Если (вдруг) вы подружились с логикой, то игра для вас! Хоть эта игра очень сильно ломает мозг, она утягивает в чёрную дыру. Готовьтесь, будет сложно даже лечь спать, не пройдя её.

Классные задачки, решение которых происходит больше в оффлайне на бумаге, чем в игре. В начале проектируешь базовые элементы, потом на их основе более продвинутые. Самым сложным для меня оказался полный сумматор. Самым интересным - процессор. Ведь для его проектирования пришлось рисовать не один вариант схем на А4 и вычислять циклы на бумаге.

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

#игра
В комментариях к одной из заметок как-то затронули тему ошибочного сноса прав доступа на файлы в Linux. Оказывается, есть очень простой и быстрый способ восстановить дефолтные права доступа для конкретного пакета, либо на все установленные в системе пакеты. Делается это стандартно с помощью rpm. Способ только для rpm-based дистрибутивов.

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

Восстановить права доступа пакета или всех пакетов разом. И то же самое для владельца.
rpm --setperms package
for p in $(rpm -qa); do rpm --setperms $p; done
rpm --setugids package
for p in $(rpm -qa); do rpm --setugids $p; done

Установка пакета package.rpm:
rpm -ivh package.rpm

Обновление пакета package.rpm
rpm -Uvh package.rpm

Удаление пакета package. И его же удаление, но без зависимостей.
rpm -ev package
rpm -ev --nodeps --nosuggest package

Список всех установленных пакетов:
rpm -qa

Список файлов, установленных пакетом:
rpm -ql package

Определение пакета, которому принадлежит файл:
rpm -qf /path/to/file

Список конфигурационных файлов пакета:
rpm -qc package

Список зависимостей пакета:
rpm -qpR package

Посмотреть содержимое пакета package.rpm:
rpm2cpio package.rpm | cpio -t

Извлечение содержимого пакета package.rpm в текущую директорию. Будет воссоздана вся структура каталогов, которые используются в пакете.
rpm2cpio package.rpm | cpio -idv

#terminal #bash
​​Программу radmin я знаю очень давно. Мне даже кажется, что она уже существовала в тот момент, когда я начал подрабатывать системным администратором в институте (2005 г., подумать только, у меня стаж уже 16 лет 😱). Только недавно узнал, что существует бесплатная программа Radmin VPN для объединения компьютеров в одну локальную сеть по vpn. Это аналог программы Tailscale, про которую недавно рассказывал.

https://www.radmin-vpn.com/ru/

Radmin VPN – бесплатная и простая в использовании программа для создания виртуальных частных сетей (VPN). Программа позволяет пользователям устанавливать безопасное и надежное соединение между компьютерами через Интернет, как если бы они были соединены через локальную сеть.

Добавить тут особо нечего. Ставится и работает просто. Обычный установщик Windows. Другие системы не поддерживаются. Это большой минус. А плюс в том, что программа полностью бесплатная, без каких-либо ограничений или платных фич. Я так понял, что создана она для рекламы и продвижения другого коммерческого продукта этой компании - Radmin.

Настройка максимально простая. Ставите клиент. Он автоматически регистрируется где-то в облаке разработчика, подключается к нему и получает серый ip. Вы можете создать свою новую локальную сеть или подключиться к существующей. При создании сети указывается её имя и пароль. На другом устройстве достаточно установить клиент, ввести имя сети и пароль к ней. Оба устройства окажутся в этой сети.

#vpn
​​Вновь возвращаюсь к теме чатов. Ещё пара вариантов для рассмотрения осталась. Сегодня поговорим о Matrix Synapse. Это не совсем чат-сервер, скорее платформа для организации чатов. Расскажу подробнее.

Matrix - это открытый протокол для децентрализованной коммуникации. Он может быть реализован в различных серверах и мессенджерах - https://matrix.org.

Synapse - локальный сервер, который работает на протоколе matrix, обеспечивает возможность подключения и общения клиентов. Написан на Python - https://matrix.org/docs/projects/server/synapse. Можно быстро запустить в docker или воспользоваться публичным сервером.

Для данной связки можно использовать любой клиент. Наиболее популярным и зрелым является клиент Riot, который в настоящий момент переименован в Element. Я пробовал именно его, когда тестировал данную связку. Он есть как web клиент, desktop и android приложение - https://element.io. К сожалению, под капотом там javascript и какой-нибудь современный фреймворк (не уточнял, какой именно), так что большого смысла использовать именно приложение нет. Оно точно так же выглядит, как и страница в браузере.

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

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

Будет неплохо, если протокол Matrix продолжит свое развитие и завоюет популярность, как в свое время irc или xmpp. Пользователи от этого только выиграют. Сейчас по факту почти все пользуются закрытыми проколами и проприетарным ПО в этой области. Если честно, я не уверен, что у Matrix что-то сильно популярное выйдет. Мне кажется, сфера общения в виде мессенджеров очень лакомая для коммерческих организаций. Они будут максимально развивать и наращивать бесплатный функционал, лишь бы вы пользовались их продуктами и сливали информацию о себе. Open Source продукту будет трудно с ними конкурировать.

Если кто-то внедрял подобный чат-сервер, дайте обратную связь. Как там в плане стабильности и удобства в реальной эксплуатации.

#chat #selfhosted
​​Есть отличный инструмент для хранения любого вида информации, в том числе и по сетевому оборудованию - Exel. У меня целая куча всевозможных таблиц с информацией. Но если вам нужно что-то более удобное для учёта и инвентаризации всего, что связано с сетями и информации об IP адресах, предлагаю обратить внимание на NetBox.

Netbox - это приложение для infrastructure resource modeling (IRM). Написано командой сетевых инженеров DigitalOcean специально для системных администраторов. Изначально использовалось для управления внутренней инфраструктурой, потом было опубликовано в open source.

Полезные ссылки:
https://netbox.readthedocs.io/
https://github.com/netbox-community/netbox

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

Netbox построен на базе Django (Python), Nginx или Apache, PostgreSQL в качестве СУБД. Посмотреть и попробовать очень просто. Есть полнофункциональное demo - https://demo.netbox.dev.

Если будете ставить себе, есть подробная документация с видео по установке и связке всех компонентов. Если вы devops, у вас причёсанная борода, вы пьете крафтовый кофе, и вы выше всей этой ручной возни с пакетами и настройками, то для вас есть готовый docker-compose:
https://github.com/netbox-community/netbox-docker

#network #управление #ITSM #IPAM
​​Прочитал на stackoverflow ответ от DBA Postgresql на тему размещения субд в контейнерах. Ответу уже 3 года, но с тех пор принципиально ничего не изменилось. Кратко смысл такой:

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

Эти 2 условия практически полностью нивелируют удобства Docker. Большого смысла запускать СУБД в контейнере нет. Речь идёт о нагруженной базе данных в проде.

Есть большой опыт использования небольших баз данных и кластеров postgresql в kubernetes у компании Zalando. Я делал отдельную заметку по их выступлению с этой темой на конференции. Там идея такая - большие нагруженные базы в контейнерах не запускают. А вот небольшие базы отдельных микросервисов запускают в kubernetes. Это позволяет организовать удобное централизованное управление и деплой новых баз для различных сервисов и команд.

У меня была еще одна заметка на тему базы данных в Docker. Там я делаю выжимку из статьи компании Percona о её собственных тестах производительности БД в контейнерах. Там вывод такой же, как и в у DBA со stackoverflow. Нужно обязательно использовать сеть хоста, чтобы не было просадки производительности.

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

У меня в практике как то раз был случай, когда база данных Mysql, запущенная в контейнере, просто исчезла. Разработчики запустили один проект заказчику полностью в контейнерах. В какой-то момент замапленная директория с файлами БД оказалась полностью пустой. Был такой древний баг. Его уже давно пофиксили.

Написал заметку, чтобы вы лишний раз подумали, когда будете использовать докер, а нужен ли он тут. Запускать одиночную субд на хосте в контейнере нет никакого смысла. Точно так же ее можно установить через пакетный менеджер и запустить. Работать будет быстрее, проблем будет меньше.

#postgresql #mysql #docker
​​Давно не было заметок про полезные утилиты для бэкапа. Решил это исправить. Рассказываю про Butterfly Backup. Это небольшая консольная обёртка над rsync, написанная на python. Идея её в том, что она использует основное преимущество rsync - скорость сравнения и копирования информации. А так же добавляет некоторую гибкость, которой изначально в rsync нет. То есть расширяет его функционал.

https://github.com/MatteoGuadrini/Butterfly-Backup
https://butterfly-backup.readthedocs.io/en/latest/

Butterfly Backup избавляет от необходимости писать собственную bash обвязку вокруг rsync для организации инкрементных или разностных бэкапов. Так же упрощает восстановление и просмотр содержимого бэкапов. Для удобства можно подготовить готовый конфиг.

Основные возможности:
Поддерживаемые бэкапы: Full, Incremental, Differential, Mirror.
Использование центрального сервера для хранения бэкапов разных клиентов.
Детальный просмотр содержимого отдельных бэкапов.
Бэкап всей системы, а так же ее восстановление на другое железо или VM.
Принцип снятия данных agent-less, по протоколу rsync или ssh.

Для работы BB нужен Python3. Далее достаточно скопировать репозиторий и запустить скрипт установки:
git clone https://github.com/MatteoGuadrini/Butterfly-Backup.git
cd Butterfly-Backup
sudo python3 setup.py

После этого копируем rsa ключи, которые предварительно создали, на удаленный host, чтобы иметь к нему доступ:
bb config --deploy host1

Дальше запускаем простой бэкап:
bb backup --computer host1 --destination /mnt/backup --data System --type Unix

У bb есть преднастройки для типовых бэкапов трёх типов систем - Unix, Windows, MacOS. Если указать после ключа data тип данных и далее тип системы, то будет забэкаплено всё, что относится к этому типу. В моем примере это системные директории.

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

#backup
​​Помните, я уже писал о проблеме Centos 7 и сертификатов Let's Encrypt? Не буду сильно повторяться, так как все подробности по ссылке. Кратко скажу, что из-за устаревшей версии Openssl, в Centos 7 не будет поддержки нового корневого сертификата, а старый протухает 30 сентября.

Вариантов решения этой проблемы несколько:

1️⃣ Обновить версию openssl на 1.1.1 или выше. Теоретически это может привести к каким-то проблемам с зависимостями, так как этой версии нет в базовых репах. Ставить придётся вручную.

2️⃣ Заблокировать протухающий сертификат. Сделать это можно так:
# trust dump --filter "pkcs11:id=%c4%a7%b1%a4%7b%2c%71%fa%db%e1%4b%90%75%ff%c4%15%60%85%89%10" | openssl x509 | tee /etc/pki/ca-trust/source/blacklist/DST-Root-CA-X3.pem
# update-ca-trust extract

Перед этим на всякий случай сохраните текущую цепочку CA сертификатов:
# cp -i /etc/pki/tls/certs/ca-bundle.crt ~/ca-bundle.crt-backup

3️⃣ Выпускать новые сертификаты с использованием другой цепочки CA:
# certbot renew --preferred-chain "ISRG Root X1"
Данная возможность появилась в версии certbot 1.6.0.

Подробности всей этой истории по ссылке:
https://blog.devgenius.io/rhel-centos-7-fix-for-lets-encrypt-change-8af2de587fe4
Я там новость подсмотрел.

#centos
Есть небольшая утилита для организации vpn подключения через ssh - sshuttle. Она есть в стандартных репозиториях популярных дистрибутивов. В Centos живет в репозитории epel. Также присутствует в pip, так как написана на python.

https://github.com/sshuttle/sshuttle
https://sshuttle.readthedocs.io/en/stable/usage.html

Установка:
# dnf install sshuttle
# apt install sshuttle
# pip install sshuttle

Её удобство в простоте и функциональности. VPN соединение организуется поверх SSH. Покажу на примерах:
# sshuttle -r user@1.2.3.4 0/0

Выражение 0/0 эквивалентно маске 0.0.0.0/0, то есть весь трафик отправляем в этот туннель. Будьте аккуратны, когда начнёте тестировать. Вас отключит от текущего ssh соединения. Можете сразу же проверить, через какой ip вы выходите в интернет:
# curl ifconfig.me/ip

Должны увидеть внешний ip ssh сервера, к которому подключились. С помощью sshuttle удобно подключаться к jump host и дальше на целевое устройство. Допустим, на какое-то устройство или сервер (ip - 2.2.2.2) можно подключиться только через конкретный сервер (ip - 3.3.3.3). Используем для подключения sshuttle.
# sshuttle -r user@3.3.3.3 2.2.2.2/32

После подобного подключения у вас будет создан маршрут к 2.2.2.2/32 через ssh сервер 3.3.3.3. Дальше можете со своей машины подключиться к 2.2.2.2.

Во время тестов я столкнулся с ошибкой: fatal: server died with error code 255. Подключение по ssh осуществлялось, а потом sshuttle падал. Решил вот так:

# sshuttle -r user@1.2.3.4 -x 1.2.3.4 0/0

Если используется нестандартный ssh порт, то указать его следует так:

# sshuttle -r user@1.2.3.4:22334 0/0

Для использования ключа при ssh подключении, добавьте следующие опции:

# sshuttle -r user@1.2.3.4 0/0 --ssh-cmd "ssh -i ~/.ssh/id_rsa"

Если что-то пойдёт не так, включите подробное логировние через ключ -vvvv. Увидите, какие правила sshuttle добавляет в firewall и как прописывает маршруты. Там никакой магии, всё наглядно.

В Windows через WSL2 тоже работает, что весьма удобно. Данной заметки достаточно, чтобы начать пользоваться программой, так что смело добавляйте в закладки.

#vpn #ssh
​​На днях слушал вебинар, где в том числе разобрали порядок поиска и выполнения команд в интерпретаторе bash. Я вспомнил, как сам в свое время разбирался в этой теме, пытаясь понять, почему команды выполняются в неочевидном для меня порядке. Решил законспектировать этот момент и поделиться с вами.

Итак, после ввода в терминал команды, происходит следующее:
1️⃣ Проверяются алиасы. Если команда будет там найдена, то поиск остановится и она исполнится. Проверить свои алиасы можно в консоли с помощью команды:
# alias
Кстати, алиас ls там скорее всего будет в таком виде:
alias ls='ls --color=auto'
То есть выполнится не просто бинарник /usr/bin/ls, а именно указанный алиас с ключами.
2️⃣ Далее команда проверяется, встроена в ли она в оболочку, или нет. Если встроена, то выполнится именно она, а опять же не бинарник. Пример встроенных программ - echo, pwd и т.д.
# type echo
echo is a shell builtin
Что интересно, есть и бинарник echo, но если вы в консоли bash явно не укажете путь к нему /usr/bin/echo, выполнится именно встроенная в оболочку программа. Они на самом деле разные. У них даже ключи немного отличаются.
3️⃣ Только теперь идёт поиск бинарника в директориях, определённых в $PATH, причем не абы как, а по порядку следования этих директорий в переменной слева направо.
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Я в свое время именно с этим разбирался, так как не мог понять, почему выполняется один из двух бинарников с одинаковыми именами, лежащие в разных директориях.

Зная всё это, можно засадить куда-то зловреда, или просто пошутить над кем-то. Например, создать пустой исполняемый файл с таким же именем, как системная утилита, например, chown. Положить файл в какую-то директорию и добавить её в начало $PATH. После этого при наборе chown в консоли или скриптах не будет происходить ровным счётом ничего. Если не знаешь всех нюансов, то так сразу не поймёшь, в чём проблема.

#bash #terminal
​​Число компаний, которые переходят в онлайн растет с каждым годом, и всё больше умных устройств оказывается в сети. Именно поэтому профессия системного администратора становится всё более востребованной, что подтверждает рост зарплаты и количество открытых вакансий.

Более того, системный администратор имеет мощный потенциал для развития: он может стать DevOps-инженером, системным архитектором или СТО (техническим директором).

Получить реальный опыт администрирования и освоить продвинутые инструменты можно на курсе «Системный администратор» от SkillFactory. Курс на 80% состоит из практики и отработки полученных знаний на практических задачах, максимально приближенных к реальным — что позволит сразу погрузиться в профессию и выйти на рынок подготовленным специалистом. 

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

❗️Оставь заявку с промокодом СЕРВЕР и получи скидку 45% на обучениеhttps://clc.to/k0RHyQ