ServerAdmin.ru
31.3K subscribers
671 photos
55 videos
22 files
2.87K links
Авторская информация о системном администрировании.

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Регистрация в РКН: https://vk.cc/cG1Urj
Download Telegram
Есть одна вещь, которая мне не нравится в Debian. Я всегда выполняю одну и ту же настройку сразу после установки системы. Не понимаю, кто придумал по умолчанию логи cron писать в общий системный лог /var/log/syslog. Это при том, что настройка для отдельного ведения журнала cron уже есть в конфиге rsyslog, но почему-то закомментирована. И настройка для логирования файла /var/log/cron.log уже есть в logrotate.

Если вы так же, как и я, любите, когда логи cron хранятся в отдельном файле, то сделайте следующее. Открываете на редактирование /etc/rsyslog.conf и раскомментируете строку:
cron.*                 /var/log/cron.log
Далее отключаем запись логов в общий файл. Добавляем cron.none в следующую строку:
*.*;auth,authpriv.none,cron.none    -/var/log/syslog
Перезапускаем rsyslog и cron:
# systemctl restart rsyslog cron

Проверяем, появился ли файл с логом.
# ls -l /var/log/cron.log

На всякий случай проверьте файл /etc/logrotate.d/rsyslog. Есть ли там строка с упоминанием файла /var/log/cron.log. Вроде должна быть. Не помню, чтобы я руками добавлял.

Мне кажется реально удобно, когда логи крона живут отдельно. Их довольно часто используешь, так как cron популярный инструмент. Хотя его сейчас активно вытесняют таймеры systemd. Надо про них отдельно написать.

Я подзабыл, а в Ubuntu тоже логи cron в наследство от Debian пишутся в общий syslog? Кто-то делает подобную настройку или это мой бзик? Я после Centos никак не могу привыкнуть, что по дефолту нет этого лога.

#debian
👍74👎3
​​Продолжу вчерашнюю тему про RDP. Судя по комментариям, есть немало людей, которые просто ставят аналог fail2ban, только под Windows. Я ранее рассказывал про подобные решения:

RDP Defender - https://t.iss.one/srv_admin/1168
EvlWatcher - https://t.iss.one/srv_admin/1680
IP Ban - https://t.iss.one/srv_admin/1657

Мне лично RDP Defender больше всего нравится. Но есть ещё один бесплатный продукт, который раньше был популярен - Cyberarms IDDS. А сейчас у него даже сайт не открывается. Тем не менее, на github хранятся исходники и скомпилированная версия - https://github.com/EFTEC/Cyberarms Обновлений не было 5 лет. Я решил проверить, он вообще рабочий или уже нет.

Установил на Windows Server 2019, без проблем запустился. Всё работает. По функционалу и удобству он лучше всех перечисленных выше. У него настроек больше, они гибче, плюс уведомления по smtp отправлять умеет. Помимо подключений по RDP, может следить за виндовыми службами: ftp, smtp, sql server и некоторыми другими. Для каждой службы свой агент.

Принцип работы у Cyberarms IDDS примерно такой же, как у всех. Устанавливает свою службу, создаёт правило во встроенном брандмауэре, заполняет правило ip адресами. Перед установкой надо поставить в систему пакет Microsoft Visual C++ 2010 x64. Без него не установится. И агент, отвечающий за авторизацию по RDP называется Windows Base Security Agent. Во всех инструкциях в сети почему-то запускают другого агента - TLS/SSL Security Agent. С ним у меня ничего не работало.

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

#windows #rdp #security
👍49👎3
У меня накопилось много заметок по поводу работы с JSON. Решил сделать подборку, что собрать информацию в одном месте. С этим форматом постоянно приходится работать, так что, думаю, будет полезно. Можно в закладки забрать.

обзорная статья по работе с json в zabbix
jq - утилита для преобразования однострочных json в удобочитаемый вид, а также для получения значений через jsonpath
онлайн сервис JSONLint для проверки синтаксиса
форматирование json в удобочитаемый вид с помощью python
онлайн сервис hcl2json для конвертации форматов json, yaml и hcl друг в друга
jo - консольная утилита, создаёт json из поданных в неё данных. Умеет, к примеру, список файлов в директории оборачивать в json или вывод какой-нибудь консольной команды, типа ps.
онлайн сервис JSONPath для извлечения данных из json
gron - консольная утилита, которая превращает json в текст, к которому можно эффективно применить утилиту grep. То есть делает json грепабельным. 

#json
👍61👎3
​​Постоянно пользуюсь утилитой rclone для загрузки данных в S3 хранилище. Вспомнил, что ни разу не писал про неё отдельно. Решил исправить. Думаю, многие знают про неё, так как программа старая, удобная, популярная. Она есть под все известные ОС: Windows, macOS, Linux, FreeBSD, NetBSD, OpenBSD, Plan9, Solaris.

