Записки IT специалиста
8.8K subscribers
2.32K photos
57 videos
16 files
2.52K links
IT-канал, просто о сложном
https://interface31.ru

Купить рекламу:
https://telega.in/c/interface31
Download Telegram
Hacknect – беспроводной USB-кабель для взлома
 
Казалось бы, что может быть безобиднее простого кабеля USB? Деталь максимально рутинная и привычная. Ну воткнут и воткнут, наверное, надо так, подключено чего-то.
 
Только вот подключено может быть совсем не чего-то, а настоящий хакерский инструмент. На Kickstarter  засветился интересный девайс - на вид обычный USB-кабель, который содержит в своем составе: микроконтроллер ESP32-S3, microSD-карту и модуль Wi-Fi.
 
Возможности тоже богатые:
 
▫️ Внедрение нажатий клавиш — выполнение автоматизированных клавиатурных команд с использованием высокоскоростной эмуляции HID.

▫️ Внедрение действий мыши — имитация сложных движений курсора и автоматизация действий.

▫️ Слоты для полезной нагрузки — хранение и управление несколькими полезными нагрузками непосредственно на устройстве.

▫️ Wi-Fi-триггеры — запуск действий по беспроводной команде со смартфона или компьютера.

▫️ Веб-панель управления — полный контроль над Hacknect через браузер.

▫️ Однократный запуск полезной нагрузки — мгновенное выполнение команды одним щелчком.

▫️ Два в одном USB + TF — встроенная поддержка microSD/TF-карты прямо в разъёме USB-A.

▫️ USB-интерфейс полной скорости — быстрая и отзывчивая USB-связь.

▫️ Режим самоуничтожения — быстрое удаление сохранённых полезных нагрузок и конфиденциальных данных.

▫️ Компактный скрытый дизайн — выглядит как обычный повседневный USB-кабель.

▫️ Совместимость с мобильными и настольными устройствами — работает с телефонами, планшетами, ноутбуками и ПК.
 
Управляется все удаленно, через браузер. Радует, разве только то, что управление ограничено дальностью модулей беспроводной связи. Но лиха беда начало.
 
Поэтому теперь нужно постоянно приглядываться к привычным на вид вещам и постоянно думать, а нет ли тут чего? А лучше всего вообще не использовать никакие чужие устройства, даже кабели.
 
Паранойя? Может быть, но в этом деле лучше перебдеть, чем недобдеть.
👀16👍116🤷‍♂2👨‍💻1
witr – или почему это работает?
 
witr – удобная интерактивная утилита название которой составлено как аббревиатура от фразы «Why is this running?» (почему это работает) и в этом заключается основное назначение этой утилиты.
 
Как пишет сам разработчик, основные задачи, которые выполняет утилита заключаются в быстром ответе на вопросы:
 
▫️ Что это запущено?
▫️ Как оно было запущено?
▫️ Что отвечает за его работу?
▫️ В каком контексте оно работает?
 
Утилита следует принципу одного экрана, что облегчает понимание ситуации и не заставляет пользователя переключаться, чтобы сопоставить различные источники информации. Что, по мнению разработчика, важно в условиях стресса при расследовании сбоев или вторжений.
 
И тут мы с ним полностью согласимся. Каждый кто занимался расследованием непонятных инцидентов знает, как важно быстро получить и сопоставить, а потом еще интерпретировать информацию из различных источников, особенно в условии авральной ситуации.
 
Сам по себе witr не сообщит вам ничего нового, всю эту информацию можно получить самостоятельно, воспользовавшись ps, top, lsof, ss, systemctl, docker ps и т.д. Но, если вы не занимаетесь этим постоянно, то вам нужно помнить или искать нужные ключи, собирать и сопоставлять информацию, пытаться сделать правильные выводы.
 
Здесь же вы быстро получите всю возможную картину в одном месте, существенно сэкономив себе время и перейдя от догадок к уверенности.
 
Для установки утилиты воспользуйтесь скриптом от разработчика. Для Linux, macOS или FreeBSD выполните:
 
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash

 
Для Windows:
 
irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex

 
Отметим, что версия утититы для Windows обладает более узкими возможностями, в частности не умеет работать с файлами.
 
После чего просто запустите ее от имени суперпользователя или sudo:
 
sudo witr

 
По умолчанию мы попадаем в интерактивный режим, перед нами открыт список процессов и переходя по ним мы можем сразу посмотреть всю его подноготную. В нашем случае показан процесс mc. Мы разу видим, что запущен он из SSH-сессии, в которой были повышены права через su.
 
Для подробностей мы можем нажать Enter и посмотреть подробное описание процесса, здесь мы уже видим кем и откуда запущен процесс, его рабочую директорию, переменные окружения, статистику его работы.
 
Следующая закладка – сетевые порты, по умолчанию показаны только порты в режиме прослушивания, но нажав кнопку a можно увидеть все используемые сетевые порты, и мы сразу видим связанный с этим портом процесс. Нажатие Enter на процессе сразу покажет нам все подробности.
 
Третья закладка – контейнеры, четвертая – файлы, по умолчанию нам покажут только заблокированные, но мы можем переключиться в режим всех открытых файлов. Здесь точно также по Enter мы можем получить все подробности о контейнере или работающему с файлом процессе.
 
Узнать больше о возможностях и применениях утилиты можно на официальной странице проекта: https://github.com/pranshuparmar/witr
 
Но в любом случае рекомендуем добавить ее в свой инструментарий, лишней не будет, особенно в авральной или непонятной ситуации.
👍431
Новый формат DEB822 для источников APT

Так уж пошло, что многие привычные вещи воспринимаются нами чем-то незыблемым, а попытка нарушить текущий ход вещей часто воспринимается в штыки. Новый формат источников APT - DEB822 не исключение, он появился начиная с выпуска Debian 13, а пользователи Ubuntu познакомились с ним немного раньше, начиная с Ubuntu 24.04. В данной статье мы подробно разберем новый формат, его основные отличия и преимущества перед привычным старым.

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

Статья серьезно расширена и дополнена, кроме подробного разбора опций в ней есть новые разделы, которых не было в заметке.

Читать: https://interface31.ru/post/novyj-format-deb822-dlya-istochnikov-apt/
5👍152
Их нравы
 
На конференции Linux App Summit Себастьян Вик (Sebastian Wick), мэйнтейнер инструментария Flatpak, и Адриан Вовк (Adrian Vovk), создатель инсталлятора для GNOME OS и один из разработчиков systemd-homed и systemd-sysupdate, выступили с докладом о будущем системы самодостаточных пакетов Flatpak.
 
В докладе упоминалось намерение создать для нужд Flatpak новый процесс systemd-appd для управления правами приложений и вложенной изоляции. Важный нюанс: код ещё не написан, а поддержка пока только задумывалась.
 
Но тут «разверзлись хляби небесные» в социальной сети Fediverse началась волна агрессии. Разработчиков обвинили в «насаждении диктатуры», «предательстве портативности» и «союзничестве с Ландьюком». Критика сыпалась на этапе концепции, без анализа доклада. Аргументы «мы ещё даже код не написали» игнорировались.
 
Брайан Ландьюк (Bryan Lunduke) — известный технический блогер, яростный критик systemd и корпоративного влияния в Linux . В данном контексте обвинение в «союзничестве» с ним используется как токсичный ярлык и обвинение в намеренном вреде проекту ради идеологии.  

 
В результате Адриан Вовк заявил, что до начала этой токсичной кампании он искренне хотел найти элегантное решение для пользователей альтернативных init-систем (например, выделить appd в отдельный демон, как это сделали с elogind). Но после потока неконструктивной агрессии и обвинений у него пропала мотивация тратить личное время и силы на это:
 
Но, честно говоря, всё это обсуждение сейчас совершенно бессмысленно, пока мы не написали ни единой строчки кода. Если быть откровенным, до этой травли в Феди я планировал максимально тактично отнестись к сценарию использования без systemd. Но тут я увидел, как кто-то в открытую обвиняет нас в том, что мы «союзники Ландьюка».

Так что, извините, но у меня больше нет ни малейшего желания тратить своё время на это дерьмо. Оно того не стоит.

 
К чему это привело? Да к тому, что systemd теперь станет обязательной зависимостью Flatpak, альтернативные решения разработчики больше рассматривать не желают.
 
И это не первый случай токсичного поведения меньшинств, которые потом искренне удивляются почему никто не хочет поддерживать их решения и вообще тратить на них время. Многие начинают склоняться к теориям заговора и козням корпораций.
 
На самом деле проблема не в systemd vs openrc (или подставьте сюда все что хотите). Проблема в культуре дискуссии. Токсичное меньшинство, кричащее громче всех, создаёт иллюзию «общественного мнения». Но реальные мейнтейнеры видят: за громкими лозунгами стоит оголтелый фанатизм и догматическое отторжение инакомыслия.
👍22🤡1
TinyFileManager – простой и эффективный файловый веб-менеджер
 
