Обновить

Самая главная уязвимость Linux в ядре. Простой пример USB over IP

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели10K
Всего голосов 15: ↑6 и ↓9-2
Комментарии33

Комментарии 33

Смешались в кучу коне-люди...

А всё потому что у Винды и Линукса в принципе разная идеология построения софта и работы с системой.

Ядро - это ядро. Оно не GUI, и к GUI вообще никак не относится.
ОС - набор различных утилит, в том числе таких как X Window или Wayland.
GUI-софт - это не ОС, и он совершенно не должен быть "стандартизован": если кому-то нравится "графическая оболочка Gnome" - это не должно влиять на тех, кому нравится "графическая оболочка KDE", и тем более на тех, кому они обе даром не нужны.

И тем более причем тут всё это, если речь идет о пробросе USB по сети?
Это задача никак не связана с GUI, и по идее даже с конкретным дистрибутивом.

Это драйвер в ядре. Для работы с ним используется программный пакет usbip.
Как конкретно его установить - вот это зависит от дистрибутива. У меня так:

apt install usbip
modprobe usbip-core
modprobe usbip-host

Посмотреть что есть подключенного локально:

usbip list -l
 - busid 2-1.1 (3151:3000)
   unknown vendor : unknown product (3151:3000)

 - busid 2-1.2 (067b:2303)
   Prolific Technology, Inc. : PL2303 Serial Port / Mobile Phone Data Cable (067b:2303)

 - busid 2-1.3 (0a12:0001)
   Cambridge Silicon Radio, Ltd : Bluetooth Dongle (HCI mode) (0a12:0001)

 - busid 2-1.4 (aaaa:8816)
   MXT : microSD CardReader (aaaa:8816)

Подключу Serial port и запущу раздачу:

usbip bind -b 2-1.2
usbipd -D

На другой машине:

apt install usbip
modprobe usbip-core
modprobe vhci-hcd
usbip list -r <IP_сервера>
Exportable USB devices
======================
 - <IP_сервера>
      2-1.2: Prolific Technology, Inc. : PL2303 Serial Port / Mobile Phone Data Cable (067b:2303)
           : /sys/devices/platform/soc/5101000.usb/usb2/2-1/2-1.2
           : (Defined at Interface level) (00/00/00)
           :  0 - Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00)

sudo usbip attach -r <IP_сервера> -b 2-1.2

Смотрим результат:

lsusb
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port / Mobile Phone Data Cable
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

ls /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Nov 24 11:30 /dev/ttyUSB0

minicom -D /dev/ttyUSB0

Чудо! Всё работает!

Отключаю:

usbip port
Imported USB devices
====================
Port 00: <Port in Use> at Full Speed(12Mbps)
       Prolific Technology, Inc. : PL2303 Serial Port / Mobile Phone Data Cable (067b:2303)
       5-1 -> usbip://X.X.X.X:3240/2-1.2
           -> remote bus/dev 002/006

usbip detach -p 0

Всё.

Никакого GUI, никакой перекомпиляции kernel, ничего не потребовалось.

Но почему что--то пошло не так:

Можно было бы взять какой-нибудь дистрибутив MummyPie с выпиленным из ядра драйвером, без установленных в системе модулей для поддержки USB-IP, и даже без исходников и без возможности их установить - наверняка у меня бы ничего не получилось.

Это потому что Линукс кривой и GUI в нем нестандартизированы, а не потому что кто-то взял за основу MummyPie...

ЗЫ: вынесу-ка я это в отдельную статью, вдруг еще кому надо...

Я рад что у Вас debian судя по тому что

apt install usbip

У меня Oracle Linux (red hat) , потому что мне нужна проверенная Linux для субд прежде всего и как сервер приложений. А там usbip не считают достойным быть в основных репозиториях, почему не знаю

Кстати с UsbRedirector на Debian уже это не прокатит

И тем более причем тут всё это, если речь идет о пробросе USB по сети?

Это всего лишь пример в заключительной части статьи про отношение в целом к стандартизации в Linux и вопросам совместимости. Странно почему про SELinux такой же вопрос не задали

GUI-софт - это не ОС, и он совершенно не должен быть "стандартизован":

Gui софт пишется на каком то API а вот стандартизации GUI API так и не произошло

Обзор тут Дневник импортозамещения. Linux GUI — ложное искушение / Хабр