Я использую её исключительно в консоли Linux. Она есть в базовых репозиториях, так что ставится стандартно:
# apt install rclone
# dnf install rclone
Самую свежую версию можно поставить вот так:
# curl https://rclone.org/install.sh | bash

Далее рисуем простой конфиг в файле ~/.config/rclone/rclone.conf:
[selectel]
type = swift
user = 79167_username
key = uO6GdPZ97
auth = https://api.selcdn.ru/v3
tenant = 79167_username
auth_version = 3
endpoint_type = public

Это пример для S3 хранилища от Selectel. Все учётные данные получите в ЛК. Я давно им пользуюсь. Когда выбирал, он был самым дешёвым. Сейчас не знаю как, не сравнивал. Для объёмов до 100 Гб там цены небольшие. За этот объём заплатите рублей 300 примерно (стандартное хранилище, холодное ещё дешевле), так что не критично. Рекомендую дублировать бэкапы сайтов, магазинов в S3. У меня это всегда второе, холодное хранилище, куда уезжают полные архивы с определённой периодичностью.

Бэкап директории /mnt/backup/day делается следующим образом:
# /usr/bin/rclone copy /mnt/backup/day selectel:websrv-day

Я обычно делаю 3 контейнера: day, week, month с настройкой хранения копий 7, 30 дней и бессрочно. Контейнер с месячными архивами чищу вручную время от времени, либо вообще не чищу. А первые два очищаются самостоятельно в соответствии со своими настройками. Следить самому за этим не надо. Если у вас это будет единственное хранилище, то очистку лучше настроить не по времени, а по количеству файлов в контейнере. Иначе если не уследите за бэкапами и они по какой-то причине не будут выполняться, через какое-то время все старые будут удалены, а новые не приедут.

В S3 от Selectel данные заходят очень быстро. Скорость до Гигабита в секунду. Скачивать редко приходится, так что не знаю, какая там реальная скорость, но проблем никогда не было. Думаю тоже что-то в районе гигабита, обычно сам интернет медленнее, куда грузить будете. Можно через панель управления зайти и открыть веб доступ к какому-нибудь файлу, сделать одноразовую ссылку. Также доступ к файлам есть через личный кабинет напрямую в браузере, либо по FTP. Я для визуального контроля и загрузки файлов обычно по FTP захожу.

Сайт - https://rclone.org

#backup #s3
👍43👎5
​​Когда у вас много независимых друг от друга мониторингов, возникает проблема за контролем всего этого хозяйства. Лично я для Zabbix использую интеграцию с Grafana и делаю на последней дашборд с выводом триггеров с нескольких Zabbix серверов. Меня вполне устраивает такое решение для быстрого просмотра состояния нескольких (у меня 6) серверов мониторинга.

Подозреваю, что для Prometheus и его Alertmanager тоже должно быть что-то похоже на базе Grafana, но я сегодня хочу вам рассказать про другой дашборд, который может объединять в себе события от нескольких Alertmanager. Это программа под названием Karma - https://github.com/prymitive/karma, которая как раз представляет из себя Alert dashboard для Prometheus Alertmanager.

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

Конфиг у Karma, как не трудно догадаться, в формате yaml и в общем случае довольно простой. В репозитории есть пример с подключением локального alertmanager. Для удалённых просто uri будет отличаться и их будет несколько. Для самой простой настройки достаточно их подключить в режиме readonly:

servers:
  - name: prod
   uri: https://user:[email protected]
   timeout: 20s
   proxy: false
   readonly: true
  - name: dev
   uri: https://user:[email protected]
   timeout: 20s
   proxy: false
   readonly: true

Для аутентификации в Karma есть 2 способа: basic auth или передача учётных данных через header в запросе. А для авторизации - ACL списки. То есть этот продукт подходит для работы различных команд с разграничением доступа к поступающим оповещениям. Ограничение доступа работает не на просмотр, а на возможность подавления оповещения.

Demo - https://karma-demo.herokuapp.com
Исходники - https://github.com/prymitive/karma
Обзор и пример настройки - https://www.youtube.com/watch?v=pLI8-gHgedA

#prometheus #мониторинг #devops
👍25👎5
​​Недавно в блоге Zabbix вышла любопытная заметка на тему мониторинга веб сайта и создания скриншота по событию. Меня заинтересовала эта тема, так что решил немного разобраться.

В статье автор предлагает использовать фреймворк Selenium для создания скриншота сайта. Для его использования он написал небольшой скрипт на Python и опубликовал его в виде картинки 🤦

Дальше он предлагает добавить этот скрипт в Zabbix и использовать в каких-то действиях. Например, в триггере для мониторинга сайта. Если получаем ошибку мониторинга, то делаем автоматом скриншот. Скрипту url сайта передаём через макрос триггера {TRIGGER.URL}, так что не забудьте этот url указать в триггере.

Идея мне понравилась, только не захотелось возиться с Selenium. Я его вообще никогда не использовал. А ещё и скрипт набирать бы пришлось с картинки. В комментариях один человек посоветовал использовать утилиту cutycapt. И тут началось...