В современных условиях часто встает вопрос удобного предоставления доступа к файлам самых разнообразных пользователей, в том числе мобильных и удаленных. Протокол SMB для этой задачи не самая лучшая идея, а создавать дублирующие хранилища наподобие Nextcloud избыточно.
 
Для такого случая может пригодиться TinyFileManager – простой файловый веб-менеджер в виде единственного PHP-файла. Но разработчик, судя по всему, сосредоточился именно на развитии самого скрипта, а подходы к созданию Docker-образа мягко скажем сомнительны. Поэтому образ мы будем собирать самостоятельно.
 
Общая структура проекта:

/opt/tinyfm/
├── Caddyfile
├── config.php
├── php-session.ini
├── docker-compose.yml
├── Dockerfile
└── data/

 
Dockerfile
 
FROM php:8.3-fpm-alpine

WORKDIR /var/www/html

RUN apk add --no-cache \
        libzip-dev \
        libpng-dev \
        libjpeg-turbo-dev \
        freetype-dev \
        oniguruma-dev \
        bzip2-dev \
        curl \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install zip gd mbstring bz2

RUN curl -L -o index.php https://raw.githubusercontent.com/prasathmani/tinyfilemanager/master/tinyfilemanager.php \
    && chown -R www-data:www-data /var/www/html

 
docker-compose.yml
 
services:

  tinyfilemanager:
    build: .
    container_name: tinyfilemanager
    restart: unless-stopped
    user: "82:82"
    volumes:
      - app_code:/var/www/html
      - ./data:/var/www/html/data
      - ./config.php:/var/www/html/config.php:ro
      - ./php-session.ini:/usr/local/etc/php/conf.d/session.ini:ro
    tmpfs:
      - /tmp:uid=82,gid=82,mode=1777
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL

  caddy:
    image: caddy:2-alpine
    container_name: tinyfm-caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - app_code:/var/www/html:ro
      - ./data:/var/www/html/data:ro
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - tinyfilemanager

volumes:
  app_code:
  caddy_data:
  caddy_config:

 
Caddyfile

files.example.com {
    #tls internal
    encode gzip zstd

    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Content-Type-Options nosniff
        X-Frame-Options DENY
        Referrer-Policy no-referrer
    }

    root * /var/www/html
    php_fastcgi tinyfilemanager:9000
    file_server
}

 
php-session.ini
 
session.gc_maxlifetime = 300
session.cookie_lifetime = 300

session.use_strict_mode = 1

session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = Lax

session.save_path = "/tmp"

 
config.php
 
<?php

$root_path = '/var/www/html/data';
$root_url = 'data';
$http_host = $_SERVER['HTTP_HOST'];

$use_auth = true;

$auth_users = array(
    'admin' => '$2y$10$/K.hjNr84lLNDt8fTXjoI.DBp6PpeyoJ.mGwrrLuCZfAwfSAGqhOW', //admin@123
    'user' => '$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO', //12345
    'guest' => '$2y$10$a.DMI5sRjAnvhb.8rFAXY.XPSEO/eatVb4qCMmTc2YcxTDKp9xMyC' //guest
);

$readonly_users = array(
    'guest'
);

$exclude_items = array(
    '.htaccess',
    '.env',
    'docker-compose.yml',
    'Caddyfile',
    'php-session.ini',
    'config.php',
    '.git',
    '.DS_Store',
    '..',
    '.'
);

$online_viewer = false;
$default_timezone = 'Europe/Moscow';

 
После чего создаем директорию для хранения файлов и устанавливаем на нее нужные права:
 
mkdir -p /opt/tinyfm/data
chown -R 82:82 /opt/tinyfm/data

 
И сгенерируем хеши паролей реальным пользователям:
 
docker run --rm php:8.3-alpine php -r "echo password_hash('мой_пароль', PASSWORD_BCRYPT) . PHP_EOL;"

 
Обратите внимание, пользователи бывают двух типов, с правами загружать файлы и правами только на чтение.
 
Запускаем проект:
 
docker compose up -d -–build

 
И переходим в браузере по указанному адресу.
👍29
Настраиваем Visual Studio Code для удаленной работы через SSH

Сегодня все чаще и чаще для конфигурационных файлов используются продвинутые текстовые форматы, такие как JSON или XML, имеющие строгий синтаксис и структуру.

Их применение облегчает программную обработку данных, но при этом они все еще остаются легко читаемыми человеком.

Однако работа с ними в привычных консольных редакторах имеет ряд неудобств, в частности связанных с соблюдением синтаксиса и формата разметки.

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