X11 - даже для удаленного администрирования уже не удовлетворяет. Отсуствие стандарта LSB Specifications на GUI API как минимум создает проблемы для переноса приложений с хорошим GUI , и закрывает рынок десктопов

Gui софт пишется на каком то API а вот стандартизации GUI API так и не произошло

(минус не мой есличо)

Произошло, и давно - X-window.
Не произошло стандартизации на уровне UI/UX, как в Windows, потому что у последователей различных "десктопов" совершенно различное представление о прекрасном - и это хорошо, это избавляет меня лично от необходимости следовать их правилам.

Из-за этого не проиходит стандартизации на уровне API библиотек, где-то GTK, где-то QT, где-то еще что-то иное.
И вот тогда бедные разработчики, которые хотят написать "самую лучшую программу" сталкиваются с проблемой, что им выбрать.

X11 - даже для удаленного администрирования уже не удовлетворяет

Это разве что после привычки в Windows.
GUI для удаленного администрирования не нужно вообще.
В это сложно поверить - но это правда, совершенно не нужно.

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

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

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

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

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

Ну, это известная проблема проприетарщины: вы покупаете услугу в обмен на то, что вендор вам не позволяет его внепланово напрягать. Шаг влево, шаг вправо - "гарантийные условия не предусматривают. блаблабла".

Проверенная кем?

Ну там логика простая. Мне нужна Linux для субд без проблем. Я знаю что Oracle пилит бесплатный Oracle linux чтобы продавать на нем свой дорогой Oracle database и другие продукты, дабы покупатель не переплачивал за лицензии враждебной ОС (windows , azure и т.д.) . Работал c oracle мне их подходы нравятся

Т.е. уже можно быть уверенным что Oracle потестила и собрала Linux для своих продуктов как надо.

Далее по моим тестам Postgres как предчувствие. Вычисляем процент импортозамещения в режиме Highload от 1С / Хабр

Что Oracle database , что Postgres работают на Oracle linux примерно также как и на Windows (если железо одинаковое) . Мне этого достаточно чтобы не ловить разные проблемы с производительностью.

Если брать тот же Debian - то я не вижу ни одного спонсора который продает на ней свои СУБД.

Мне нужна Linux для субд без проблем. Я знаю что Oracle пилит бесплатный Oracle linux

То есть вы выбрали один конкретный кривой дистриб и плачете, но виноваты почему-то не клепатели вами выбранного дистриба, а весь "линукс" целиком? Л - логика?

Чем Oracle linux кривой? Какой линейкой проверяете кривизну среди over 600 дистрибутивов

Кривизну оракла я проверил именно вашей статьёй. В коментах для масштаба были приведены примеры убунты.

НЛО прилетело и опубликовало эту надпись здесь

Postgres если ее сравнивать по тестам с MS SQl или Oracle дает результаты лучше за счет повышенной нагрузке на процессор. При этом результаты такие не только у меня PostgresSQL - бесплатный сыр для 1С или ступенька к Enterprise версии? | 1CUnlimited | Дзен

Возможно в Linux поэтому и быстрее. Но это и проблема, поскольку Postgres как правило используют как один Instance и в итоге процессор съедается и СУБД становится узким местом (сервера 1С можно наращивать как угодно, а субд одна)

Если посмотрите на знаменитый тест

Как мы успешно прошли тест на 30 000 одновременных пользователей в 1C:ERP (и что мы подкрутили в PostgreSQL) / Хабр

То там использовани ARM аж на 96 ядер как раз потому что пулинг не использовали, а распределять нагрузку как то надо

https://habr.com/ru/companies/1c/articles/930588/#comment_28628454

MS SQL уложился бы в нужные ресурсы лучше

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

И вроде бы Linux бесплатна, а косты на разработку из за этого разнообразия выбора растут. Свобода выбора это такая вещь: Было два гендера, стало больше двух и вот тебе 3 туалет, но ведь можно же всех сразу в один?

Косты - дело такое...

Если разобраться - класс GUI программ - это для вполне конкретных применений, ну вот та же графика, кады, браузер, видео редакторы и тому подобное.

На чем написан Хром, на qt, Gtk, XM? Вам это интересно? Скорее всего нет, вы просто запускаете Хром.

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

Библиотеки важны именно для единообразия "DE", а сам этот DE - просто дань традиции восприятия Виндовс: когда все окошки в одном стиле, и все вместе это единый продукт.