У меня тестовый Zabbix Server работает на базе Oracle Linux 8. Cutycapt старая утилита и для 8-й версии её вообще нет. Попытался собрать из исходников, не получилось, так как для сборки надо qt4, а он давно снят с поддержки и в репах его нет. Есть только qt5, но под ним не собирается. Долго я мучался со сборкой и установкой пакетов. Потом плюнул и просто установил пакет от 7-й версии, который взял в epel7. И на удивление, всё получилось. В зависимостях там qt5, которые подтянулись из epel8.

Также понадобился пакет Xvfb для запуска Cutycapt на сервере без графического окружения. В итоге скриншот сайта делается вот так:
# xvfb-run CutyCapt --url=https://serveradmin.ru --out=serveradmin.png

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

Помимо привязки к триггеру, можно сделать ручной запуск скрипта через веб интерфейс. А скриншот добавить на дашборд в виджет. Я так понял, что подобный виджет появился в версии 6.2, так как в 6.0 у себя не нашёл его.

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

#zabbix #website
👍38👎2
▶️ За время ведения канала накопилось много пятничных юморных видосиков. Не хочется повторять публикации, хотя некоторые вещи можно с удовольствием пересматривать. Плюс аудитория постоянно меняется и увеличивается, а старые посты редко кто читает. Решил периодически делать тематические подборки, чтобы захватывать материал из прошлых статей.

🔥 Нестареющая классика - веселенький денек у сисадмина. Вряд ли нужны какие-то комментарии к этому видео. У автора ролика есть ещё несколько похожих творений. Мне понравилось вот это - The Website is Down #3: Remain Calm.
Цикл качественного профессионального американского юмора на тему техподдержки - Nick Burns, Your Company's Computer Guy. Для восприятия юмора надо хорошо понимать английский на слух. Я несколько раз пересматривал данный цикл. Очень нравится.
🔥 Классная переозвучка фрагментов фильма Волк с Уолл-стрит - трудовые будни техподдержки. Лично я считаю это лучшей тематической переозвучкой из тех, что я видел.
Хороший тематический видеоряд к песне от Научно-технического рэпа - Надо было ставить линукс. Нравится этот исполнитель, частенько слушаю под настроение.
Нестандартный саркастически-юмористический ролик на тему работы тех. поддержки - The Expert: IT Support. От авторов известных скетчей на тему современного крупного бизнеса. Я все смотрел, понравилось.
Эффективный способ решения проблем с вентилятором в системном блоке.
Хороший юмор на тему Kubernetes - Hitler uses Kubernetes.
🔥 Как на самом деле пишется и проверяется код в больших технологичных компаниях? Ответ в ролике - how we write/review code in big tech companies.
Забавный фрагмент из фильма Кремниевая Долина "Silicon Valley" - Удаление данных. К сожалению, сериал так и не посмотрел. Всегда находится что-то другое (иногда смотрю стримы Voodoosh перед сном по третьим героям).

В завершении поста анекдот:

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

Заводит Бог сисадмина в одно помещение, а там стоят крутые сервера, навороченные рабочие станции, быстрая сетка, и говорит: "Это рай, здесь ты будешь жить и развлекаться в свое довольствие, и будешь ты простым пользователем". 

У админа глаза заблестели, но из любопытства он все равно просит Бога показать и ад. Бог отвечает: "Ад - это тоже здесь, только тогда ты будешь системным администраторoм".

#юмор #подборка
👍60👎4
​​Давно слышал про бесплатную и открытую configuration and management database (CMDB) i-doit (не idiot, как хочется прочитать с первого взгляда 😁). Это база данных для хранения всей инфорvации об IT. Есть open source версия и платная. Основное отличие - в бесплатной можно только руками всё вводить и нет управления пользователями и ролями.

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

📌 I-doit умеет хранить и организовывать любую информацию, имеющую отношение к IT:
оборудование, в том числе сервера, стойки, облачные ресурсы;
общую информацию, документацию, контакты;
программное обеспечение, лицензии, службы;
сетевую информацию, в том числе с помощью встроенной системы управления IP адресами;
географическое расположение объектов и группировку на основе этого.

Всё это удобно организовано. Проверить можно в Demo. Я там все разделы просмотрел, оценил. Полезной особенностью I-doit является встроенная интеграция с helpdesk системой Zammad. Она тоже open source, так что можно получить функциональную бесплатную связку из двух продуктов. В итоге i-doit будет показывать все тикеты, связанные с объектом, а в Zammad можно будет выбирать объект во время заведения тикета. Как это выглядит на практике можно посмотреть в документации к Zammad.

Если кто-то использует I-doit, дайте обратную связь по ней. Мне показалась эта система очень удобной и информативной. Работает на базе стандартного веб сервера php + mysql.