Читать далее: https://interface31.ru/post/nastraivaem-visual-studio-code-dlya-udalennoy-raboty-cherez-ssh/
👍12🔥111
Обновление PostgreSQL в Docker через pg_dumpall
 
Обновление PostgreSQL между мажорными версиями задача не самая простая, недостаточно просто загрузить новый контейнер, нужно еще выполнить конвертацию структуры кластера СУБД, которая меняется от версии к версии.
 
Для небольших и средних баз идеально использовать импорт/экспорт при помощи утилиты pg_dumpall, что полностью исключает риск повреждения исходных данных, плюс у вас на руках всегда остается актуальная резервная копия в виде дампа всего кластера.
 
Итак, приступим, допустим мы изначально имеем:
 
services:
  db:
    container_name: postgres-db

 
В нашем случае:

▫️ db — имя сервиса Compose
▫️ postgres-db — реальное имя контейнера Docker
 
1️⃣ Остановим весь стек и запустим обратно только контейнер с СУБД, это исключит возможную запись в БД во время выгрузки:
 
docker compose stop
docker compose up -d db

 
Теперь выполним выгрузку дампа всего кластера:
 
docker exec -t postgres-db pg_dumpall -U postgres > full_backup.sql


Проверяем, что файл выгрузки создан. После чего останавливаем контейнер с БД:
 
docker compose down

 
2️⃣ Следующие шаги будут несколько различаться в отличие от того, используем ли мы Named Volumes или Bind mount, но в любом случае наша задача запустить новый контейнер СУБД с пустым томом.

🔹 Для Named Volumes было:
 
services:
  db:
    image: postgres:17
    volumes:
      - pg_data:/var/lib/postgresql/data
volumes:
  pg_data:

 
Стало:
 
services:
  db:
    image: postgres:18
    volumes:
      - pg_data_18:/var/lib/postgresql/data
volumes:
  pg_data_18:

 
🔹 Для Bind mount было:
 
services:
  db:
    image: postgres:17
    volumes:
      - ./postgres-data:/var/lib/postgresql/data


Стало:
 
services:
  db:
    image: postgres:18
    volumes:
      - ./postgres-data-18:/var/lib/postgresql/data

 
3️⃣ Запускаем СУБД:
 
docker compose up -d db

 
Мы нее запускаем весь стек, чтобы раньше времени приложения не начали писать в новую чистую БД.
 
Ждем пока база инициализируется и готова будет принимать соединения, для этого выполним команду:
 
docker logs -f postgres-db

 
Как только появится сообщение:
 
database system is ready to accept connections

 
Можно двигаться дальше. Загружаем дамп кластера СУБД:
 
docker exec -i postgres-db psql -U postgres < full_backup.sql

 
Теперь запускаем весь стек:
 
docker compose up -d

 
4️⃣ После чего рекомендуется выполнить оптимизацию загруженной базы:
 
docker exec -it postgres-db vacuumdb -U postgres --all --analyze-only

 
Это не мешает работе и можно запускать уже на работающем стеке. Старые тома лучше всего оставить на некоторое время, пока вы не убедитесь, что обновление прошло нормально.
👍83😁21
УТМ ЕГАИС 403 Forbidden - Доступ к странице с данного IP не разрешен

С такой ошибкой столкнулся сегодня один наш коллега. Предыстория проста. В самом веб-интерфейсе UTM есть фильтр IP-адресов, в котором можно указать доверенные адреса и сети, обращения с других адресов будут отклоняться.

А дальше – проще, немного не подумал или опечатался и доступа у тебя больше нет. Как раз этим наш коллега и решил заняться, тем более что в регионе у нас три «для трезвости» подряд. Но что-то пошло не так и доступ пропал отовсюду.

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

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

Итак, белые списки, если они есть, то должны где-то хранится, а каком-то конфигурационном файле. Вот поиском этого и займемся. Недолгие поиски привели нас к файлу transport/conf/transport.properties в директории установки УТМ. У нас указан путь для Linux установки, в Windows его расположение аналогично.

В самом низу он содержит две интересные опции:

web.server.attempt.ip = 
web.server.access.ip =


Первая – это список адресов, с которых были попытки подключений. Хотя зачем они в конфиге? Логично было бы хранить их в логе. А вот последняя – это и есть наш белый список. Можете откорректировать его до нужных значений, а можете просто очистить.

Ошибка нашего коллеги была классическая, он набрал 192.186.х.х вместо 192.168.х.х.

После чего просто перезапустите службу УТМ и доступ восстановится.
👍22🔥32🤝2
Особенности установки УТМ ЕГАИС на Debian 13