А это все не нужно. Нужно единообразие поведения - копировать, открыть файл, создать новый, однотипные или настраиваемые хоткеи - и в общем всё. Браузер не обязан быть похож на Фотошоп.

НЛО прилетело и опубликовало эту надпись здесь

UEK не совсем RHEL и чтобы появился kernel-devel, надо выбрать стандартное ядро в загрузчике Oracle Linux. А лучше взять Rocky или Alma для 98% совместимости без возни (некоторые приложения проверяют redhat-release).

UEK не совсем RHEL и чтобы появился kernel-devel, надо выбрать стандартное ядро в загрузчике Oracle Linux

И после этого ничего не развалится? Мне как то страшно, от неведения

НЛО прилетело и опубликовало эту надпись здесь

Где это "стандарт ядра"? Вот берем доку по Oracle linux

Oracle Linux 9 Kernel Reference

Там только два типа ядра можно использовать

UEK - Unbreakable Enterprise Kernel , где как раз оптимизации для Enterpise

и  Red Hat Compatible Kernel (RHCK)

То что гдето собирают исходники со стандартом ядра, не холодно не жарко поскольку важно скомпилированное и протестированное ядро

НЛО прилетело и опубликовало эту надпись здесь

Как нибудь поэксперементирую с rhck, но что то мне подсказывает что даже с usbip все кончится компиляцией . Поскольку у меня именно сервер СУБД и приложений я полагал, что UEK логичный выбор.

НЛО прилетело и опубликовало эту надпись здесь

Если что - нужные вам модули ядра идут в стандартном пакете kernel-uek-modules-extra.

И сам обычный usbip - в пакете usbip-utils в репозитории дополнительного софта elrepo.

Я попробовал воспользоваться elrepo для Oracle linux 8 . Это какой то междусобойчик а не публичный репозиторий

1) На сайте elrepo.org все только по логину, и непонятно как зарегистрироваться

2) Публичные инструкции по подключению только на каких то других сайтах

3) но ладно, подключил и всеравно он не работает. И это из за границы. Поэтому вопрос где брать собранный USBip остается открытым

dnf --enablerepo='*' search usbip
ELRepo.org Community Enterprise Linux Repository - el8 0.0 B/s | 0 B 00:10
Errors during downloading metadata for repository 'elrepo':

Кажется, у вас какие-то проблемы с интернетом на этой машине. Файл по ссылке http://elrepo.org/linux/elrepo/el8/x86_64/repodata/repomd.xml вполне доступен с разных провайдеров - я проверил.

А где его официальные инструкции по подключению? Я нашел только на сторонних. У них какой то сайт закрытый, такое впечатление что для узкого круга

Ещё недавно были прямо на стартовой странице. На всякий случай - ссылка в архив. start [ELRepo Wiki]

Единственный известный мне рабочий USB-IP софт - www.virtualhere.com Эта частичка Австралии - сердце и российских "импортозамещенных" аппаратных USB-IP хабов. Всё остальное... в том состоянии, как слог вашей статьи.

Как нибудь посмотрю на Red hat

Там всего 1 бесплатное соединение. Сломать не трудно, если для вас приемлемы кряки.

У меня в связке Win-Arch прекрасно работает.

Приемлемы, но способ не нашёл. Плохо искал. Ещё интереснее, используют ли российские производители usb-ip именно этот способ лицензирования.

Приемлемы, но способ не нашёл. Плохо искал

https://4pda.to/forum/index.php?showtopic=913362

Где-то там есть не только для андроида. На второй страничке инструкция.

Вот рабочий вариант времен CentOS 7 без перекомпиляций драйверов при смене ядра. Бесплатно. Без регистрации и SMS. Схема должна работать и для CentOS 8/Rocky Linux/Alma Linux. Скажу страшное: оно должно работать и для Oracle Linux.

НЛО прилетело и опубликовало эту надпись здесь

Прочитал первые параграф и плюнул. Какое то нытье: то низя, это не хочу. Фу!

так по сети или проброс внутрь виртуалки?
Если виртуалки, то в линуксе в отличие от оракловой вмвари все работает из коробки, готовый дистрибутив какого-нибудь Proxmox-ve решает все вопросы проброса. Воткнул пачку ключей в хост и раскидал куда тебе надо
А по ip есть вполне рабочие версии, опять же если не привязываться к странным дистрибутивам на голое железо.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации