Выполните действие при обнаружении вторжения шасси

Данный:

как этот сервер лучше всего выполнить для выполнения некоторых действий (например, отправить электронное письмо или просто завершить работу), если шасси сервера будет открыто?

Пользовательский лес в security.stackexchange предложил опрос « /dev/nvram один раз каждые 0,5 секунды или около того [для] разбора его для любого значения хранит счет вторжения шасси ». (Лицензия: CC BY-SA 3.0 .) Это кажется неэффективным. Наверняка есть лучший способ?

One Solution collect form web for “Выполните действие при обнаружении вторжения шасси”

ниже приведено: firmware.intel.com/blog/accessing-uefi-variables-linux

Отправленный mfleming на 01/3/2014

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

 The Legacy efivars Interface 

Оригинальный интерфейс, написанный Matt Domsch, для взаимодействия с переменными UEFI, экспортируется через универсальную файловую систему Linux sysfs. Этот интерфейс был создан в дни EFI, до UEFI, для использования с машинами Itanium, и поэтому поставляется с определенным количеством исторического багажа.

Унаследованный интерфейс efivars экспортируется по пути «firmware / efi / vars /» относительно точки монтирования sysfs. Предполагая, что sysfs монтируется в / sys, каталог, содержащий файлы efivars, будет,

  /sys/firmware/efi/vars/ 

Помимо специальных файлов new_var и del_var , каждая запись в указанной выше точке монтирования сама по себе является каталогом – одним каталогом для каждой переменной UEFI, доступной во время выполнения,

  Boot0000-12345678-abcd-abcd-abcd-123456789abc/ Boot0001-12345678-abcd-abcd-abcd-123456789abc/ BootCurrent-12345678-abcd-abcd-abcd-123456789abc/ BootOrder-12345678-abcd-abcd-abcd-123456789abc/ BootSetup-12345678-abcd-abcd-abcd-123456789abc/ del_var Lang-12345678-abcd-abcd-abcd-123456789abc/ LangCodes-12345678-abcd-abcd-abcd-123456789abc/ new_var Setup-12345678-abcd-abcd-abcd-123456789abc/ 

Имя каталога для переменной UEFI состоит из имени переменной и глобально уникального идентификатора переменной (GUID). Этот пример:

  Boot0000-12345678-abcd-abcd-abcd-123456789abc/ 

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

  attributes data guid raw_var size 

Содержимое большинства этих файлов является читаемым человеком и соответствует параметрам переменной UEFI с тем же именем. Исключение составляет файл «raw_var», который содержит двоичные данные. Например, файл атрибутов для указанной выше загрузочной записи будет содержать нечто вроде следующих строк ASCII,

  EFI_VARIABLE_NON_VOLATILE EFI_VARIABLE_BOOTSERVICE_ACCESS EFI_VARIABLE_RUNTIME_ACCESS 

чтобы указать, что переменная является энергонезависимой и доступна как до, так и после вызова службы загрузки UEFI, ExitBootServices (). Невозможно написать эти человекочитаемые файлы – их единственная цель – предоставить пользователям информацию о переменной.

raw_var позволяет использовать переменную двоичную структуру данных UEFI, используемую в ядре, для чтения / записи из пользовательского пространства и является основной частью унаследованного интерфейса. Все модификации существующих переменных выполняются через этот файл, передавая объект struct efi_variable,

 struct efi_variable { efi_char16_t VariableName[1024/sizeof(efi_char16_t)]; efi_guid_t VendorGuid; unsigned long DataSize; __u8 Data[1024]; efi_status_t Status; __u32 Attributes; } __attribute__((packed)); 

Специальные файлы «new_var» и «del_var» в верхнем каталоге используются, как подразумевают имена, для создания и удаления переменных UEFI. Эти файлы не используют человеко-читаемый текст. Вместо этого объекты «struct efi_variable» передаются между ядром и пользовательским пространством, чтобы либо создавать новые, либо удалять существующие переменные UEFI.

Основной причиной сохранения интерфейса efivars в ядре Linux является то, что все еще есть инструменты, которые будут использовать этот интерфейс: инструмент efibootmgr, доступный во всех дистрибутивах Linux для управления порядком загрузки в системах UEFI, по-прежнему использует это наследие интерфейс.

Тем не менее, существуют некоторые ограничения интерфейса efivars, которые, сверхурочные, стали серьезной головной болью.

Наиболее очевидным недостатком является то, что существует верхний предел размера переменных данных UEFI, которые могут быть прочитаны / записаны. Из-за того, что были сконструированы структуры данных ядра, невозможно прочитать или записать более 1024 байта переменных данных, и для некоторых случаев использования этот предел является проблемой.

