PC, Mac & Linux Standalone build settings
The PC, Mac & Linux Standalone build settings contain options you can use to set up and begin the build process for your application on these platforms. It contains settings to create development builds A development build includes debug symbols and enables the Profiler. More info
See in Glossary as well as publishing your final build. To access the Build Settings window, go to File > Build Settings. Once you specify the build settings, select Build The process of compiling your project into a format that is ready to run on a specific platform or platforms. More info
See in Glossary to create your build, or select Build And Run to create and run your build on the platform you specify.
Standalone Build Settings
The following table outlines the settings available for your build. These vary depending on the target operating system you choose.
Setting | Description | |
---|---|---|
Target Platform | ||
Windows | Build for Windows | |
macOS X (Not available on Linux) | Build for macOS | |
Linux (not available on Mac) | Build for Linux | |
Architecture | Not available on macOS | |
x86 | 32-bit CPU | |
x86_64 | 64-bit CPU | |
x86 + x86_64 (Universal) | All CPU devices for Linux | |
Server Build | Enable this setting to build the Player for server use and with no visual elements (headless) without the need for any command line options. When you enable this setting, Unity builds managed scripts A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info See in Glossary with the UNITY_SERVER define, which means you can write server-specific code for your application. You can also build to the Windows version as a console application to access stdin and stdout . Unity logs go to stdout by default. | |
Copy PDB files(Windows only) | Enable this setting to include Microsoft program database (.pdb) files in the built Standalone Player. .pdb files contain application debugging information that is you can use to debug your application. Copying .pdb files might increase the size of your Player, so you should disable this setting for builds that are intended for publishing. This setting is disabled by default. | |
Create Visual Studio Solution(Windows only) | Enable this setting to generate Visual Studio Solution files for your Project, so you can build your final executable in Visual Studio. | |
Create Xcode Project (Mac Only) | Enable this setting to generate an Xcode project so you can build your final application bundle in Xcode. Xcode has built-in support for code signing and uploading the application to the Mac App Store. | |
Development Build | Enable this setting to include scripting debug symbols and include the Profiler A window that helps you to optimize your game. It shows how much time is spent in the various areas of your game. For example, it can report the percentage of time spent rendering, animating or in your game logic. More info See in Glossary in your build. When you enable this setting, the DEVELOPMENT_BUILD scripting define is set. You should use this option when you want to test your application. | |
Autoconnect profiler | Requires Development Build option to be enabled. When you enable this setting, the Unity Profiler automatically connects to your build. | |
Deep Profiling Support | Requires Development Build option to be enabled. Deep Profiling Support enables the Unity Profiler to record more detailed data by instrumenting every function call. Enabling Deep Profiling might slow down script execution. | |
Script debugging | Requires Development Build option to be enabled. When you enable this setting, Unity adds debugging symbols to your script code. | |
Scripts Only Build | Requires Development Build option to be enabled. When you enable this setting, you can rebuild only the scripts for your application while leaving data files intact from a build you have previously executed. Script only builds significantly improves iteration times if you are only changing the code in your application. You need to build the whole Project once before you can use this setting. |
For information on minimum requirements for build targets see documentation on Player System Requirements.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Модули ядра Linux
Оглавление
Что такое модули ядра
Модули ядра — это фрагменты кода, которые могут быть загружены и выгружены в ядро по требованию. Они расширяют функциональность ядра без необходимости перезагрузки системы. Модуль может быть настроен как встроенный в ядро или загружаемый во время работы операционной системы.
Примеры модулей ядра — это драйверы различных устройств.
В этой статье вы узнаете:
- как узнать, какие модули ядра запущены (загружены)
- как узнать, какой используется драйвер для указанного устройства и как получить информацию о данном драйвере
- как надёжно отключит устройства (например, сетевые карты, веб камеры и другие), чтобы их невозможно было включить и использовать
- как попробовать новый драйвер без его установки в систему
Получение информации о модулях
Модули храняться в директории /usr/lib/modules/ВЫПУСК_ЯДРА. Текущую папку с модулями можно узнать командой:
Имена модулей часто содержат символы подчёркивания (_) или дефисы (—); при этом данные символы являются взаимозаменяемыми в командах modprobe и в конфигурационных файлах в директории /etc/modprobe.d/.
Команда lsmod показывает драйверы и другие модули, которые загружены в данный момент. Чтобы увидеть, какие модули загружены в данный момент, выполните:
На самом деле, это одно и то же. Информация считывается из /proc/modules и данные команды только выводят её в более понятном для восприятия виде.
Для показа информации о модуле используется команда modinfo:
Если вы получили ошибку:
То запустите modinfo с sudo.
К примеру, чтобы узнать информацию о модуле iwlwifi:
Как понять вывод modinfo
Вывод modinfo обширен и содержит много информации.
Строка «filename» показывает полный путь до файла модуля.
В строке «author» содержится информация о создателе модуля, например, «Copyright(c) 2003- 2015 Intel Corporation
»
В строке «description» описание модуля, например, «Intel(R) Wireless WiFi driver for Linux».
Рассмотрим, как интерпретировать строки
- firmware
- alias
- intree
- vermagic
на примере модуля i915
firmware:
Многим устройствам для правильной работы нужны две вещи: драйвер и прошивка. Драйвер запрашивает прошивку из файловой системы в /lib/firmware. Это специальный файл, необходимый для аппаратного обеспечения, это не бинарный файл. Затем дайвер делает все, что нужно для загрузки прошивки в устройство. Прошивка выполняет программирование оборудования внутри устройства.
alias:
Эту запись можно разделить на части символами двоеточия (:)
- pci: тип устройства, pci или usb
- v00008086: v обозначает идентификатор поставщика, он идентифицирует производителя оборудования. Этот список поддерживается Специальной группой интересов PCI (PCI Special Interest Group). Номер 0x8086 означает «Корпорация Intel».
- d00005A84: d обозначает идентификатор устройства, выбранный производителем. Этот идентификатор обычно соединяется с идентификатором поставщика, чтобы создать уникальный 32-битный идентификатор для аппаратного устройства. Официального списка нет.
- sv*, sd*: версия поставщика подсистемы и версия устройства подсистемы для дальнейшей идентификации устройства (* указывает, что оно будет соответствовать чему угодно)
- bc03: базовый класс. Это определяет, что это за устройство; Интерфейс IDE, контроллер Ethernet, контроллер USB, … bc03 означает контроллер дисплея. Вы можете заметить их из вывода lspci, потому что lspci сопоставляет число и класс устройства.
- sc*: подкласс базового класса.
- i*: интерфейс
intree:
Все модули ядра начинают свои разработки как вне дерева. Как только модуль принимается для включения, он становится модулем внутри дерева. Модули без этого флага (установленного в N) могут испортить ядро.
vermagic:
При загрузке модуля строка vermagic проверяются на совпадение с текущей версией ядра. Если они не совпадают, вы получите ошибку, и ядро откажется загружать модуль. Вы можете преодолеть это, используя в modprobe флаг —force. Естественно, эти проверки существуют для вашей защиты, поэтому использование этой опции опасно.
Для вывода списка опций, установленных для загруженного модуля:
Если вы получили ошибку:
То установите пакет sysfsutils.
Пример вывода для модуля iwlwifi:
Для отображения полной конфигурации всех модулей:
Чтобы отобразить конфигурацию определённого модуля:
Чтобы перечислить зависимости модуля (или псевдонима), включая сам модуль:
Автоматическая загрузка модуля с помощью systemd
Сегодня загрузка всех необходимых модулей выполняется udev автоматически, поэтому нет необходимости помещать модули в какой-либо файл конфигурации. Однако в некоторых случаях вам может потребоваться загрузить дополнительный модуль во время процесса загрузки компьютера или добавить в чёрный список другой модуль для правильной работы компьютера.
Модули ядра могут быть явно перечислены в файлах в /etc/modules-load.d/ для systemd, чтобы загрузить их во время включения компьютера. Каждый файл конфигурации имеет имя в стиле /etc/modules-load.d/
.conf. Файлы конфигурации просто содержат список имён модулей ядра для загрузки, разделённых символами новой строки. Пустые строки и строки, чей первый непробельный символ — # (решётка) или ; (точка с запятой) игнорируются
Пример файла /etc/modules-load.d/virtio-net.conf
Кроме указанной директории, также считываются файлы конфигурации из /run/modules-load.d/*.conf и /usr/lib/modules-load.d/*.conf.
Обратите внимание, что обычно лучше полагаться на автоматическую загрузку модулей с помощью идентификаторов PCI, USB-идентификаторов, идентификаторов DMI или аналогичных триггеров, закодированных в самих модулях ядра, вместо статической конфигурации, подобной этой. Фактически, большинство современных модулей ядра уже подготовлены для автоматической загрузки.
Ручная обработка модуля (включение и отключение модулей и драйверов)
Модули ядра обрабатываются инструментами, предоставляемыми пакетом kmod. Вы можете использовать эти инструменты вручную.
Примечание. Если вы обновили ядро, но ещё не перезагрузили компьютер, modprobe завершится с ошибкой без сообщения об ошибке и выйдет с кодом 1, поскольку путь /usr/lib/modules/$(uname -r)/ больше не существует.
Чтобы загрузить модуль применяется команда вида:
Чтобы загрузить модуль по имени файла (то есть, тот, который не установлен в /usr/lib/modules/$(uname -r)/):
Для выгрузки (выключения) модуля:
Или альтернативная команда:
Как задействовать драйвер без его установки
Рассмотрим реальный пример, когда может пригодиться запуск драйвера из файла.
Эти драйвера предназначены для работы таких современных карт с поддержкой стандарта Wi-Fi AC как:
- Alfa AWUS1900 (чипсет: Realtek RTL8814AU)
- TRENDnet TEW-809UB (чипсет: Realtek RTL8814AU)
- ASUS USB-AC68 (чипсет: Realtek RTL8814AU)
- Alfa AWUS036ACH (чипсет: Realtek RTL8812AU)
- Alfa AWUS036AC (чипсет: Realtek RTL8812AU)
- ASUS USB-AC56 (чипсет: Realtek RTL8812AU)
Эти драйвера поддерживают режим монитора и беспроводную инъекцию, то есть подходят для аудита безопасности Wi-Fi сетей на 2.4 и 5 Ghz, в том числе с поддержкой Wi-Fi стандарта AC.
В принципе, в репозиториях Kali Linux уже имеется данный драйвер:
Но его версия 5.6.4. Но уже доступна версия 5.7.0. Предположим, мы хотим попробовать версию 5.7.0 без установки её в систему.
Итак, удаляем версию из репозитория (если она была установлена)
Проверим, что модуль не загружен:
И при попытке его загрузить возникает ошибка:
То есть, неизвестный символ в модуле. Суть такая же — модуль не найден, но ранее существовал, поэтому от него остались упоминания в списках зависимостей.
Установим зависимости, необходимые для компиляции данного драйвера:
Клонируем репозиторий — обратите внимание на использование опции -b с которой указана интересующая нас ветка (в данном случае название ветки совпадает с версией драйвера):
Компилируем, но не делаем установку, поскольку мы в принципе не хотим устанавливать этот модуль:
У нас есть два способа загрузить (включить) модуль — с помощью insmod или с помощью команды modprobe. Команда insmod удобнее, т. к. можно указать скомпилированный файл драйвера, а команда modprobe лучше обрабатывает зависимости, поэтому рассмотрим оба варианта.
Загрузка модуля без установки (используя insmod)
Для включения модуля из файла используйте команду вида:
Файлы модулей имеют расширение .ko, в нашем случае имя файла 88XXau.ko, поэтому команда следующая:
Проверяем, был ли загружен модуль:
Первая строка показывается, что модуль 88XXau загружен, а в последующих строках показаны модули, которые использует 88XXau (то есть которые являются для него зависимостями).
Загрузка модуля без установки (используя modprobe)
Второй вариант чуть более сложный в настройке, но для загрузки модуля не нужно указывать полный путь до файла драйвера.
Выгрузим модуль, если он был загружен ранее:
Теперь мы сделаем так, что система будет думать, что модуль установлен, хотя на самом это не так. Для этого мы создадим символическую ссылку от файла .ko в папку /lib/modules/`uname -r`:
В нашем случае для этого нужно выполнить такую команду:
Обновим список зависимостей всех модулей (кстати, ключ -a в следующей команде можно пропускать, т.к. он предполагается по умолчанию):
Теперь для загрузки модуля можно использовать обычную команду modprobe:
Проверим версию модуля:
Обратите внимание на строки:
Используется версия v5.7.0 — именно этого мы и добивались.
Описанные методы запуска модулей подходят для единоразового или эпизодического запуска драйверов. Для постоянного использования рекомендуется выполнить нормальную установку модуля, в этом случае он будет поддерживать DKMS.
Драйверы можно установить с помощью DKMS. Это система, которая автоматически перекомпилирует и устанавливает модуль ядра при установке или обновлении нового ядра. Чтобы использовать DKMS, установите пакет dkms.
С помощью DKMS устанавливаются драйверы из официальных репозиториев. Также с помощью DKMS можно установить и драйверы из прочих репозиториев (например, rtl8812au, который чуть выше был взять в качестве примера, это поддерживает) — для этого следуйте официальным инструкциям по установке от разработчиков, а описанный чуть выше метод запуска драйвера без установки предназначен для тестирования.
Запрет на включение модулей (чёрный список модулей)
Чёрный список в контексте модулей ядра — это механизм, предотвращающий загрузку модуля ядра. Это может быть полезно, если, например, связанное оборудование не требуется или если загрузка этого модуля вызывает проблемы: например, могут быть два модуля ядра, которые пытаются управлять одним и тем же компонентом оборудования, и загрузка их вместе приведёт к конфликту.
Использование файлов в /etc/modprobe.d/
Создайте файл .conf внутри /etc/modprobe.d/ и добавьте строку для каждого модуля, который вы хотите добавить в черный список, используя ключевое слово blacklist. Например, если вы хотите запретить загрузку модуля pcspkr, создайте файл /etc/modprobe.d/nobeep.conf и добавьте в него строку:
Некоторые модули загружаются как часть initramfs. То есть можно выделить модули, которые:
- загружаются из файлов .ko
- загружаются как часть initramfs
Для запрета загрузки модулей первого типа (загружаемые из файлов .ko) достаточно внести запись об этом модуле в файл /etc/modprobe.d/*.conf с директивой blacklist.
Для модулей второго типа (загружаемые как часть initramfs), кроме создания конфигурационного файла, также необходимо пересоздать ядро.
Примечание. Команда blacklist внесёт модуль в чёрный список, чтобы он не загружался автоматически. Но при этом модуль может быть загружен, если от него зависит другой модуль, не включенный в чёрный список, а также по прежнему можно загрузить модуль вручную. Тем не менее есть обходной путь для этого поведения; Команда install указывает modprobe запускать пользовательскую команду вместо того, чтобы как обычно вставлять модуль в ядро, поэтому вы можете принудительно заставить модуль всегда не загружаться с помощью рассмотренной далее конструкции. Допустим, вы создали файл /etc/modprobe.d/blacklist.conf чтобы заблокировать загрузку модуля ИМЯ_МОДУЛЯ. Чтобы это сделать надёжно, добавьте в этот файл:
Это надёжно заблокирует загрузку указанного модуля, а также любого другого, зависящего от него.
Как пересоздать ядро для блокировки модулей
Если вы блокируете модули, которые загружаются из initramfs, то после их добавления в файл /etc/modprobe.d/*.conf, необходимо пересоздать ядро.
На Debian, Kali Linux, Linux Mint, Ubuntu и их производных это делается так:
В Arch Linux, BlackArch и их производных это делается так:
В Arch Linux команда
распечатает все автоматически обнаруженные модули: чтобы предотвратить загрузку некоторых из этих модулей initramfs, внесите их в чёрный список в файле .conf в /etc/modprobe.d, и он будет добавлен хуком modconf во время генерации образа. Запуск
выведет список всех модулей, задействованных различными хуками (например, хук filesystems, хук block и т. д.).
Блокировка модулей в начале загрузки Linux (отключение модулей в командной строке ядра)
Это может быть очень полезно, если неисправный модуль делает невозможным загрузку вашей системы. Вы можете занести в чёрный список модули в меню загрузчика. Просто добавьте
в строку с параметрами загрузки ядра.
Примеры редактирования параметров загрузки ядра для популярных дистрибутивов вы найдёте в статье «Как в Linux сбросить забытый пароль входа». Также смотрите статью «Как изменить параметры загрузки Linux в UEFI».
Примечание. Если вы заносите в чёрный список более одного модуля, имейте в виду, что они разделены только запятыми. Пробелы или что-либо ещё могут нарушить синтаксис.
Рассмотрим практические примеры, когда пользователю может понадобиться блокировать загрузку модулей ядра.
Как заблокировать все сетевые интерфейсы на компьютере
Предположим, необходимо, чтобы на компьютере была заблокирована любая сетевая активность, то есть и проводные, и беспроводные сети. Существует команда rfkill, но она предназначена для блокировки только беспроводных сетей. Поэтому найдём другой способ.
Алгоритм действий следующий:
- Мы определим, какие драйверы используются сетевыми устройствами
- Заблокируем эти драйверы
Чтобы узнать, какие драйверы задействованы в Linux для работы сетевых карт, выполните команду:
Строки «configuration:» содержат информацию о драйверах. Для беспроводной карты это «driver=iwlwifi», а для проводного сетевого интерфейса это «driver=r8169».
Создаём файл /etc/modprobe.d/block-network.conf и добавляем в него:
Так выглядит настройка сети в нормальном состоянии, виден проводной и беспроводной адаптеры:
После перезагрузки невозможно будет включить сеть, поскольку компьютер не сможет использовать сетевые интерфейсы без драйверов:
При попытке загрузить модули вручную, например:
Эти модули не будут загружаться благодаря команде install.
Вы не сможете включить любую сеть вплоть до удаления файла /etc/modprobe.d/block-network.conf и перезагрузки. Тем не менее при подключении других сетевых адаптеров, они будут использоваться. Данный способ надёжно защитит от случайного использования сети при условии, что вы контролируете подключение новых физических устройств к компьютеру.
Как надёжно выключить веб камеру
На некоторых новых моделях ноутбуков веб камеру можно закрыть шторкой — на тот случай, если вы опасаетесь, что хакер может взломать ваш компьютер и следить за вами.
Сейчас мы научимся отключать драйвер веб камеры, чтобы её невозможно было использовать.
Даже если у вас ноутбук, скорее всего, веб камера подключена внутри корпуса к USB хабу, то есть это USB устройство. Вывести список USB устройств в системе можно командой:
Обратите внимание на IMC Networks USB2.0 HD UVC WebCam в приведённом списке — это и есть веб камера ноутбука.
Чтобы определить драйверы, которые нужны для работы любого USB или с PCI устройства в вашей системе, обратитесь к статье «Как узнать, какие модули (драйверы) связаны с USB и PCI устройствами».
Воспользуемся следующей командой:
Видим, что для устройства USB2.0 HD UVC WebCam используется драйвер uvcvideo.
Создаём файл /etc/modprobe.d/block-webcam.conf и блокируем в нём запуск модуля ядра uvcvideo:
После перезагрузки система не сможет использовать вебкамеру, пока не будет удалён файл block-webcam.conf и выполнена перезагрузка.
Настройка параметров модуля
Чтобы передать параметр в модуль ядра, вы можете передать их вручную с помощью modprobe или убедиться, что определённые параметры всегда применяются с помощью файла конфигурации modprobe или с помощью командной строки ядра.
Вручную во время загрузки, используя modprobe
Основной способ передачи параметров в модуль — использование команды modprobe. Параметры указываются в командной строке с использованием простых назначений ключ=значение:
Используя файлы в /etc/modprobe.d/
Файлы в каталоге /etc/modprobe.d/ можно использовать для передачи настроек модуля в udev, который будет использовать modprobe для управления загрузкой модулей во время загрузки системы. Файлы конфигурации в этом каталоге могут иметь любое имя, если они заканчиваются расширением .conf, например /etc/modprobe.d/myfilename.conf. Синтаксис:
Например, содержимое файла /etc/modprobe.d/thinkfan.conf:
Добавление опций модуля во время загрузки системы (ииспользование командной строки ядра)
Если модуль встроен в ядро, вы также можете передать опции модулю с помощью командной строки ядра. Для всех распространённых загрузчиков правильный синтаксис:
Псевдонимы
Псевдонимы — это альтернативные имена для модуля. Например:
означает, что вы можете использовать
Вы также можете использовать подстановочные знаки в стиле оболочки, поэтому
имеет тот же эффект.
Чтобы создать псевдоним в конфигурационном файле /etc/modprobe.d/myalias.conf:
Некоторые модули имеют псевдонимы, которые используются для автоматической их загрузки, когда они нужны приложению. Отключение этих псевдонимов может предотвратить автоматическую загрузку, но все равно позволит загружать модули вручную.
Пример файла /etc/modprobe.d/modprobe.conf
Ошибки при работе с модулями
Модули не загружаются
Если определённый модуль не загружается и в журнале загрузки
говорится, что модуль находится в чёрном списке, но в каталоге /etc/modprobe.d/ нет соответствующей записи, проверьте другую папку modprobe на наличие записи о занесении в чёрный список: /usr/lib/modprobe.d/.
Модуль не будет загружен, если строка «vermagic», содержащаяся в модуле ядра, не соответствует значению текущего запущенного ядра. Если известно, что модуль совместим с текущим работающим ядром, проверку «vermagic» можно игнорировать с помощью modprobe —force-vermagic.
Предупреждение. Игнорирование проверок версий для модуля ядра может привести к сбою ядра или непредсказуемому поведению системы из-за несовместимости. Используйте —force-vermagic только с максимальной осторожностью.
modprobe: ERROR: could not insert ‘…’: Unknown symbol in module, or unknown parameter (see dmesg)
Ошибка вызвана тем, что ранее модуль присутствовал в системе и о нём оставлена запись в списке зависимостей, но на момент ошибки модуль отсутствует (удалён).
Для обновления списка зависимостей выполните команду:
modprobe: FATAL: Module … not found in directory /lib/modules/…
Означает, что модуль, который вы пытаетесь запустить, не существует.
- описка в названии модуля
- не установлен или удалён содержащий указанный модуль пакет
Если ранее модуль (драйвер) запускался, но затем появилась указанная ошибка, то она может быть связана с тем, что было обновлено ядро, а модуль для новой версии ядра не был скомпилирован.