Сегодня попробовали установить УТМ ЕГАИС на свежий дистрибутив Debian 13. Сама установка не вызывает особых сложностей и ее можно выполнить по нашей статье:

🔹 ЕГАИС. Устанавливаем УТМ 4.2.0 на Debian (Ubuntu)

При этом, вместо libncurses5:i386 следует устанавливать libncurses6:i386, а библиотека SSL называется libssl3t64 и скорее всего будет установлена по умолчанию.

Сам пакет u-trans тоже ставится без особых проблем, запускается, но не работает. Если вы откроете лог, то увидите, что УТМ не может обнаружить ключ. Странно, ведь инсталлятор увидел Рутокен и инструменты диагностики тоже его видят.

Поэтому читаем лог дальше и находим интересные записи:

/opt/utm/lib/librtpkcsllecp.so: невозможно задействовать исполняемый стек, как требует разделяемый объект


Это значит, что библиотека требует наличия executable stack (исполняемый стек), который отключен в Debian 13 по соображениями безопасности (а также в Ubuntu, начиная с 25.10).

👆 Включить данную технологию не представляется возможным (во всяком случае без глубокого изменения системы), поэтому можно считать, что УТМ ЕГАИС несовместим с Debian 13 и грядущей Ubuntu 26.04 LTS.

😉 Ну если, конечно, разработчики Росалкогольтабакконтроль не перепишут программу, но надежды на это призрачные, с учетом того, что u-trans для Linux до сих пор 32-битное приложение.

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

Поэтому мы можем заменить их на более современные версии библиотек от Рутокен, которые не требуют executable stack.

Скачать их можно на https://download.rutoken.ru в разделе /Rutoken/PKCS11Lib/Current/Linux/x32/, просто качаем librtpkcs11ecp.so.

Для этого перейдем в домашнюю папку и скачаем библиотеку через wget, в нашем случае это последняя на сегодня версия, вам же потребуется уточнить версию библиотеки:

cd ~ 
wget https://download.rutoken.ru/Rutoken/PKCS11Lib/Current/Linux/x32/librtpkcs11ecp.so


Затем останавливаем УТМ, заменяем необходимые библиотеки (их там две копии) и снова запускаем УТМ:

supervisorctl stop utm
cp -v librtpkcs11ecp.so /opt/utm/lib/librtpkcs11ecp.so
cp -v librtpkcs11ecp.so /opt/utm/lib/librtpkcs11ecp-replica.so
supervisorctl start utm


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

tail -f /opt/utm/transport/l/transport_info.log


Но данное действие вам придется выполнять всякий раз после переустановки или обновления УТМ.

❗️Также обратите внимание, что данный способ проверен только с токенами Рутокен и работа с JaCarta не проверялась и не гарантируется.

👉 Кроме того, добавим – непосредственной необходимости ставить УТМ ЕГАИС на Debian 13 в текущий момент нет, сервис это сугубо внутренний и при необходимости может эксплуатироваться даже на устаревших версиях системы.
1👍25🔥3
Store CLI – интерфейс командной строки для Microsoft Store

Не так давно без лишнего шума и анонсов в последних выпусках Windows появилась утилита командной строки Store CLI, предназначенная для работы с магазином Microsoft.

Для ее использования откройте терминал и просто наберите:

store 


И вы получите короткую справку, которой достаточно чтобы начать с ней работать.

Для просмотра уже установленных из магазина приложений выполните:

store installed


Для поиска обновлений отдельного приложения выполните:

store update AppName


Сразу для всех:

store updates


Чтобы установить обновления добавьте ключ –apply:

store update AppName  --apply
store updates –apply


Для поиска приложений используйте:

store search AppName


Также можно искать по расширению:

store extension mp4


И вы получите все приложения для работы с mp4.

Если вы хотите подобрать альтернативы приложению, то выполните поиск похожих:

store similar vlc


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

store app-categories


Теперь выведем топ бесплатных приложений определенной категории:

store browse-apps top-free --category "Utilities & tools"


Или топ платных в субкатегории:

store browse-apps top-paid --subcategory "Personal Security"


Найдя нужное приложение, мы можем установить его командой:

store install AppName/ID


В качестве параметра можно указать имя приложения или ID, второе предпочтительно, так как однозначно определяет приложение, даже если опубликовано несколько его версий. Например, для установки VLC можно использовать команды:

store install VLC
store install XPDM1ZW6815MQM


Возможности удаления приложений магазина в данной версии консольной утилиты нет.
👍14🤣7