Сайт - https://www.i-doit.org
Исходники - https://sourceforge.net/projects/i-doit/files/i-doit
Demo - https://demo.i-doit.org

#управление #ITSM
👍38👎3
Когда, как не в выходной день поговорить об играх. Если у вас есть желание установить и настроить свой игровой сервер какой-нибудь популярной игры, можно воспользоваться Open Source проектом LinuxGSM (Linux Game Server Manager)

Это набор готовых скриптов для установки одного из 126 поддерживаемых игровых серверов. Список игр представлен на сайте. Там же подробное руководство по установке и управлению игровым сервером. Покажу на примере установки сервера Minecraft. Мне уже приходилось его устанавливать и настраивать для сына, только через Pterodactyl. Это похожая панель, только там список игр значительно меньше и запускается всё в Docker.

Возвращаемся к LinuxGSM. Идём на страницу с инструкцией для Minecraft Server и устанавливаем его. Я устанавливал на Ubuntu 20.04:
# dpkg --add-architecture i386
# apt update
# apt install curl wget file tar bzip2 gzip unzip \
bsdmainutils python3 util-linux ca-certificates \
binutils bc jq tmux netcat lib32gcc1 lib32stdc++6
# adduser mcbserver
# su - mcbserver
# wget -O linuxgsm.sh https://linuxgsm.sh
# chmod +x linuxgsm.sh
# bash linuxgsm.sh mcbserver
# ./mcbserver install

Можете наблюдать за процессом установки. Когда он успешно завершится, запустите сервер:
# ./mcbserver start
Убедитесь, что он стартовал, и служба сервера слушает порт:
# netstat -tulnp | grep 19132
udp    0   0 0.0.0.0:19132   0.0.0.0:*    47190/bedrock_serve
Можно подключаться к серверу. На всякий случай проверьте firewall - настройте или отключите его.

Сайт linuxgsm.com у меня открылся только через американский vpn, хотя docs.linuxgsm.com нормально открывался с московского ip. Не знаю, с чем это связано, не разбирался.

Сайт - https://linuxgsm.com
Исходники - https://github.com/GameServerManagers/LinuxGSM

#игра
👍42👎8
Запускаете новый проект или есть потребность в масштабировании? 💪

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

300 000 бонусных рублей для запуска ИТ-инфраструктуры при подключении облака IaaS сегмента Gold 3.0.

 На что потратить 300 000 бонусных рублей? 🤔

Запускайте ИТ-системы и цифровые бизнес-сервисы
Управляйте вычислительными ресурсами
Снизьте расходы на ИТ

Знакомьтесь с полными условиями акции и оставляйте заявку ➡️https://bit.ly/3NTBRal

#реклама
👎17👍6
​​У меня было много заметок на тему бэкапа данных и ни одной за всё время существования канала на тему бэкапа настроек сетевых устройств. А тема-то важная. Настраивать какой-нибудь роутер с нуля с кучей правил firewall, qos, vpn и так далее та ещё морока. Потеря конфигурации обычно не фатальна, но очень неприятна.

Существует популярный Open Source продукт для бэкапа сетевых устройств - Oxidized. О нём рассказывали еще в 2017 году на MUM Russia (MikroTik User Meeting). Ссылка на презентацию. Как вы понимаете, Микротики он тоже бэкапит. Так что тема серьезная 😎. Список поддерживаемых устройств внушительный. Всё популярное присутствует, даже Eltex есть.

Oxidized написан на Ruby. Установка простая и типовая для Unix систем. Ставим сначала ruby, а потом через gem install всё остальное. Есть docker контейнер с примером файла docker-compose.yaml. Не буду сюда копировать, в репозитории всё описано прямо на главной. Искать не надо.

Oxidized состоит в виде службы, которая по ssh или telnet ходит на устройства и собирает конфигурации, и веб интерфейса для просмотра и управления всем этим делом. Хранить конфигурации программа умеет в том числе в GIT репозитории. Это позволяет удобно просматривать изменения между разными версиями конфигураций. Веб интерфейс очень простой (список устройств и конфигурации к ним), аутентификации нет, так что надо хотя бы за прокси ставить с basic auth.

Продукт старый и известный, так что настройка не будет представлять каких-то сложностей. В сети масса руководств по этой теме. Я знал аналог этой программы, написанный русскоязычными программистами в 2018 году - cBackup. У них была обзорная статья на хабре в то время. Программа функциональная, удобная, внешний вид хороший. Можете сами оценить на сайте. К сожалению, развития так и не получила и на текущий момент она устарела и есть проблемы с микротиками, начиная с какого-то обновления. Подключения по SSH не работают, бэкапы не делаются. Жаль, что продукт не получил развития. Я хотел его попробовать, но увидел, что обновлений нет, так что это не имеет смысла, даже если получится запустить.

А вы что используете для бэкапа сетевых устройств? Вариантов может быть масса, начиная от готовых больших систем (NOC Project) и заканчивая банальными скриптами с отправкой конфигураций на почту или заливкой на ftp.

