Как добавить в blacklist драйвер
Достаточно много было шумихи по поводу того, что из-за нового чипа T2 невозможно установить linux на новые MacBook 2018 года с тачбаром. Шло время, и под конец 2019 года стронними разработчиками был реализован ряд драйверов и патчей ядра для взаимодействия с чипом T2. Основной драйвер для MacBook моделей 2018 и новее реализует работу VHCI (работа тача/клавиатуры/и.т.д.), а также функционирование звука.
- BCE (Buffer Copy Engine) — устанавливает основной канал связи с T2. VHCI и Audio требуют этот компонент.
- VHCI — это виртуальный хост-контроллер USB; клавиатура, мышь и другие компоненты системы предоставляются этим компонентом (другие драйверы используют этот хост-контроллер для обеспечения большей функциональности.
- Audio — драйвер для аудиоинтерфейса T2, в настоящее время поддерживается только вывод звука через встроенные динамики MacBook
Также была реализована поддержка таких устройств, как wi-fi, тачпад, etc, с помощью патчей ядра. На текущий момент версия ядра 5.3.5-1
Что работает на данный момент
- NVMe
- Клавиатура
- USB-C (Thunderbolt не проверялся, при автоматической загрузке модуля подвешивает систему намертво)
- Тачбар (с возможностью включения клавиш Fn, подсветка, ESC итп)
- Звук (только встроенные динамики)
- Модуль Wi-Fi (через brcmfmac и только через iw)
- DisplayPort через USB-C
- Сенсоры
- Suspend/Resume (частично)
- etc..
Что потребуется для установки
- USB-C док-переходник на USB (как минимум три USB входа для подключения мыши, клавиатуры, usb модема или телефона в режиме tethering). Это необходимо только на первых этапах установки
- USB-клавиатура
- USB/USB-C флешка минимум на 4Гб
1. Отключаем запрет загрузки с внешних носителей
2. Выделяем свободное место с помощью Disk Utility
Для удобства я сразу выделил 30Гб на диск, отформатировав его в exfat в самом Disk Utility. Разбиение физического диска на разделы Disk Utility.
3. Формируем iso образ
- Можно пойти простым путем и скачать готовый образ с ядром 5.3.5-1 и пачтами от aunali1ссылка на готовый образ
- Сформировать образ самостоятельно через archlive (необходима система с дистрибутивом арча)
Добавляем репозиторий в pacman.conf:
Игнорируем оригинальное ядро в pacman.conf:
Добавляем необходимые пакеты, в конце добавляем ядро linux-mbp и linux-mbp-headers
Изменяем скрипт для работы в интерактивном режиме (заменяем pacstrap -C на pacstrap -i -C):
Нажимаем Y, чтобы пропустить игнорируемые пакеты, затем пишем iso-образ на usb флешку:
4. Первая загрузка
Перезагружаемся с вставленной флешкой и клавиатурой. Нажимаем options при появлении яблока, выбираем EFI BOOT.
Далее необходимо нажать клавишу «e» и вписать в конец командной строки module_blacklist=thunderbolt. Если этого не сделать, то система может не загрузиться, и вылетит ошибка Thunderbolt ICM Error.
С помощью fdisk/cfdisk находим наш раздел (у меня это nvme0n1p4), форматируем и производим установку арча. Можно воспользоваться официальной инструкцией или строронней.
Загрузочный раздел не создаем, загрузчик будем писать в /dev/nvme0n1p1
После того, как полностью сформировано окружение в /mnt и перед тем, как перейти в arch-chroot, пишем:
Добавляем в /etc/pacman.conf:
Прописываем thunderbolt и applesmc в /etc/modprobe.d/blacklist.conf
Клавиатура, тачбар, etc
Устанавливаем модули для работы тачбара:
Добавляем модули в автозагрузку: /etc/modules-load.d/apple.conf
Устанавливаем модули ядра для работы клавиатуры. В репозитории anuali1 есть готовый пакет, он называется apple-bce-dkms-git. Чтобы его установить, пишем в консоли:
В этом случае модуль ядра будет называться apple-bce. В случае самостоятельной сборки он называется bce. Соответственно, если вы хотите прописать модуль в раздел MODULES в файл mkinicpio.conf, то не забудьте, какой модуль вы устанавливали.
Добавляем модуль bce или apple-bce в автозагрузку: /etc/modules-load.d/bce.conf
Если хотите использовать по умолчанию кнопки Fn, то в файл /etc/modprobe.d/apple-tb.conf пишем:
Обновляем ядро и initramfs.
5. Загрузчик
После того, как внутри chroot все основные пакеты установлены, можно приступать к установке загрузчика.
Мне так и не удалось заставить работать grub. С внешнего usb-диска grub загружается, но при попытке прописать его в nvme через
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
система улетала в kernel panic, и после перезагрузки нового пункта через options не появлялось. Какого-то внятного решения данной проблемы я не нашел и поэтому решил попробовать реализовать загрузку с помощью systemd-boot.
Если необходимо, чтобы клавиатура работала до полной загрузки системы (это необходимо в случае использования шифрования luks/dm-crypt) то прописываем в файл /etc/mkinicpio.conf в разделе MODULES:
Обновляем ядро и initramfs.
Настраиваем systemd-boot
Редактируем файл /boot/loader/loader.conf, удаляем все, что там внутри, и вносим следующее:
Переходим в папку /boot/loader/entries, создаем файл arch.conf и пишем:
В случае, если использовали luks и lvm, то
Перезагружаемся в MacOS.
6. Настройка Wi-Fi
Как в итоге выяснилось, файлы прошивок для wi-fi адаптера MacOS хранит в папке /usr/share/firmware/wifi , и можно их от туда взять в виде блобов и скормить модулю ядра brcmfmac. Для того, чтобы выяснить, какие именно файлы использует ваш адаптер, открываем терминал в MacOS и пишем:
Получаем длинный список. Нам нужны файлы только из раздела RequestedFiles:
В вашем случае названия файлов могут отличаться. Копируем их из папки /usr/share/firmware/wifi на флешку и переименовываем в следующий вид:
В данном случае последний текстовый файл содержит названия модели, если ваша модель не macbookpro15,2, то необходимо переименовать этот файл в соответствии с вашей моделью макбука.
Перезагружаемся в арч.
Копируем файлы с флешки в папку /lib/firmware/brcm/
Проверяем работоспособность модуля:
Убеждаемся, что сетевой интерфейс появился через ifconfig/ip.
Настраиваем wifi через iwctl
Внимание. Через netctl, nmcli, etc. интерфейс не работает, только через iwd.
Заставляем NetworkManager использовать iwd. Для этого создаем файл /etc/NetworkManager/NetworkManager.conf и пишем:
Запускаем службу NetworkManager
7. Звук
Для того, чтобы заработал звук, необходимо установить pulseaudio:
Скачиваем три файла:
8. Suspend/Resume
На текущий момент 16.10.2019 приходится выбирать либо звук, либо suspend/resume. Ждем, пока автор bce модуля допилит функционал.
Чтобы собрать модуль с поддержкой susped/resume, необходимо выполнить следующее:
Если вы устанавливали готовый модуль apple-bce из репозитория anuali1, то необходимо его предварительно удалить и только после этого собирать и устанавливать bce модуль с поддежкой suspend режима.
Также, необходимо добавить в blacklist модуль applesmc (если вы этого не сделали ранее) и убедиться, что в /boot/loader/entries/arch.conf в строке options в конце добавлен параметр pcie_ports=compat.
Создайте скрипт /lib/systemd/system-sleep/rmmod.sh:
Сделайте его исполняемым:
На этом пока все. В итоге получась вполне работоспособная система, за исключением некоторых нюансов с suspend/resume. Никаких вылетов и kernel panic не наблюдается на протяжении нескольких дней аптайма. Надеюсь, в ближайшее время автор модуля bce его допилит, и мы получим полноценную поддержку suspend/resume и звука.
Примечание: черный список не будет работать для модулей, которые встроены в образ ядра (то есть не загружаются через отдельный файл .ko . Единственный способ отключить такие модули - с помощью параметра ядра (если он доступен) или путем перекомпиляции ядра.
Просто откройте файл /etc/modprobe.d/blacklist и добавьте имя драйвера, используя следующий синтаксис:
РЕДАКТИРОВАТЬ: В более поздних версиях, начиная с 12.10 (12.04?), Файл имеет вид / и т. Д. /modprobe.d/blacklist.conf
Перезагрузите компьютер и используйте команду lsmod, чтобы показать состояние модулей в ядре Linux
Примечание : здесь имя-драйвера имя желаемого драйвера из черного списка. Например, если вы хотите отключить драйвер сетевой карты, вы можете найти имя драйвера ядра для вашей сетевой карты с помощью команды lspci -v в терминале.
Например, мой вывод был:
Здесь я вижу драйвер tg3 . поэтому вам нужно написать tg3 (или ваш драйвер) вместо имя-драйвера .
Вы также можете временно занести их в черный список в командной строке grub (строка Linux) при загрузке с синтаксисом
В более поздних выпусках вам необходимо использовать директиву установки в вашем файле черного списка
Замените "имя модуля" выше на имя модуля. Это принудительно предотвратит его загрузку.
Вы можете найти дополнительную информацию о директиве установки в руководстве для modprobe.conf
Другой способ занести модули в черный список как минимум в Ubuntu 16.04 LTS - это добавить следующую строку в командную строку ядра:
Использование системы / etc / modprobe - лучший способ, но это - альтернатива, которую можно использовать в крайнем случае, отредактировав командную строку GRUB при загрузке.
Это также можно сделать постоянным, отредактировав / etc / default / grub и добавив в переменную GRUB_CMDLINE_LINUX_DEFAULT . Например, в моем / etc / default / grub у меня есть:
Затем я запускаю update-grub2 , затем update-initramfs -u . После перезагрузки вы будете свободны от модуля, если ничего не загрузит его после загрузки.
Этот метод также работает в вариантах EL (RHEL, CentOS, SciLinux), но вам придется использовать методы этого дистрибутива. для обновления grub и initrd.
Может возникнуть ситуация, когда вам потребуется запретить загрузку некоторых модулей ядра во время загрузки вашей Linux-системы.
В этом руководстве мы обсудим несколько различных способов внесения модуля в чёрный список, включая его зависимости, в Ubuntu и любых других дистрибутивах на базе Debian.
Это позволит навсегда запретить модулю загружаться во время загрузки.
Черный список модулей при загрузке
Следуйте приведенным ниже шагам, чтобы узнать, как внести модуль ядра в черный список для загрузки в вашей системе.
Начнем с перечисления всех модулей, загруженных в настоящее время в вашей системе Linux:
Команда lsmod выводит список всех загруженных в данный момент модулей ядра.
Приведенный выше вывод lsmod был сокращен.
Допустим, мы собираемся внести в черный список модуль usbcore.
Прежде чем выгружать или заносить в черный список какой-либо модуль, полезно посмотреть, какие другие модули зависят от него:
Из приведенного выше результата видно, что модуль usb-common зависит от usbcore.
Чтобы внести в черный список модуль без зависимостей, создадим файл /etc/modprobe.d/blacklist.conf (если он еще не существует) и добавим в него следующую строку:
После этого обновите initramfs и перезагрузите систему:
После перезагрузки используйте lsmod, чтобы проверить, загружен ли модуль в настоящее время.
Если другие модули зависят от того самого модуля, который вы пытаетесь внести в черный список, как в приведенном выше примере, вам нужно внести в черный список все зависимые модули, иначе исходный модуль, который вы внесли в черный список, все равно загрузится.
К счастью, существует трюк, позволяющий внести в черный список все модули, включая их зависимости.
Если по какой-то причине вы не можете внести в черный список модули и все их зависимости, сделайте так, чтобы модуль не загружался и тем самым заставил не загружаться все зависимые модули.
Добавьте следующую строку в /etc/modprobe.d/blacklist.conf, чтобы полностью занести usbcore в черный список, включая все его зависимые модули:
Затем обновите initramfs и перезагрузитесь:
Для полноты картины, пожалуйста, обратите внимание, что хорошей практикой является создание отдельного файла конфигурации модуля для каждого модуля, занесенного в черный список.
Например, если вы хотите внести в черный список модуль e1000, то создайте отдельный файл /etc/modprobe.d/e1000.conf.
Заключение
В этом руководстве мы рассмотрели, как внести модуль ядра в черный список в Ubuntu и других системах Linux на базе Debian.
Это полезно, когда вам нужно предотвратить загрузку модуля, временно или постоянно, во время загрузки.
Изменение легко вернуть, удалив файл, если вам нужно разрешить модулю загружаться снова.
Эти инструкции позволяют модулю оставаться в вашей системе, просто предотвращая его автоматическую загрузку.
Бывает появляется необходимость отключить модуль nouveau , например если необходимо использовать универсальный модуль vesafb или перед установкой проприетарного видео-драйвера NVIDIA.
"nouveau ([nuvo]) — проект по созданию свободных драйверов видеокарт компании nVIDIA с поддержкой ускорения вывода трёхмерной графики. Изначально основан на распространяемом по свободной лицензии, но нечитаемом драйвере «nv» 2D-графики от nVIDIA."
Если установщик nvidia-installer обнаружит активный драйвер Nouveau, он предложит создать файл настроек modprobe для отключения Nouveau. После чего потребуется перезагрузить компьютер и снова запустить nvidia-installer . Но мы пойдём инным путём и создадим такой файл настроек modprobe вручную.
Можно отредактировать уже имеющийся файл /etc/modprobe.d/blacklist.conf но тогда при обновление системы файл может быть обновлён и изменения будут потеряны.
Поэтому вместо редактирования уже имеющегося файла создадим новый файл, например /etc/modprobe.d/disable-nouveau.conf и впишем в него две строки.
Вне зависимости от того, создаете ли вы новый файл или редактируете имеющийся, в него должны быть добавлены следующие строки:
Первая строка запрещает модулю Nouveau уровня ядра автоматически загружаться при загрузке операционной системы. Она не предотвратит загрузку модуля по требованию, как и загрузку модуля сервером Х-интерфейса. Вторая строка запретит драйверу Nouveau осуществлять операции смены видеорежима через ядро.
Просто копируйте команды ниже, вставьте их в терминале (для тех кто вдруг ещё не знает, это тот который открывается после одновременного нажатия CTRL+ALT+T) и нажмите ENTER, а когда попросит ввести пароль сделайте это.
Если эта статья помогла вам, пожалуйста, оставьте комментарий
Спасибо за прочтение!
Этичный хакинг и тестирование на проникновение, информационная безопасность
Драйверы и программы для взлома на графической карте и центральном процессоре в hashcat
В этой статье показано, какие драйверы и программы установить для того, чтобы hashcat и аналогичные программы для брут-форса могли использовать видеокарту и процессор для взлома паролей.
В настоящее время hashcat использует OpenCL. Как написано в Википедии, OpenCL (англ. Open Computing Language — открытый язык вычислений) — фреймворк для написания компьютерных программ, связанных с параллельными вычислениями на различных графических и центральных процессорах, а также FPGA. В OpenCL входят язык программирования, который основан на стандарте языка программирования Си C99, и интерфейс программирования приложений. OpenCL обеспечивает параллелизм на уровне инструкций и на уровне данных и является осуществлением техники GPGPU. OpenCL является полностью открытым стандартом, его использование не облагается лицензионными отчислениями.
Цель OpenCL состоит в том, чтобы дополнить открытые отраслевые стандарты для трёхмерной компьютерной графики и звука OpenGL и OpenAL возможностями GPU для высокопроизводительных вычислений. OpenCL разрабатывается и поддерживается некоммерческим консорциумом Khronos Group, в который входят много крупных компаний, включая AMD, Apple, ARM, Intel, Nvidia, Sony Computer Entertainment и другие.
То есть благодаря такой универсальности OpenCL, программы для выполнения вычислений, в том числе и hashcat, запускают свои задачи универсальным способом на любых устройствах, поддерживающих OpenCL.
OpenCL поддерживают видеокарты AMD, NVIDIA, а также Intel GPU.
Видеокарты AMD, NVIDIA также в большинстве поддерживают OpenCL, кроме совсем старых.
Для работы OpenCL необходима установка драйвера и инструментов взаимодействия с OpenCL. Данная статья посвящена установке OpenCL в Linux. Аналогичные инструкции для Windows даны в статье «Инструкция по hashcat: запуск и использование программы для взлома паролей» (смотрите раздел «Драйверы для hashcat»).
Итак, требования для работы hashcat с OpenCL следующие:
- Для AMD видеокарт необходимо: "RadeonOpenCompute (ROCm)" Software Platform (1.6.180 или более поздняя версия)
- Для процессоров Intel необходимо: "OpenCL Runtime for Intel Core and Intel Xeon Processors" (16.1.1 или более поздняя версия)
- Для NVIDIA видеокарт необходимо: "NVIDIA Driver" (367.x или более поздняя версия)
Для устаревших процессоров (до Broadwell) используется "OpenCL 2.0 GPU Driver Package for Linux" (Iris, Iris Pro).
В этой статье будет показано, как установить всё необходимое для использования OpenCL на видеокартах NVIDIA и современных процессорах Intel. Инструкции будут даны на примере Kali Linux (также должны подходить для Debian, Linux Mint, Ubuntu и их производных) и Arch Linux (BlackArch).
Как включить OpenCL на Kali Linux (Debian, Linux Mint, Ubuntu) для hashcat
Включение OpenCL для NVIDIA
Начните с полного обновления системы и затем перезагрузитесь:
После того, как мы обновили систему, нужно проверить модули ядра nouveau (свободные драйвера Nvidia, они будут конфликтовать с проприетарными)
Если предыдущая команда хоть что-то вывела, например:
это означает, что они включены. Поэтому необходимо добавить их в чёрный список:
После изменения параметров ядра, нам нужно обновить наши initramfs и перезагрузиться.
После перезагрузки и проверки, что модули nouveau не загружены, мы переходим к установке загрузчика OpenCL ICD, драйверов и набора инструментов CUDA.
Во время установки драйверов система создаёт новые модули ядра, поэтому требуется ещё одна перезагрузка.
Проверка установленных драйверов
Теперь наша система должна быть готова, нам нужно проверить, что драйверы корректно загружены. Мы можем быстро в этом убедиться запустив инструмент nvidia-smi.
Вывод показывает, что наш драйвер и GPU в порядке — можно приступать к взлому паролей. Перед продолжением, давайте ещё раз сделаем проверку и убедимся, что hashcat и CUDA работают вместе.
Если вы получили ошибку clGetDeviceIDs(): CL_DEVICE_NOT_FOUND с отметкой Platform ID Vendor: Mesa, то запустите:
Продолжим запуском теста производительности. Бенчмарк
Включение OpenCL для Intel
Если ваш центральный процессор поддерживает OpenCL, то установите следующие пакеты:
Просмотрим список устройств ещё раз (должно добавиться новое устройство):
И выполним бенчмар ещё раз:
Как включить OpenCL на Arch Linux (BlackArch) для hashcat
Включение OpenCL для NVIDIA
Удалите xf86-video-nouveau есть он есть:
Установите проприетарный драйвер NVIDIA:
Установите драйвер CUDA и другие необходимые пакеты, а также hashcat:
Включение OpenCL для Intel
Теперь проверим список устройств:
Пакет beignet
beignet — это реализация OpenCL для Intel IvyBridge и Haswell iGPUs. В настоящее время этот пакет считается устаревшим и его должен заменить intel-compute-runtime. У меня в системе установить beignet, то появляется дополнительное устройство OpenCL — как на Kali Linux, где также видно 3 устройства OpenCL. Но это устройство работает нестабильно с Hashcat.
Вы можете протестировать, как себя ведёт beignet на вашей системе. Возможно, для более старых процессоров это единственная опция.
OpenCL для AMD
Если вы владелец AMD карты, то поделитесь вашим опытом установки драйвера AMD с поддержкой OpenCL. Пишите ваши команды для установки в комментариях — и я добавлю в статью новый раздел. Если есть возможность, сделайте скриншоты и/или бенчмарки.
Читайте также: