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

Сайт: desoft.ru
Автор: @y_demin
Download Telegram
Channel created
🛠 DeSoft.ru — авторский взгляд на технологии, разработку и автоматизацию.
Проекты, инструменты, подходы и практики для инженеров, админов и энтузиастов.

🧩 Темы
🧰 Подборки сервисов и утилит
⚙️ Proxmox, Docker, Linux
🤖 AI для кодинга и DevOps
💼 Реальные продукты от идеи до пилота

📚 Навигация
#linux
#linuxthursday
#terminal
#api
#tools
#opensource
#selfhosted
#ai
#n8n
#vibecoding
#db
#vpn
#backup
#security
#docker
#proxmox
#шпаргалка
#полезное
#проекты
#продукт

🚀 DeSoft.ru — технологии, которые реально работают.

🌏 Сайт | 💙 ВК | 💬 TG | 📲 МАКС
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1👏1
Для работы в терминале уже долгое время использую мультиплексор Tmux. Ставлю его практически на всех серверах, с которыми приходится сталкиваться. Основная причина - это конечно продолжение работы сессий даже при отключении / разрыве ssh соединения - переподключились, вернулись в сессию, а все запущенные процессы как работали, так и работают. Сам инструмент во многом удобнее аналогов (например, Screen) и оброс обширной функциональностью за время своего существования.

📌 Установка (Debian / Ubuntu)
sudo apt install tmux

Установка на другие системы - tmux-wiki-installing

📌 Шпаргалка по основным командам и горячим клавишам
# создание новой сессии с именем по умолчанию (порядковый номер)
tmux

# создание новой сессии с именем mysession
tmux new -s mysession

# подключиться к последней созданной сессии
tmux attach

# подключиться к сессии mysession
tmux attach -t mysession

# отключиться от сессии
tmux detach

# список сессий
tmux ls

# завершить сессию mysession
tmux kill-session -t mysession

# завершить все сессии
tmux kill-server

# посмотреть полный список команд
tmux list-commands


# префикс
Ctrl + b | префикс, с которого начинаются все команды

# сессии
Ctrl + b d | отключиться от сессии
Ctrl + b s | выбрать сессию

# окна
Ctrl + b c | создать новое окно
Ctrl + b w | посмотреть список окон
Ctrl + b n | переключиться на след окно
Ctrl + b p | переключиться на пред окно
Ctrl + b 0..9 | переключиться на окно по номеру
Ctrl + b x | закрыть окно (требуется подтверждение)

# панели
Ctrl + b " | разделить окно на две панели горизонтально
Ctrl + b % | разделить окно на две панели вертикально
Ctrl + b Arrow key | переключиться между панелями
Ctrl + b + Arrow key | изменить размеры панели


🔹Функциональность Tmux расширяется с помощью плагинов. Для установки плагинов можно (и рекомендуется) использовать Tmux Plugin Manager.

🔹Список доступных плагинов - tmux-plugins-list

#linux #terminal #tmux #шпаргалка
👍3
На одном из проектов для согласования работы нескольких сервисов необходимо было обмениваться сообщениями, подписанными алгоритмом ГОСТ 34.10-2012.

☑️ Формирование сообщений и их подпись производим на сервере на базе Debian 11.
☑️ Для подписи сообщений используем openssl с поддержкой алгоритмов ГОСТ.

➡️ Установка

# ставим / обновляем криптографическую библиотеку
sudo apt install openssl

# добавляем поддержку алгоритмов шифрования ГОСТ
sudo apt install libengine-gost-openssl1.1


➡️ Настройка

Ищем установленную ранее библиотеку поддержки ГОСТ
# find / -name gost.so
/usr/lib/x86_64-linux-gnu/engines-1.1/gost.so


Идем в конфигурационный файл openssl (/etc/ssl/openssl.cnf)
# в начале файла находим и меняем конфигурацию,
# которую будет использовать openssl
openssl_conf = openssl_def