❗️Чуть не забыл упомянуть, что Oxidized поддерживает интеграцию с известной системой мониторинга LibreNMS. С помощью этой интеграции сможете просматривать конфигурации устройств прямо в мониторинге. Подробности интеграции в руководстве LibreNMS.

Исходники - https://github.com/ytti/oxidized

#backup #network #mikrotik
👍48👎2
Коллеги, а кто как решает вопрос с централизованным получением и раздачей бесплатных сертификатов от Let's Encrypt внутри инфраструктуры? Например, у вас есть веб сервер, который принимает все HTTP запросы, а внутри инфраструктуры есть какой-нибудь почтовый сервер, которому тоже нужен сертификат. Либо это может быть внутренний сервис вообще без доступа в интернет, но ему тоже хочется дать валидный сертификат, чтобы браузеры не ругались. Да и просто удобно управлять всем этим делом из одного места.

Я обычно использую 2 разных способа.
1️⃣ Настраиваю получение сертификатов на одном сервере. Всем, кому нужны сертификаты, подключаю директорию /etc/letsencrypt по nfs. В целом, нормальный вариант, но бывают проблемы, когда инфраструктуру погасят, а потом запустят. Сервис может подняться раньше, чем загрузится виртуалка с сертификатами. Тогда будет ошибка и надо будет вручную сходить и разобраться с проблемой.
2️⃣ Конечные сервера регулярно с помощью rsync синхронизируют директорию со своим сертификатом. Тут немного больше хлопот, так как надо скрипты в cron класть и следить за ними, чтобы всё ок было.

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

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

А вы как решаете эту задачу? Она вообще для кого-то актуальна или я её сам себе придумал? Частенько приходится с этим разбираться. Сейчас сертификаты везде нужны.

#letsencrypt
👍40👎2
​​Часто возникают ситуации, когда хочется вести контроль версий конфигурационных файлов в системе Linux. Это может быть актуально не только, когда сервером пользуются несколько человек, но и для единственного администратора. Простейший способ контроля версий - создание копии файла перед редактированием.

Я предлагаю автоматизировать эту процедуру и использовать систему контроля версий git для этих целей на примере ОС Debian или Ubuntu. Для любого другого дистрибутива всё настраивается аналогично.

Устанавливаем git:
# apt install git

Создаём файл конфигурации git:
# touch ~/.gitconfig
Добавляем информацию о пользователе:
[user]
name = root
email = root@debian11-websrv

Создадим репозиторий для конфигов и сразу переименуем его, чтобы потом не путать с другими:
# cd ~ && git init && mv .git system.git

Добавим в корень системы / информацию о том, где находится репозиторий:
# echo "gitdir: /root/system.git" > /.git

Устанавливаем права доступа:
# chmod 600 ~/.gitconfig
# chmod 600 /.git
# chmod 700 /root/system.git

Настраиваем с помощью списка exclude директории, за которыми будет следить git. Данном случае это /etc. Для этого добавляем в файл ~/system.git/info/exclude пару строк:
/*
!/etc

У нас всё готово. Делаем первый commit:
# cd ~
# git add -A && git commit -m 'Создание репозитория debian11-websrv'

Добавляем в системный cron выполнение задания с коммитом каждую минуту:
* * * * * root cd / && git add -A && git commit -m "Cron commit" > /dev/null

Теперь можно что-то изменить в конфигурации, дождаться коммита и проверить изменения. Например, добавьте пользователя:
# adduser user01

Посмотрите изменения:
# git log --follow -p /etc/passwd

Я показал пример, как это может быть настроено. При желании, можно добавить и другие директории. Например, /var/spool/cron/crontabs или /usr/local/etc. Последнее было очень актуально в Freebsd, но давно уже не вижу, чтобы там что-то полезное хранилось.

Дополнительно неплохо было бы хранить информацию об установленных пакетах. Все изменения отражаются в лог файле пакетного менеджера, но добавлять в git логи не очень хорошая идея. Удобнее было бы выгружать список пакетов с какой-то периодичностью в файл в /etc/ примерно так:
# rpm -qa > /etc/packages.list
# dpkg -l > /etc/packages.list

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

#linux #git
👍86👎4
​​BookStack - open source платформа для создания документации и вики-контента.

Когда-то давно я рассказывал про готовую платформу wiki.js. Это зрелый и известный продукт. Написан, как не трудно догадаться, на JavaScript, работает под node.js. Если он вас по какой-то причине не устраивает, то предлагаю альтернативу. Речь пойдёт про похожий продукт, но написанный на PHP на базе Laravel. Данные хранит в MySQL.

Основные особенности BookStack:
простой, минималистичный интерфейс;
низкие требования к производительности железа, работает на самых минимальных VPS;
встроенная интеграция с diagrams.net для рисования схем;
полная русификация;
наглядная иерархия вида полка-книга-лист;
live-preview markdown редактор;
аутентификация на базе локальных пользователей или сервисов типа GitHub, Google и других.

BookStack это не обязательно wiki портал, но и просто информационный сайт. Подойдёт для хранения документации, инструкций и т.д. Плюс в том, что работает на базе классического web сервера LAMP. У linuxserver.io есть поддерживаемый docker образ. По ссылке есть пример docker-compose для запуска всего стека сразу.

Условно можно считать BookStack бесплатным аналогом Confluence. Он пытается решать те же задачи.

Вы сами какую wiki платформу используете?

Demo - https://demo.bookstackapp.com
Сайт - https://www.bookstackapp.com
Исходники - https://github.com/BookStackApp/BookStack

#wiki
👍51👎4
Недавно затрагивал тему централизованного управления сертификатами Lets's Encrypt. Получил в TG много советов, всем спасибо за них. В VK предложили необычный вариант - хранить серты в GIT. Идея отличная, а мне даже в голову не приходила. Ведь действительно удобно. Я пока сам ещё не пробовал, но общая концепция в голове сложилась.

1️⃣ Получаем новый сертификат, хуком его отправляем в репозиторий. Можно сразу сделать скрипт, который будет создавать готовую цепочку сертификатов в зависимости от софта, который будет использовать сертификат. Postfix и Dovecot, к примеру, хотят готовую цепочку. Думаю, удобно будет под каждый домен свою ветку держать.
2️⃣ На целевом сервере создаём локальный репозиторий и копируем туда содержимое ветки с актуальными сертификатами.
3️⃣ С помощью git fetch и сравнения $(git rev-parse HEAD) с $(git rev-parse @{upstream}) проверяем наличие новых коммитов в нужной ветке репозитория. Если есть обновление, делаем git pull и запускаем какой-то скрипт, который скопирует новый сертификат в заданное место и выполнит необходимые действия для того, чтобы софт применил новый сертификат.

Это пример последовательности действий для ручной настройки на нескольких серверах. Если у вас есть какая-то система для CI/CD, можно то же самое через неё реализовать. Сертификаты можно хранить не в GIT, а в каком-то хранилище секретов. У меня нет опыта работы с ними, так что конечную реализацию не представляю, но смысл там будет тот же.

Если придётся где-то настраивать подобное, реализую такую схему.

#letsencrypt #devops
👍59👎4
​​Рассказал на днях про популярную систему для ведения документации. На удивление, куча людей отписались, что используют DocuWIKI до сих пор. Я прекрасно знаю эту систему, активно использовал её для хранения документации. Несомненный плюс, что все заметки хранятся в текстовых файлах. Никаких баз данных и лишних прослоек для доступа к контенту. Но лично я никогда не любил писать в классическом wiki формате. Для меня это страдание.

Расскажу про ещё один подход для создания документации с помощью так называемых генераторов статического контента. Одним из популярных представителей подобного рода проектов является MkDocs. Конкретно его тема Material for MkDocs является самой популярной на github по количеству звёзд среди подобных проектов для ведения документации.

Идея там такая. Вы пишите какой-то контент в формате Markdown и сохраняете его в отдельных .md файлах. Потом берёте MkDocs, пишите для него конфиг в формате yaml, где настраиваете структуру и внешний вид сайта, и прогоняете генератор по этому контенту. На выходе получаете статический html сайт.

Основная идея такого подхода в том, что контент хранится в GIT, а потом с помощью CI после обновления репозитория генерируется сайт. Для этого используется docker контейнер с MkDocs. Можно автоматизировать создание документации, выработав определённые правила написания документации в репозиториях.

С помощью подобной системы выполнена публичная wiki RockyLinux. Там впервые и увидел Material for MkDocs. Сходил, посмотрел, что это такое и благополучно забыл. А на днях вспомнил, когда обсуждали wiki системы. Документация самой Material for MkDocs тоже выполнена на ней же. Там всё более красиво и аккуратно, нежели в wiki от Rocky. Хороший пример для оценки.

Сайт - https://squidfunk.github.io/mkdocs-material/
Исходники - https://github.com/squidfunk/mkdocs-material

#wiki #devops #docs
👍56👎5
​​Существует известное сообщество авторов, объединённых проектом linuxserver.io. Они создают общедоступные Docker контейнеры с преднастроенным софтом внутри. Они их не только создают, но и постоянно поддерживают, выпуская обновления. Полный список образов представлен на отдельной странице, либо сразу на dockerhub.

Я уже пару раз ссылался на образы этого проекта, когда рассказывал про Heimdall и BookStack. Сами эти проекты не имеют готовых Docker образов, но популярность их такова, что в сообществе есть запрос на контейнеры. Linuxserver.io создали их и поддерживают.

Я не берусь судить, насколько можно доверять этому проекту. В любом случае, я бы предпочёл использовать эти образы, вместо каких-то безымянных авторов. Как минимум, поддержка образов linuxserver оплачивается самим Docker, так как они имеют статус Sponsored OSS. Ему выгодно существование и поддержка подобного проекта.

Вот, к примеру, готовый образ недавно упоминаемой dokuwiki:
https://docs.linuxserver.io/images/docker-dokuwiki
Тут описание образа, примеры использования. В одну команду запускаем контейнер и начинаем пользоваться приложением:
docker run -d \
 --name=dokuwiki \
 -e PUID=1000 \
 -e PGID=1000 \
 -e TZ=Europe/Moscow \
 -p 80:80 \
 -v ~/docuconfig:/config \
 --restart unless-stopped \
 lscr.io/linuxserver/dokuwiki:latest
После запуска идём на https://$IP:$PORT/install.php и настраиваем wiki.

Подобная страница с документацией есть для каждого образа.

#docker
👍44👎4
​​Сейчас много людей в поиске, чем заменить Active Directory. Нужно понимать, что аналогов этого продукта просто не существует. Придётся искать какие-то приемлемые для себя альтернативы. Одну из таких условных альтернатив хочу вам показать.

Есть немецкий проект Univention Corporate Server (UCS). Это LDAP сервер на базе Samba с управлением через web интерфейс. Есть бесплатная и платная версия. Основные отличия - в бесплатной версии нет поддержки и после выхода очередного релиза, старый поддерживается только 6 месяцев, в то время как платный - 5 лет.

Основная фишка UCS - магазин приложений, которые сразу же после установки настроены на использование этого LDAP сервера. Я развернул Nextcloud, к нему для редактирования документов OnlyOffice Docs и почтовый сервер поставил, который на базе Postfix и Dovecot. Добавил в систему нового пользователя. Под ним можно сразу авторизоваться в любом установленном приложении.

Всё управление через web интерфейс. Подразумевается, что в консоль вам вообще ходить не нужно. Дистрибутив построен на базе Debian. Это сразу становится очевидно в момент установки. Для загрузки дистрибутива необходимо будет указать свой email. Туда же придёт файл с бесплатной бессрочной лицензии. Без неё невозможна установка дополнительных приложений.

Из полезных приложений, что есть в App Center (полный список) я заметил, помимо тех, что уже указал, следующие: Guacamole, Rocket.Chat, Squid, Prometheus Alertmanager, Wekan (Канбан доска и To-Do менеджер), Wordpress. Все они настроены на работу с LDAP сервером по умолчанию.

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

Сайт - https://www.univention.com/products/ucs/ucs-management-system/
Исходники - https://github.com/univention/univention-corporate-server
Demo - https://demo.univention.de

#ldap #samba #docs
👍70👎10
Предлагаю вашему вниманию некоторые изменения стандартного конфига Nginx, которые я лично выполняю. К каждому параметру сделаю небольшое пояснение.

worker_connections 8192;
Количество соединений для одного рабочего процесса. Повышать следует в зависимости от производительности сервера, но дефолтные значения я в любом случае увеличиваю.

worker_rlimit_nofile 65536;
Параметр указывает, сколько файловых дескрипторов будет использовать Nginx. На каждое соединение надо выделять по два дескриптора: один на соединение с клиентом, второй на открытие файла. Число соединений = worker_connections * worker_processes.

pcre_jit on;
Использование PCRE JIT способно существенно ускорить обработку регулярных выражений.

multi_accept on;
Позволяет рабочему процессу сразу принять все новые соединения. Иначе он их будет принимать по одному.

sendfile on; 
Параметр активирует передачу данных между файловыми дескрипторами средствами ядра ОС. Это ускоряет процесс и экономит ресурсы.

tcp_nopush on;
tcp_nodelay on;
Параметры ускоряют передачу данных HTTP запросов.

reset_timedout_connection on;
Параметр разрешает сброс соединений по таймауту.

server_tokens off;
Отключите server_tokens, чтобы nginx не показывал свою версию.

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
Отключите старые версии ssl, а можно и tls1, tls1.1. Сейчас по умолчанию поддерживаются версии tls 1.2 и 1.3. Остальные считаются устаревшими.

log_format
Я обычно добавляю дополнительные поля в стандартный формат логов. Как минимум rt=$request_time и ut=$upstream_response_time. Это позволяет мониторить время ответа бэкендов. Отклонение от стандартных логов приводит к тому, что их перестают парсить стандартные шаблоны различного софта. Так что изменяйте на свой страх и риск. Я это делаю там, где потом и шаблоны редактирую сам.

client_max_body_size 10m;
Задаёт максимально допустимый размер тела запроса клиента. Дефолтное значение в 1m часто недостаточно.

Также я в обязательном порядке меняю дефолтные таймауты, типа proxy_connect_timeout, send_timeout, client_body_timeout и т.д. Но это уже делается под конкретные сайты и ситуации, поэтому не привожу примеры этих значений. В общем случае можно оставить дефолт, а потом изменять по мере необходимости.

📌 В завершении несколько полезных ссылок на мои материалы по теме Nginx:
- Подробная установка и настройка Nginx с примерами
- Автоматическое тестирование конфигурации Nginx
- Правильный redirect 301 для SEO в Nginx
- Nginx в качестве балансировщика нагрузки
- Проксирование запросов в nginx с помощью proxy_pass
- Сборка rpm пакета nginx с дополнительными модулями

 📌 Другие полезные ссылки:
- Генерация конфигов Nginx от DigitalOcen
- SSL Configuration Generator
- Проверка конфигурации Nginx

Пост достоин того, чтобы отправиться в закладки.

#nginx
👍138👎2
Хочу поделиться с вами любопытным видео, которое привлекло моё внимание. Оно даёт возможность посмотреть на нашу профессию со стороны людей из другого мира. Видео записал системный администратор из Бостона, США.

5 Reasons to Become a System Administrator
https://www.youtube.com/watch?v=hhQlC4G1PGI

Вот 5 причин, по которым он считает профессию системного администратора хорошим вариантом для занятости:
1️⃣ Это очень прибыльная профессия. При этом он поясняет и ставит работу системного администратора в один ряд с разработчиками. Возможно в США разница действительно небольшая. У нас же между разработкой и поддержкой большая разница в зарплатах.
2️⃣ Низкий порог входа в профессию. Не надо много лет учиться, как, к примеру, на врача или научного сотрудника. Я так понимаю, он взял в пример эти профессии, потому что у них зарплаты сопоставимые. Мне трудно с этим согласиться, так как для получения хороших денег в IT придётся тоже долго учиться, либо работать для получения опыта.
3️⃣ Гибкость профессии. Системные администраторы актуальны практически для всех сфер человеческой деятельности. При этом и формат работы у них может быть очень разный. С этим трудно не согласиться.
4️⃣ Стабильность и уверенность в завтрашнем дне. Спрос на IT специалистов не падает, а только растёт. Это позволяет быть уверенным в том, что не останешься без работы, в том числе из-за остановки бизнеса вследствие каких-нибудь локдаунов или прочих катаклизмов.
5️⃣ Системное администрирование - творческая профессия. Это, кстати, верно подмечено. Я замечал, что многие программисты завидуют сисадминам или девопсам как раз из-за того, что у них много разнообразия в работе. В то время как программист может прийти на какой-то старый проект с одним стеком технологий и 5 лет просидеть на нём. У поддержи же всё время какие-то вызовы, тесты нового ПО или подходов к ведению дел. Гораздо больше разнообразия, и я с этим полностью согласен. Сам люблю свою профессию за это.

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

#разное
👍89👎2
​​Думаю, многие системные администраторы знают и используют сканер сети Nmap. Я сам им постоянно пользуюсь. Делал заметку по основным возможностям программы и писал статью с практическим советом по применению. Если не знакомы с этой программой, то советую изучить. Она регулярно используется. Ярлык всегда на рабочем столе.

Недавно узнал, что существует проект Zmap с похожими возможностями и одним важным отличием. Он в десятки и сотни раз быстрее Nmap. Я так понимаю, что когда речь идёт о сканировании всего интернета, используют именно Zmap. Разработчики обещают просканировать весь диапазон ipv4 адресов за 45 минут, если делать это через гигабитное соединение с интернетом. И за 5 минут, если через 10-ти гигабитное. И для всего этого хватит мощности обычного десктопного железа.

Zmap максимально заточен на быстродействие и судя по всему из-за этого умеет сканировать за раз только конкретный порт. То есть нельзя как у Nmap задать диапазон адресов и найти все открытые порты. Нужно конкретно указать, что ищем порт 80 и задать диапазон, не стесняясь в его размерах. Это существенно снижает область его применения. Я бы хотел получить инструмент с подобным быстродействием для поиска открытых портов конкретного хоста или списка хостов. Если кто-то может что-то посоветовать по этой теме, поделитесь информацией. Nmap очень медленно проверяет весь диапазон портов.

Если хотите быстро просканировать какую-то сеть или набор хостов на открытый порт, то имеет смысл использовать Zmap. Он есть в стандартных репах популярных дистрибутивов, так что ставится через пакетный менеджер в одну команду.
# apt install zmap
# dnf install zmap

По умолчанию он не сканирует диапазоны приватных адресов, типа 192.168.0.0/16, 10.0.0.0/8 и т.д. Так что если будете сканировать локальную сеть, закомментируйте в /etc/zmap/blacklist.conf свой диапазон. И на всякий случай при использовании ограничьте максимальную скорость сканирования примерно так:
# zmap -B 10M -p 80 10.0.0.0/16 -o LANresults.csv

Эта команда выполнит сканирование сети 10.0.0.0/16 на наличие открытого 80-го порта со скоростью 10 Mbps. Результат сохранит в файл LANresults.csv.

#network

Сайт - https://zmap.io/
Исходники - https://github.com/zmap/zmap
👍61👎3