ServerAdmin.ru
28.9K subscribers
308 photos
35 videos
13 files
2.64K links
Авторская информация о системном администрировании.

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
Жена на днях прислала юморное видео на тему поиска вещей в доме мужчинами. Для тех, кто не женат, поясню. Мужчина напрочь теряет способность находить самостоятельно вещи, когда начинает жить с женщиной. Подтверждаю, что это на самом деле так.

▶️ Как мужчины ищут вещи

Видео, казалось бы, совсем не по теме канала. Но это не совсем так. Есть две вещи, которые его связывает с тематикой IT.

1️⃣ Там ищут ноутбук. То есть уже про IT.

2️⃣ В конце видео я начал смутно вспоминать, что какие-то знакомые актёры. Как-будто я их где-то раньше видел. И точно. Это же перевод видео от коллектива Bored, у которого была серия роликов про работу магазина компьютерных комплектующих. Я пару раз делал про них заметки несколько лет назад. К сожалению, они по какой-то причине ограничили доступ к своим оригинальным видео. Не знаю, с чем связано. Ни через VPN, ни с иностранной учёткой они не открываются.

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

#юмор
​​Привет вам из начала 2010-х годов, когда ещё были популярны железные RAID контроллеры и SAS накопители со скоростью вращения 10 и 15 тыс. об/мин. У меня есть один старый сервер из тех времён с контроллером LSI MegaRAID SAS 9260-8i, с батарейкой и SAS дисками.

Последнее время от него стали прилетать уведомления о проблеме с BBU (батарейкой). Зашёл посмотреть, что там с ней. Управляется всё это хозяйство из системы с помощью родного приложения на Java.

Контроллер самостоятельно следит за своим состоянием, дисками, батарейкой. Временами батарейка перестала проходить проверку. Контроллер это замечает, отключает кэширование на запись (режим write back), включает прямую запись на диск (write throute). Сам разряжает батарейку и заряжает заново. Потом убеждается, что батарейка работает и включает обратно кэш на запись. Удобно реализовано, не требуется участие человека.

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

С появлением быстрых SSD дисков все эти контроллеры и кэши с батарейками стали неактуальны. Я предпочитаю ставить SSD диски и использовать софтовый рейд. Это проще и надёжнее. Меньше точек отказа. Хотя от кого-то периодически ещё слышу, что типа старые SAS 15k диски это хорошее решение. Да, они намного надёжнее обычных HDD дисков, но всё равно их время уже прошло. Покупать бы сейчас не стал.

А вы какой конфигурации сервера общего назначения отдадите предпочтение? Будете туда железный контроллер ставить или SAS 15k диски? В продаже они всё ещё есть. Например, Seagate Exos 15E900 15000rpm 2.5".

#железо
​​На прошлой неделе подписчик поделился со мной полезной информацией, которая может пригодиться более широкой аудитории, нежели только я. Искренне выражаю благодарность всем, кто мне пишет какую-то полезную информацию, так как желание бескорыстно (а зачастую и анонимно) помогать другим благотворно влияет и на тех, кто помогает, и на тех, кто получает. Не всё из этого я публикую, потому что что-то не формат канала, что-то не кажется мне полезным аудитории, что-то я не успеваю проверить и забываю.

Сегодня речь пойдёт об утилите dhcptest и скрипте на powershell для автоматического поиска в сети постороннего DHCP сервера с уведомлением в Telegram об IP этого сервера и его MAC адресе. Думаю, многие администраторы сталкивались с ситуацией, когда в сети появляется посторонний DHCP сервер. В зависимости от настроек сетевого оборудования, он может наделать много бед. Обычно эти беды приходят, когда сталкиваешься с этим в первый раз. А потом уже начинаешь искать информацию и думать, как от этого защититься. Я сталкивался с подобным много раз.

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

Скрипт на powershell делает следующее:
1️⃣ Скачивает утилиту, переименовывает и кладёт её рядом с собой.
2️⃣ Запускает раз в минуту dhcp тест с запросом настроек и получает IP адрес ответившего сервера.
3️⃣ Если этого сервера нет в вашем списке DHCP серверов, то пингует этот сервер, проверяя его доступность, смотрит ARP таблицу и пытается получить его MAC.
4️⃣ Отправляет IP и MAC постороннего сервера в Telegram.

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

Сам скрипт опубликован ниже в следующем сообщении.
⬇️⬇️⬇️⬇️⬇️

#network #dhcp
$AllowedDHCPServer = "ЗДЕСЬ_АЙПИШНИК_ТВОЕГО_DHCP"

#Замените URL-адрес загрузки на тот, куда вы сами загрузили файл DHCPTest. Мы загрузим этот файл только один раз.
$DownloadURL = "https://files.cy.md/dhcptest/dhcptest-0.9-win64.exe"
$DownloadLocation = "$(pwd)\DHCPTest"

$BotToken = "СЮДА_СУЙ_ТОКЕН_БОТА"
# Объявление массива с идентификаторами чатов
$ChatIDs = @("USERID1", "USERID2")
$NMinutes = 1 # Интервал времени для повторения проверки в минутах

# Функция для отправки сообщений в Telegram
function Send-TelegramMessage {
param (
[Parameter(Mandatory=$true)]
[string]$MessageText,
[Parameter(Mandatory=$true)]
[string[]]$ChatIDs
)
$TelegramAPI = "https://api.telegram.org/bot$BotToken/sendMessage"
foreach ($ChatID in $ChatIDs) {
$params = @{
chat_id = $ChatID
text = $MessageText
parse_mode = "Markdown"
}
$response = Invoke-WebRequest -Uri $TelegramAPI -Method Post -Body $params -ContentType "application/x-www-form-urlencoded"
}
}

# Бесконечный цикл для периодической проверки
while ($true) {
try {
$TestDownloadLocation = Test-Path $DownloadLocation
if (!$TestDownloadLocation) { New-Item $DownloadLocation -ItemType Directory -Force }
$TestDownloadLocationZip = Test-Path "$DownloadLocation\DHCPTest.exe"
if (!$TestDownloadLocationZip) { Invoke-WebRequest -UseBasicParsing -Uri $DownloadURL -OutFile "$($DownloadLocation)\DHCPTest.exe" }
}
catch {
$ErrorMessage = "Загрузка и извлечение DHCPTest не удались. Ошибка: $($_.Exception.Message)"
Send-TelegramMessage -MessageText $ErrorMessage -ChatIDs $ChatIDs
break # Выход из цикла в случае ошибки
}

$Tests = 0
$ListedDHCPServers = do {
& "$DownloadLocation\DHCPTest.exe" --quiet --query --print-only 54 --wait --timeout 3
$Tests++
} while ($Tests -lt 2)

$DHCPHealthMessages = @()
foreach ($ListedServer in $ListedDHCPServers) {
if ($ListedServer -ne $AllowedDHCPServer) {
# Выполнение команды ping для гарантии наличия IP в ARP-таблице
ping $ListedServer -n 1 | Out-Null
# Получение MAC-адреса из ARP-таблицы
$arpResult = [String]::Join(' ', (arp -a $ListedServer ))
$MACAddress = if ($arpResult -match "(\w{2}-\w{2}-\w{2}-\w{2}-\w{2}-\w{2})") {$matches[0]} else {"MAC адрес не найден"}

$DHCPHealthMessages += "Обнаружен неавторизованный DHCP-сервер. IP-адрес неавторизованного сервера: $ListedServer, MAC адрес: $MACAddress"
}
}

if ($DHCPHealthMessages.Count -gt 0) {
$DHCPHealthMessage = $DHCPHealthMessages -join "`n"
Send-TelegramMessage -MessageText $DHCPHealthMessage -ChatIDs $ChatIDs
}

Start-Sleep -Seconds ($NMinutes * 60) # Пауза перед следующей итерацией цикла
}


#network #dhcp
​​Для мониторинга СУБД PostgreSQL существует много вариантов настройки. Собственно, как и для всего остального. Тема мониторинга очень хорошо развита в IT. Есть из чего выбирать, чему отдать предпочтение.

Одним из наиболее простых и быстрых для внедрения инструментов именно для psql является Pgwatch2. Это известная штука, для которой много инструкций и руководств. Есть обзоры на youtube. Отдельно отмечу, что если вы используете систему мониторинга Zabbix, то искать что-то ещё, большого смысла нет. У неё есть хороший встроенный шаблон, который собирает много различных метрик. В общем случае этого мониторинга будет за глаза.

Если вы не знаете Zabbix, у вас его нет и ставить не планируете, то закрыть вопрос с мониторингом PostgreSQL можно с помощью Pgwatch2. Этот продукт состоит из следующих компонентов:

Хранилище метрик. В его качестве может выступать сама PostgreSQL, в том числе с расширением TimescaleDB. Также метрики можно хранить в InfluxDB. Либо их можно отправить в Prometheus, а он положит куда-то у себя.
Сборщик метрик, написанный на GO.
Веб интерфейс для управления, написанный на Python
Grafana для просмотра дашбордов с метриками.

Всё это есть в готовом виде, упакованное в Docker. Если использовать для хранения метрик PostgreSQL, достаточно создать базу для хранения и пользователя для доступа к метрикам. Далее указать эти данные и запустить контейнеры. Процесс подробно описан в документации.

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

Исходники / Документация / Demo / Видеобозор (на русском)

#postgresql #monitoring
Заметка немного не по теме канала, но мне она показалась интересной, поэтому решил поделиться. В том числе для расширения кругозора. На днях посмотрел видео:

▶️ Hacking - O.MG Cable. 😈 Опасный кабель

Забайтился на заголовок, добавил ролик к просмотру и в итоге посмотрел. Речь там идёт про обычный usb провод с type-c на конце. В провод зашит небольшой чип c wifi модулем. Через этот чип и модуль можно эмулировать нажатия клавиш на компе и выполнять команды.

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

А оказывается, можно купить вот такой простой проводочек за 100 баксов, а на aliexpress наверное и дешевле, и прикалываться над коллегами в офисе. На видео наглядно на конкретных примерах показано, как это работает. Очевидно, что всё то же самое можно делать и более скрытно.

Первое, что мне пришло в голову, когда увидел провод – это отличный подарок для какого-нибудь айтишника. Необычно и функционально. Не знаю только, насколько реально его купить в РФ. Сам автор канала получил провод на работе.

#security #железо
​​Если вам необходимо кому-то передать свой bash скрипт, но при этом вы не хотите, чтобы этот кто-то видел его содержимое, то есть простое решение. С помощью утилиты shc его можно транслировать в язык C и скомпилировать. На выходе будет обычный бинарник, который будет успешно работать практически на любой ОС Linux.

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

Shc живёт в базовых репозиториях Debian или Ubuntu, возможно и в других дистрибутивах. Для сборки также понадобится пакет gcc.

# apt install shc gcc

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

#!/bin/bash
v=$1
echo "Simple BASH script. Entered VARIABLE: $v"

Запускаем:

# ./script.sh 111
Simple BASH script. Entered VARIABLE: 111

Теперь компилируем его в бинарник:

# shc -f -r script.sh

На выходе получаем два файла:
- script.sh.x - бинарник
- script.sh.x.c - исходный код

Запускаем бинарь:

# ./script.sh.x 123
Simple BASH script. Entered VARIABLE: 123

Отработал точно так же, как и bash скрипт. С помощью shc можно указать дату, после которой скрипт запускаться не будет. Выглядит это примерно так:

# shc -e 31/12/2023 -m "Извини, но ты опоздал!" -f -r script.sh
# ./script.sh.x
./script.sh.x: has expired!
Извини, но ты опоздал!

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

Быстро поискал и нашёл готовое решение по расшифровке таких файлов:
https://github.com/yanncam/UnSHc
Так что имейте ввиду, что это в основном защита от дурака.

#bash #script
Сколько лет использую OpenVPN, а только недавно случайно узнал, что он умеет в маршрутах использовать не только ip адреса, но и fqdn, то есть доменные имена. Для этого есть параметр allow-pull-fqdn.

Увидел упоминание этого параметра случайно. Решил сразу попробовать, как он работает. И так, и сяк его на сервере применял, не работает. Оказалось, что это параметр клиента и автоматически передать его через push нельзя. То есть надо явно в конфиг клиента прописать:

allow-pull-fqdn

И после этого ему можно пушить маршруты с сервера в таком виде:

push "route whoer.net 255.255.255.255"

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

Для тех, кто не знаком с OpenVPN, поясню подробнее, что это такое. Вы можете на сервере в настройках клиента, каждому в отдельности настраивать маршруты, по которым он будет ходить через vpn сервер. Это очень удобная возможность, так как не надо менять конфигурацию клиента. Всё управление маршрутами происходит централизованно на сервере. А с помощью описанного параметра, вы любому клиенту можете указать, что на такой-то сайт ходи через vpn сервер. Самому клиенту при этом ничего настраивать не надо. Он просто переподключится и получит обновлённые маршруты. У WireGuard такой возможности нет. Ему надо каждый раз конфиг обновлять, когда вносятся изменения в маршрутизацию.

#openvpn
​​Я уже много раз упоминал про использование простейшего http сервера на базе python:

# python3 -m http.server 8000

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

Мне понадобилось для проверки одного приложения запустить https сервер, так как по http оно не работает. Было лень настраивать для этого Nginx. Подумал, что наверное его так же можно быстро поднять с помощью python. Быстро нашёл решение.

Генерируем самоподписный ключ и сертификат в один файл:

# openssl req -new -x509 -keyout localhost.pem -out localhost.pem -days 365 -nodes

Создаём файл webserver.py следующего содержания:

import http.server, ssl

server_address = ('172.20.0.210', 8000)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,server_side=True,certfile='localhost.pem',ssl_version=ssl.PROTOCOL_TLSv1_2)
httpd.serve_forever()

Запускаем веб сервер:

# python3 webserver.py

Идём по адресу https://172.20.0.210:8000 и видим содержимое директории или какой-то сайт, если в ней лежит index.html.

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

#webserver #python
​​Расскажу про необычный, но на мой взгляд полезный сервис. С его помощью можно закрыть паролем переход по какому-то url, который по каким-то причинам нельзя или не хочется светить в публичном пространстве. Речь пойдёт про простой open source проект link-lock.

Link-lock шифрует сам url, используя при этом возможности браузера. На сервере ничего не хранится. Расшифровка тоже происходит в браузере клиента. После расшифровки урла, происходит редирект на закрытую ссылку.

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

https://jstrieb.github.io/link-lock/

Он представляет из себя статичный сайт с javascript, так что вы можете поднять его у себя. Достаточно склонировать его к себе и положить в директорию с веб сервером. Единственный момент - он все ссылки создаёт через домен автора jstrieb.github.io. Чтобы использовать свой, просто замените везде в исходниках это имя на своё. Я это проделал, всё получилось.

Подобный сервис может позволить хранить список ссылок в публичных местах или компьютерах, доступ к которым невозможен без знания пароля. Параноики могут шифровать свои ссылки в каких-то облачных сервисах типа evernote или notion. Можно по почте отправлять какие-то ссылки, а пароль передавать другим путём. Таким образом в почте не будет отсвечивать эта ссылка. Например, так можно передавать ссылку на загрузку конфигурации VPN, не светя в переписки адрес веб сервера, на котором живёт веб интерфейс.

Исходники

#security
​​Вчера заметка про простенький http сервер на python породила интересное обсуждение на тему передачи файлов. Конечно, способов существует уйма, и каждый использует то, что ему привычнее, удобнее, быстрее.

Лично у меня прижились следующие способы передачи.

🟢 Если надо перекинуть один файл между серверами, я использую scp:
# scp -P 22777 user@10.1.4.4:/mnt/data/BackUp/onlyoffice.tar.gz /backup
Сразу привёл пример с нестандартным портом, там как тут используется заглавная -P. Я долго не мог запомнить это, используя маленькую -p, как в ssh.

🟢 Если файлов много, использую rsync:
# rsync -avz -e "ssh -p 1234 -i /root/.ssh/id_rsa" user@10.1.4.22:/data/mail /data
Тоже такой универсальный пример, где сразу и порт, и ключ указан, если аутентификация не по паролю.

🟢 А вот если надо скопировать что-то разово на мой рабочий ноут или какой-то виндовый комп, то я запускаю веб сервер на python и просто скачиваю. Для текстовых логов актуально, чтобы сразу забрать все, что нужны:
# cd /var/log
# python3 -m http.server 8000

🔴 А вот простой трюк, когда надо перекинуть файл с одного сервера на другой, но при этом подключение между серверами не настроено, но я со своего ноута или jump сервера могу подключиться к обоим. Тогда можно сделать вот так:
# ssh user01@10.1.4.4 'cat /home/user01/file.tar.gz' | ssh user02@10.1.5.10 'cat > /home/user02/file.tar.gz'

#bash
▶️ Есть довольно известный канал на youtube - TheNafig, который выпускает юмористические переозвучки популярных фильмов. Получается неплохо и подтверждение тому миллионные просмотры роликов. Есть в том числе и IT тематика, причём в большом количестве, что наводит на мысли о том, что автор сам айтишник или около того.

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

🔥 Техподдержка с Уолл-стрит

🟡 Если бы Гарри Поттер был программистом

🟢 Ты ж программист

🔴 Чем опасен интернет

Пираты компьютерных морей

🟣 Бойцовский компьютерный клуб

🔵 Жизнь без компьютера

🟠Терминатор и компьютерные игры

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

#юмор
​​Для тех, кто всё ещё ищет себя в IT или планирует перепрофилироваться в какое-то смежное направление, рекомендую обратить внимание на курс по нейросетям. Курс полностью бесплатный. Его автор – Созыкин Андрей. Известен он тем, что записал хороший курс по сетям, на который много положительных отзывов.

Я изучал его сайт и заметил курс Программирование нейросетей на Python. Если бы я сейчас выбирал направление, куда пойти, то скорее всего выбрал бы что-то связанное с AI. Во-первых, мне кажется, это очень интересным. Во-вторых, реально востребованным. В-третьих, это тоже IT, связанное в программированием и немного эксплуатацией. С админской базой заходить будет проще, чем с самого нуля. То есть если сисадмину захочется перепрофилироваться в интеллектуальный анализ данных, то для него это вполне реально. Особенно если он уже знает Python. Но даже если не знает, освоить его не трудно.

Курс объёмный, структурированный, с лекциями и практическими работами. Оформлен как полноценный университетский курс, что не удивительно, так как Андрей преподаёт в Московском физико-техническом институте.

У Андрея есть YouTube канал, где он недавно озвучил свои планы по его развитию на 2024 год. Он планирует:
Обновить курс по компьютерным сетям.
Сделать курс по DevOps.
Расширить свой небольшой курс по SQL.
Так что подписывайтесь.

Если кто-то из подписчиков вдруг занимается нейросетями, расскажите, каково это. Легко, сложно, интересно или нет? Как пришли к этому, где учились, что можете порекомендовать?

#обучение
​​У известного онлайн редактора документов ONLYOFFICE Docs на днях случилось крупное обновление до версии 8.0. Я люблю этот продукт и активно использую как сам, так и ставлю для других людей. Его особенность в том, что бесплатная версия позволяет работать одновременно над 20-ю документами онлайн. Это комфортное ограничение, которое позволяет использовать продукт небольшим командам, где людей может быть сильно больше 20-ти. Ограничение только на онлайн редактирование. Если его превысить, документы будут открываться только на чтение. Онлайн документы Яндекса работают на этом же движке.

Посмотрел ролик про новую версию. Отметил следующие нововведения:

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

Если хотите сами посмотреть нововведения этой версии, то вот видео от разработчиков:

▶️ Introducing ONLYOFFICE Docs 8.0

В рассылке с обновлением авторы продукта предложили получить community version с сайта Univention App Center. Не знаю, с чем это связано. Возможно какое-то сотрудничество организовали. Этот app center представляет собой магазин приложений для другого продукта - Univention Corporate Server (UCS), про который я ранее писал отдельно. На странице Univention App Center Catalog также можно сразу загрузить образы виртуальных машин, где ONLYOFFICE Docs интегрированы в Nextcloud или ownCloud. Я не понял, как все эти продукты между собой связаны и почему они все оказались на сайте UCS.

Сам я всегда использовал этот редактор документов в составе бесплатной версии ONLYOFFICE Workspace Community, который проще всего установить через Docker. Для этого есть готовый скрипт, который всё делает за вас:

# wget https://download.onlyoffice.com/install/workspace-install.sh
# bash workspace-install.sh

На вопрос установки через Docker ответьте утвердительно, а на запрос установки почтового сервера ответьте отказом. В общем случае не рекомендую ставить почтовый сервер в составе Workspace, так как в этом нет большого смысла. Лучше поднять его отдельно или использовать внешний сервер. А в Workspace можно подключать ящики по imap и отправлять по smtp. Там полноценный веб клиент есть. Но можете и встроенный попробовать, если сильно хочется и лень заморачиваться с отдельным сервером. Будет отдельный контейнер с postfix.

После установки идёте по IP адресу сервера и выполняете начальную настройку. Если в процессе тестирования поймёте, что продукт вам подходит, тогда уже можно более детально разобраться в установке: поменять все дефолтные учётки в скриптах, вынести отдельные директории на нужные диски и т.д. Также можно вручную установить через Docker Compose, аккуратно настроив все переменные.

❗️Продукт довольно жирный, так что устанавливать рекомендую на виртуалку с 4 vCPU и 8 Gb памяти. Установка очень простая. Буквально две команды, что я привёл выше, и можно идти, пользоваться. Никаких дополнительных настроек делать не надо, чтобы всё заработало.

ONLYOFFICE Workspace очень приятный продукт, в котором реализованы множество интеграций. Зайдите в раздел Настройки ⇨ Интеграция и оцените сами. Можно подключить облако Selectel, вход по учётке VK или Яндекс, уведомления в Telegram и т.д. Также загляните в раздел Настройки ⇨ Панель управления и оцените возможности. Там можно настроить https, бэкап и восстановление, брендирование, поиск, ldap, sso и многое другое.

Отдельно отмечу, что у этих же авторов есть полностью бесплатные Desktop и Mobile приложения для работы с офисными документами. Туда тоже все эти обновления приехали, так как они по сути обёртки над веб сервисом, написанном на javascript. Благодаря этому, редакторы доступны под все популярные ОС.

#onlyoffice #docs
​​Яндекс.Диск – одно из самых дешёвых файловых хранилищ. При этом с хорошей скоростью. У него есть полнофункциональный Linux клиент, который умеет работать только в консоли. Его без проблем можно установить на сервер без gui и складывать туда бэкапы.

Установить его просто, так как есть репозиторий под это дело:

# echo "deb http://repo.yandex.ru/yandex-disk/deb/ stable main" | tee -a /etc/apt/sources.list.d/yandex-disk.list > /dev/null
# wget http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG -O- | apt-key add -
# apt update && apt install yandex-disk

После этого запускаете:

# yandex-disk setup

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

При работе таким образом важно понимать нюансы. Нельзя бэкапы держать только на Яндекс.Диске. Если у него будет сбой и повредятся или пропадут файлы, то и у вас они пропадут, так как синхронизация двусторонняя. Я лично с таким сталкивался. Так что это в первую очередь холодное хранение одной из копий. Нельзя полагаться только на неё. И хотя фактически данные хранятся в двух местах – у вас на диске и в облаке. Потеряете и там, и тут, если не предпримете отдельных действий.

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

Я не раз видел отзывы, что у Яндекс.Диска плохая скорость. Вот конкретно в Москве никогда такого не наблюдал. Он канал до 100 мегабит спокойно утилизирует весь. Я им пользуюсь постоянно, проверял не единожды. Так что могу смело его рекомендовать с поправкой на то, что данные там могут быть утеряны. Ну а где этого не может случиться? Везде можно потерять, поэтому храните несколько копий.

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

#backup
За всю мою трудовую деятельность на поприще администрирования серверов Linux мне не приходилось сбрасывать пароль системного root. От mysql серверов приходилось и не раз, а вот системный не было нужды. Всегда доставались сервера с известными учётками, а сам я их не забывал никогда.

Решил посмотреть как это делается и вам рассказать. Это типовая задача для собеседований, либо для базовой сертификации Redhat, типа RHCE и RHCSA. Если не ошибаюсь, какая-то из этих сертификаций начинается с того, что вам надо сбросить пароль root. Где-то слышал об этом, но могу ошибаться, так как сам эти экзамены не сдавал.

Задача оказалась простейшая. Я даже не ожидал, что настолько. Правда, есть нюансы. В общем случае, вам нужно включить машину, дождаться загрузочного меню GRUB и нажать латинскую e. Попадёте в окно с настройкой параметров загрузки ядра. Ищите строку, которая начинается с Linux, и в самый конец дописываете: rw init=/bin/bash. Дальше жмёте ctrl+x или F10 и начинается стандартная загрузка. В конце вы сразу же окажитесь в командной строке под пользователем root без ввода какого-либо пароля. Теперь его можно сбросить командой passwd.