Кроме того, интерфейс efivars по своей сути требует инструментов для управления переменными UEFI, поскольку интерфейс имеет дело только с чтением и записью копий нетривиальной структуры данных «struct efi_variable» для переменной UEFI через «new_var», «del_var» и «raw_var», специальные файлы. Невозможно удалить переменную UEFI, не создавая объект struct efi_variable и записывая его в файл del_var.

Файловая система efivarfs

Чтобы обойти ограничения унаследованного интерфейса efivar, совершенно новая файловая система Linux была создана Мэтью Гарреттом и Джереми Керром. Эта новая файловая система была названа «efivarfs» и была частью выпуска Linux kernel v3.10.

Как и все другие файловые системы Linux, efivarfs должен быть смонтирован где-то для доступа к своим файлам, что может быть сделано путем выдачи следующей команды,

  mount -t efivarfs none /sys/firmware/efi/efivars 

Вместо каталогов efivarfs содержит файлы, имена которых построены из имени переменных UEFI и GUID,

  Boot0000-12345678-abcd-abcd-abcd-123456789abc Boot0001-12345678-abcd-abcd-abcd-123456789abc BootCurrent-12345678-abcd-abcd-abcd-123456789abc BootOrder-12345678-abcd-abcd-abcd-123456789abc BootSetup-12345678-abcd-abcd-abcd-123456789abc 

Несмотря на то, что каждый из файлов содержит двоичные данные (например, new_var , del_var унаследованного интерфейса), структура данных для efivarfs намного проще, состоящая всего из 4 байтов для битовой маски атрибутов переменной UEFI, а остальная часть – данные переменной UEFI , например

 struct new_efi_variable { u32 attributes; u8 data[0]; }; 

Все остальные части информации, такие как имя переменной, GUID и размер, выводятся из имени файла, который читается / записывается. Это делает тривиальным создание или удаление переменной UEFI путем создания или удаления файлов.

Например, следующая команда оболочки создает новую переменную,

  printf "\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc 

с именем myvar с идентификатором GUID 12345678-1234-1234-1234-123456789abc и EFI_VARIABLE_NON_VOLATILE , EFI_VARIABLE_BOOTSERVICE_ACCESS и EFI_VARIABLE_RUNTIME_ACCESS установленными в битовой EFI_VARIABLE_RUNTIME_ACCESS атрибута, за которым следует 1 байт данных (окончательный \x00 ).

Размер переменной, а также 4 байта данных атрибутов, можно найти, используя любой из обычных методов получения размера файла. Например, выполняя следующую команду оболочки,

  du -b myvar-12345678-1234-1234-1234-12345678abc 

будет печатать «5» – это 4 байта для битовой маски атрибута переменной, плюс один байт данных.

Чтобы удалить переменную, просто удалите ее из файловой системы efivarfs,

  rm myvar-12345678-1234-1234-1234-12345678abc 

Очевидно, что это гораздо более интуитивный интерфейс для доступа к переменным UEFI из командной строки и из сценариев оболочки. Самое главное, нет ограничений на количество данных, которые могут быть прочитаны / записаны для переменной UEFI, в отличие от устаревшего интерфейса.

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

В этой статье мы кратко обсудили два решения, которые Linux предоставляет для доступа к переменным UEFI во время выполнения. В то время как новая файловая система efivarfs предоставляет полезный интерфейс для доступа к переменным UEFI из сценариев оболочки (и даже из командной строки), устаревший интерфейс по-прежнему используется некоторыми инструментами, и в некоторых ситуациях доступные для чтения файлы могут быть намного полезнее, чем бинарный только интерфейс efivarfs.

Мэтт Флеминг – инженер-программист в технологическом центре Intel с открытым исходным кодом и ядро ​​Linux (U) EFI.

  • Параметры cp --no-clobber vs. -update
  • rm при удалении невоспроизводимых файлов
  • Каков шрифт, используемый для документации GNU?
  • Пониженный GNU не работает
  • Есть ли простая ОС GNU / Linux?
  • gtga для cygwin
  • Пакетное переименование папок с помощью одной команды bash
  • Имеются ли отчеты о ходе выполнения / данные регистрации на stderr или stdout?
  • Как я могу рассчитывать и форматировать длительность дат, используя инструменты GNU, а не дату результата?
  • В чем разница между «dir» и «ls»?
  • Как совместимы системные утилиты GNU с Linux?
  • на daemon создает пустые задачи
  • Linux и Unix - лучшая ОС в мире.