# в конец файла добавляем следующие секции
# (в dynamic_path указываем путь до найденной ранее библиотеки gost.so)
[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/gost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet


➡️ Проверка

Проверяем поддержку установленных алгоритмов
# openssl ciphers | tr ':' '\n' | grep GOST

GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89


Проверяем подключенный движок gost
# openssl engine gost -c -t

(gost) Reference implementation of GOST engine
[gost89, gost89-cnt, gost89-cnt-12, gost89-cbc, grasshopper-ecb, grasshopper-cbc, grasshopper-cfb, grasshopper-ofb, grasshopper-ctr, md_gost94, gost-mac, md_gost12_256, md_gost12_512, gost-mac-12, gost2001, gost-mac, gost2012_256, gost2012_512, gost-mac-12]
[ available ]


Подписываем документ с использованием закрытого ключа key.pem
openssl dgst -sign key.pem -engine gost test.txt | base64 | tr -d "\n"


#linux #openssl #gost
👍2
В прошлом году для домашнего использования обзавелся NAS от TerraMaster, модель F4-423 на 4 диска. Задачи для него типовые - медиасервер, файлообменник, бэкапы, с чем заявленные характеристики справляются без каких-либо проблем. Смотрел разные обзоры, тесты, эксперименты с установкой операционных систем, отличных от родной ToS (например, XPEnology), но без высокой нагрузки, без специфических задач нужды особой в таких манипуляциях не испытал за время использования. Не буду долго расписывать особенности самого устройства, операционной системы и прочее, т.к. суть поста не в этом.

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

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

⁉️ Казалось бы, далее следуют долгие изыскания на тему несанкционированного доступа к NAS или к приложению, однако, далеко ходить не пришлось. В логах qBittorrent зарегистрировались десятки успешных входов с внешних адресов без какой-либо попытки перебора пароля. Пароль от WebUI qBittorrent я пустым не оставлял, и по умолчанию тоже не оставлял, да и NAS крутится только в локальной сети.

‼️ Помониторив форумы, issues в github репе qBittorrent, нашел занятную информацию о некой дыре в безопасности, которая затронула не только qBittorrent, но и другие популярные клиенты, например, Transmission.

◽️https://github.com/qbittorrent/qBittorrent/issues/16529
◽️https://github.com/transmission/transmission/issues/2653
◽️https://community.synology.com/enu/forum/1/post/151239
◽️https://forum.qbittorrent.org/viewtopic.php?t=9643

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

Чистим запуски внешних программ
Меняем пароль доступа
Меняем порт веб-интерфейса
Отключаем пропуск аутентификации для localhost и списка разрешенных сетей
Отключаем использование проброса портов через маршрутизатор

#nas #tos #qbittorrent
👍2
Существует множество виртуальных досок для рисования схем, макетов, прототипов и т.д. Одна из них - Excalidraw с открытым исходным кодом. Сам по себе инструмент не обладает какими-то особыми конкурентными преимуществами по сравнению с аналогами, однако, для тех, кто работает в VS Code, есть одноименное расширение, предоставляющее возможность быстрого и удобного рисования прямо в редакторе.

Устанавливаем расширение для VS Code

Создаем файл с расширением .excalidraw (.excalidraw.json, .excalidraw.svg, .excalidraw.png) и сразу попадаем в рабочую область для рисования.

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

📌 Стоит отметить простоту и скорость, с которой можно тут же, среди рабочего пространства, добавить нарисованную от руки схему в виде изображения или привязать ее к документу с описанием в markdown разметке (например, так ![alt text](myscheme.excalidraw.png) ). Редактируем схему, в md все также моментально подхватывается.

#vscode #tools #opensource
👍3
Для объединения распределенных устройств в одну виртуальную сеть, будь то организация рабочего пространства связыванием нескольких удаленных машин или целых подразделений компании, или обычный доступ к домашним ресурсам извне как к локальным, существует небезызвестное решение с открытым исходным кодом - ZeroTier.

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

🔹 Кратко опишу общий подход, детальную же инструкцию по установке и настройке можно посмотреть, например, здесь.

Контроллер
▶️ Разработчик ZeroTier предоставляет ограниченный бесплатный доступ к своему сетевому контроллеру (для экспериментов подойдет, но не более, все-таки сервис то зарубежный).
▶️ Разворачиваем контроллер на своем сервере самостоятельно согласно документации и поднимаем веб-интерфейс.
▶️ Приобретаем недорогой VPS с преднастроенным образом ZeroTier, в состав которого входит и контроллер и веб-интерфейс к нему (нашел такой только у RuVDS, может еще у кого появился за последнее время).

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

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

#vpn #zerotier
👍2
В продолжение темы про Tmux рассмотрим несколько полезных плагинов.

📌 Для начала установим менеджер плагинов Tmux Plugin Manager

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm


▫️ В конфигурационный файл tmux (~/.tmux.conf) добавим
# список плагинов
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# инициализация Tmux Plugin Manager (оставляем внизу конфигурационного файла)
run '~/.tmux/plugins/tpm/tpm'


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

▫️ Подхватим изменения
tmux source ~/.tmux.conf


📌 Плагин для сохранения / восстановления сессий Tmux Resurrect

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

▫️ Добавляем плагин в ~/tmux.conf
set -g @plugin 'tmux-plugins/tmux-resurrect'


▫️ Сохраняем изменения. Для установки и включения плагина выполняем команду Ctrl+b I - tmux plugin manager установит плагин и обновит окружение tmux автоматически. Плагин готов к применению.

❗️ Как применять

▫️ Подключаемся или создаем новую сессию
tmux new -s session1


▫️ Настраиваем панели, окна, запускаем все требуемые приложения и так далее.

▫️ Комбинацией клавиш Ctrl + b Ctrl + s сохраняем сессию (в status bar tmux выпадет уведомление об успешном сохранении сессии)

▫️ Уничтожаем сессию или перезагружаемся
tmux kill-session -t session1


▫️ Открываем tmux заново

▫️ Восстанавливаем сессию комбинацией клавиш Ctrl + b Ctrl + r


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

Добавляем в ~/tmux.conf следующее правило
set -g @resurrect-processes 'mc'


Таким образом, при восстановлении сессии через tmux-resurrect mc будет перезапущен (правда вкладки в mc не восстановятся, но уже что-то)

#linux #terminal #tmux
👍4
Собрал в одну шпаргалку информацию по работе с дисками в Linux на примере Ubuntu / Debian. Заметка будет пополняется, так что ссылку на нее на сайте прикладываю.

🔹 Информация о подключенных дисках, разделах, точках монтирования
lsblk -f
fdisk -l
parted -l


🔹 Создание раздела на диске /dev/sdb
sudo fdisk /dev/sdb


В интерактивном режиме выполняем команды fdisk
# новый раздел
Command (m for help): n

# тип раздела
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p

# номер раздела
Partition number (1-4, default 1): 1

# начало раздела
First sector (2048-31457279, default 2048):

# конец раздела
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31457279, default 31457279):

Created a new partition 1 of type 'Linux' and of size 15 GiB.

# применение изменений
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.


🔹 Форматирование раздела
# ext4
sudo mkfs -t ext4 /dev/sdb1

# fat32
sudo mkfs -t vfat /dev/sdb1

# ntfs
sudo mkfs -t ntfs /dev/sdb1


🔹 Монтирование раздела
# создаем точку монтирования
sudo mkdir /mnt/newdisk

# монтируем
sudo mount -t auto /dev/sdb1 /mnt/newdisk

# выдаем права на доступ для пользователей
sudo chown -R :users /mnt/newdisk
sudo chmod -R g+rw /mnt/newdisk


🔹 Изменение размера раздела
# редактор разметки и разделов дисков
parted /dev/sdb

# смотрим таблицу разделов
print

# изменяем размер раздела 1
resizepart 1

# занимаем всю доступную область памяти
End? [120.1GB]? 100%


🔹 Изменение размера раздела LVM
# проверяем доступное место в группе томов
vgdisplay

# список логических разделов
lvdisplay

# расширяем логический раздел, занимая всю доступную область памяти в группе
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# расширяем фс на расширенную ранее область логического раздела
resize2fs /dev/mapper/ubuntu–vg-ubuntu–lv


#linux #drive #partitions #volumes #шпаргалка
👍2
Расскажу про open-source инструмент для управления проектами Planka, который позиционируется как бесплатная альтернатива Trello.

Система имеет простой и легкий интерфейс, неперегруженный различными фичами, что можно отнести как к плюсам из-за скорости работы, так и к минусам из-за местами скудной функциональности.

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

▫️ Уведомления в Telegram и Slack;

▫️ Поддержка OpenID Connect;

▫️ Также развитие получил проект по API;

▫️ На начальной стадии, но все-таки ведется работа над мобильным приложением;

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

Из минусов отмечу:

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

▫️ Не поддерживается какая-либо аналитика (отчеты, диаграммы, сводные данные по трекингу времени и т.д.).

❇️ Демонстрационная версия доступна здесь.

❇️ Если хотите самостоятельно настроить и запустить Planka на своем сервере, проще всего это сделать с помощью docker. Инструкция из официальной документации.

❇️ В репозиторий на gitverse выложил пример размещения сервиса за reverse-proxy Traefik, благодаря чему можно сразу привязать свой домен, получить сертификат и ходить через https.

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

#management #opensource #selfhosted
👍2
Для автоматизации задач сбора информации из каналов, групп, чатов в Telegram, помимо официального API, существуют различного рода и направленности, как платные так и бесплатные, инструменты и библиотеки. В данном цикле заметок рассмотрим примеры работы с популярной Python библиотекой Telethon в контексте извлечения полезных данных из публичных просторов мессенджера.

Для удобства исходники выложены в репозиторий на gitverse.

📌 Задача

Выгрузить все изображения (документы, аудиофайловы) из открытого Telegram-канала в автоматическом режиме.

📌 Рабочая станция

Виртуальная машина с Debian 12 на борту.

📌 Подготовка

🔹 Для начала получим параметры для доступа к API Telegram

* Идем в кабинет и авторизовываемся.

* На странице API development tools создаем новое приложение и забираем App api_id и App api_hash.

🔹 Устанавливаем необходимые для работы пакеты
sudo apt install git python3 python3-pip python3-vevn -y


🔹 Скачиваем демонстрационный проект с gitverse
git clone https://gitverse.ru/desoft/telethoner.git


🔹 Создаем виртуальное окружение и подгружаем зависимости
cd telethoner
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt


🔹 В скрипте downloader.py прописываем полученные ранее App api_id и App api_hash в константы API_ID и API_HASH соответственно.

📌 Использование

🔹 При первом запуске для получения доступа к API Telegram необходимо будет войти под своей учетной записью в интерактивном режиме (вводим номер телефона, получаем и заполняем код).
Please enter your phone (or bot token): +7...............
Please enter the code you received: 00000
Signed in successfully as <USER>;


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

🔹 В качестве примера добавлена обработка трех видов контента - документы, фото и музыка, что соответствует значениям document, photo, music параметра content_type.

🔹 Запускаем
# скачиваем 10 прикрепленных изображений к последним постам в Telegram-канале Хабра
python3 downloader.py --channel_url=https://t.me/habr_com --content_type=photo --path_data_folder=myfolder --limit=10


#telegram #python #telethon
👍2