Всё реально просто, в инете масса инструкций. Но, к примеру, с Hyper-V у меня не получилось провернуть такой трюк. Не знаю по какой причине, но с указанной настройкой ядра система загружается, но потом вообще не реагирует на нажатия клавиатуры. Наглухо повисает управление. И так, и сяк пробовал, ничего не получилось. Остаётся только один путь - загружаться с какого-то livecd, монтировать корень системы и сбрасывать пароль там. При этом с Proxmox таких проблем не возникло.

В принципе, запоминать всё это не имеет большого смысла, так как гуглится за 5 минут. Достаточно просто знать, что для сброса пароля root необходимо:
1️⃣ Иметь прямой доступ к консоли сервера.
2️⃣ Изменить сценарий загрузки ядра, добавив туда прямой запуск командной оболочки через параметр init.
3️⃣ Загрузиться с изменённым init и штатно задать пароль root.

А что вообще в итоге происходит? Что означает этот init? В unix-подобных системах init является первым запускаемым процессом, который будет родителем всех остальных процессов. Он обычно живёт в /sbin/init. В современных системах это ссылка на systemd, так как именно она управляет загрузкой системы. С помощью параметра ядра init мы заменяем системный init, который загружается при стандартном запуске системы, на оболочку bash. Ну и получаем её загрузку самой первой. Это если на пальцах, как я это понимаю. В документацию специально не углублялся.

Для форков RHEL инструкция будет немного другая. Там команда ядра, которую надо добавить будет не rw init=/bin/bash, а rw rd.break enforcing=0
. Ну а смысл тот же самый.

В Windows процедура сброса пароля администратора более замороченная.

#linux
​​Для WireGuard существует большое количество простых панелей управления, типа wg-easy (мне, кстати, нравится, я пользуюсь), либо каких-то более масштабных готовых продуктов с WG внутри. Но насколько я знаю, мало кто из них поддерживает аутентификацию через LDAP.

Для решения этой задачи существует WireGuard Portal. Я не раз видел положительные отзывы о нём, в том числе в комментариях к своим заметкам. Это полностью бесплатный, open source проект. Его ещё с какого-то времени Docker начал спонсировать.

WG портал легко устанавливается и настраивается. Это веб интерфейс для управления пользователями VPN. Особенность его в том, что он поддерживает хранение пользователей в SQLite, MySQL, MsSQL, Postgres и аутентификацию через OAuth или LDAP (Active Directory и OpenLDAP). Для бесплатного продукта это хороший набор возможностей. Обычно всё, что связано с LDAP, относится к коммерческим версиям.

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

1️⃣ WG Portal использует текущую установку WireGuard в системе, сам не ставит. Так что предварительно установите WG вручную. А если он уже установлен, то забэкапьте на всякий случай свои настройки в /etc/wireguard, если она вам нужны. Портал будет их менять в процессе управления.
2️⃣ Версия v2 пока в разработке. Используйте stable v1.
3️⃣ По умолчанию, если не будет отдельно настроено хранение пользователей, они будут храниться в .data/sqlite.db, откуда вы запустите compose.
4️⃣ Пример композа и конфигурации можно посмотреть на dockerhub или в документации. Не забудьте v2 поменять на v1. Почему-то все примеры с v2, хотя это ветка для разработки.

В целом, каких-то особых сложностей в установке и настройке нет. Ниже ссылка на видео, где подробно описан весь процесс, в том числе с LDAP.

Сайт / Исходники / Видеоинструкция

#vpn #wireguard
Решил немного подбить тему по поводу бесплатных open source решений для удалённого управления компами, когда сервер можно развернуть у себя. Я когда-то давно разворачивал и пробовал всё, что было более менее известное. С тех пор осталась статья: Топ 10 бесплатных программ для удалённого доступа. Список продуктов там актуален, но некоторые сильно изменились.

🟢 Например, мне очень понравился MeshCentral. Я его разворачивал и внедрял в одной компании. Удобный сервис с управлением через веб интерфейс. Имеет интеграцию с системой мониторинга и управления компами Tactical RMM. Некоторое время назад видел информацию, что якобы разработчик MeshCentral подзабил на развитие проекта, потому что утратил интерес. Зашёл в репозиторий и не заметил этого. Там коммиты почти каждый день и релизы регулярно выкатываются. Если у кого-то есть информация по этому поводу, поделитесь.

🟢 Другой популярный продукт с хорошими возможностями и отзывами - Aspia. Когда я его пробовал, 2-я версия только вышла, ещё не было документации. Сейчас это исправлено, документация есть. Отзывы на этот продукт видел исключительно положительные. У него возможности сопоставимы с некоторыми платными решениями: управление пользователями и правами, адресная книга, свой роутер/релей, запись сессий и т.д.

🟢 Ещё один функциональный и бесплатный сервис - Rustdesk. У него какое-то невероятное количество звёзд на гитхабе (~60k). Не знаю, за что конкретно именно его так любят пользователи. У него очень простая установка своего сервера, так как он упакован в Docker. Можно быстро запустить и использовать для подключения клиентов. Возможности плюс-минус как у всех, но есть некоторые особенности. Например, умеет открывать tcp туннели, прокидывая открытые порты от клиента, поддерживает аппаратные кодеки H264/H265. Сам сервис живёт за счёт облачных услуг, что обуславливает хорошую поддержку и развитие.

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

#remote
​​Если вам нужно продебажить какой-то контейнер, в котором нет никаких инструментов для диагностики (а это почти всегда так), то для этого можно воспользоваться специально собранным для этих целей контейнером - Network-Multitool. Его ещё любят в кубернетисе запускать для отладки. Известная штука.

Работает он примерно так. Запускаем контейнер, внутри которого ничего нет, кроме nginx:

# docker run --name nginx -d -p 8080:80 nginx
# docker exec -it nginx bash
# ps axf
bash: ps: command not found

Подключаем к нему network-multitool:

# docker run --rm -it \
--network=container:nginx \
--pid container:nginx \
wbitt/network-multitool:alpine-extra bash

# ps axf
  PID TTY   STAT  TIME COMMAND
   47 pts/0  Ss   0:00 bash
   60 pts/0  R+   0:00 \_ ps axf
   1 ?    Ss   0:00 nginx: master process nginx -g daemon off;
   29 ?    S   0:00 nginx: worker process
   31 ?    S   0:00 nginx: worker process
   30 ?    S   0:00 nginx: worker process
   32 ?    S   0:00 nginx: worker process

Дальше всё остальное можно запускать: ping, dig, tcpdump и т.д.

Я тут выбрал самую жирную сборку alpine-extra, где максимальный набор инструментов, в том числе tshark, ApacheBench, mysql & postgresql client, git и т.д. Если всё это не надо, то используйте alpine-minimal. Описание сборок в репозитории.

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

Кстати, с помощью network-multitool можно и хост дебажить, если не хочется его засорять различными утилитами. Запускаем его в сети хоста и пользуемся:

# docker run --rm -it --network=host wbitt/network-multitool:alpine-extra bash
# tcpdump

На хост ничего ставить не надо. Полезная штука, берите на вооружение.

#docker #devops
Хочу привлечь ваше внимание к моей старой публикации, к которой я сам постоянно обращаюсь. Это заметка про анализ дисковой активности в Linux. Вчера в очередной раз к ней обращался, поэтому решил и вам напомнить.

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

Зашёл на виртуалку, сразу увидел через htop, что нагрузку даёт samba. Через iftop увидел, что активно идёт трафик с указанной виртуалки. Захотелось узнать, что конкретно пишут. Тут я сходу не вспомнил утилиту, поэтому полез в указанную заметку. Что конкретно в данный момент пишется на диск смотрю командой:

# fatrace -f W
smbd(20632): W /data/1c-bases/БП обновление 2024 ТЕСТ/1Cv8.1CD

Там оказались какие-то выгрузки 1С. Сразу позвонил человеку, который отвечает за эти дела. Он подтвердил, что да, всё по плану.

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

В общем, эти утилиты по анализу дисковой активности прям топ. Сильно упрощают задачу анализа работы сервера. Перечислю их тут списком:

- btrace
- iostat
- iotop
- fatrace
- strace
- lsof
- iosnoop
- biosnoop

Ну а подробности с примерами тут.

#perfomance