В статье описаны методы извлечения идентификационных данных из системы Linux.
Машины - это совокупность аппаратных средств, собранных в систему. Компьютеры не являются исключением со своими компонентами:
- центральный процессор (ЦП)
- память с произвольным доступом (ОЗУ)
- материнская плата
- вторичное хранилище
Как и отдельные компоненты, многие системы имеют идентификаторы, такие как марка и модель, а также уникальный серийный номер. Для пользовательских конфигураций мы можем использовать собственные идентификаторы или идентификаторы операционной системы (ОС).
В этом руководстве мы рассмотрим способы извлечения или генерации уникального идентификатора (ID) из Linux-машины и для нее в целом. Сначала мы кратко определим, что такое идентификатор, и проверим, какие источники мы можем использовать для его получения. Далее мы рассмотрим некоторые из этих источников. После этого мы покажем три способа получения информации об идентификаторе для системы. Наконец, обсуждается создание пользовательских идентификаторов.
Идентификация машины и источники данных
Для наших целей мы определяем идентификацию машины как относительно небольшой фрагмент информации, который мы можем использовать для однозначной идентификации машины с точки зрения аппаратного обеспечения. В отличие, например, от знания того, когда был установлен Linux, мы в основном фокусируемся на физических компонентах.
На самом деле, производители программного обеспечения часто используют пользовательские идентификаторы для привязки лицензии на продукт к конкретной системе.
Существует несколько источников данных, которые мы используем для извлечения такой информации для всей машины:
- /sys sysfs псевдо-файловая система
- утилита dmidecode
- утилита списка оборудования lshw
Важно отметить, что перечисленные выше варианты были выбраны на основе стандартов, доступности и полезности. В зависимости от идентификационных данных мы можем использовать один или несколько из этих методов.
Например, команда dmidecode входит в состав многих дистрибутивов Linux. В ней мы используем опцию -string и определенные категории.
Вооружившись этими источниками, давайте посмотрим, как мы можем идентифицировать системы в различных сценариях.
Готовые машины
Иногда производители собирают полные вычислительные комплекты из отдельных компонентов. Например, многие конфигурации настольных компьютеров и ноутбуков часто поставляются в готовом виде.
Конечно, бренды и модели повторяются, поэтому они не совсем уникальны:
1 | dmidecode -s system-product-name |
Тем не менее, такие готовые продукты обычно имеют уникальный идентификатор. В Linux, в зависимости от типа системы, этот ID может быть частью интерфейса DMI:
1 | dmidecode --string system-uuid |
Используя system-uuid, мы изолируем только шестнадцатеричный серийный номер, присвоенный системе при производстве и сборке.
В качестве альтернативы можно использовать system-serial-number:
1 | dmidecode --string system-serial-number |
Этот тег часто используется при обслуживании, поэтому его легче запомнить. Чтобы получить полную картину всей доступной информации о системе в целом, мы можем использовать SYSTEM -type с dmidecode:
1 | dmidecode --type SYSTEM |
Примечательно, что есть и другие способы получить ту же информацию.
Давайте попробуем сделать это с помощью /sys:
1 2 | cat /sys/class/dmi/id/product_uuid cat /sys/class/dmi/id/product_serial |
Наконец, мы также можем использовать lshw:
1 | lshw |
Конечно, некоторые машины изготавливаются на заказ, поэтому эти записи могут быть 'Not Specified' или даже пустыми, в зависимости от обстоятельств. В таких случаях мы можем обратиться к другим решениям.
Материнская плата
Чтобы идентифицировать машину, мы можем использовать ее главную плату, также называемую базовой или материнской.
Поскольку она является основой и точкой соприкосновения всех остальных частей, материнская плата ограничивает количество компонентов, совместимых с данной системой. Таким образом, может оказаться не так просто заменить материнскую плату без замены других компонентов.
Давайте посмотрим, как мы можем определить основную плату системы из наших источников:
1 | dmidecode --string baseboard-serial-number |
Очень важно, что серийный номер материнской платы может совпадать с другими идентификаторами, такими как system-serial-number из dmidecode, особенно если это не короткая служебная метка.
Такое дублирование серийного номера может означать, что производитель не предоставил информацию через DMI. Однако дублирование идентификаторов также может быть признаком того, что мы работаем в виртуальной среде.
Идентификатор машины Linux
Хотя это также связано с программным обеспечением, машины Linux обычно предоставляют свой собственный идентификатор в файле /etc/machine-id:
1 | cat /etc/machine-id |
Иногда этот идентификатор является ссылкой на /var/lib/dbus/machine-id, сгенерированный как случайное число программой dbus-uuidgen.
Из-за этого такой идентификатор сопровождается несколькими потенциальными проблемами:
- относится к программному, а не аппаратному обеспечению
- может быть динамически изменен
- может быть одинаковым на клонированных виртуальных машинах
Даже когда нет единых надежных идентификаторов, мы можем генерировать свои собственные. Давайте посмотрим, как это сделать.
Генерация идентификаторов
Когда системный идентификатор не говорит нам достаточно или мы не можем использовать его по какой-либо причине, мы обычно все равно можем извлечь стабильную информацию для создания собственного идентификатора машины.
Например, мы можем хэшировать любую аппаратную информацию:
- размеры устройств хранения данных
- схема разбиения на разделы
- объем основной памяти
- характеристики процессора
- количество портов
Фактически, может быть добавлен любой идентификатор программного обеспечения:
- вывод uname
- имя хоста
- информация об инодах таких каталогов, как /home, /dev/, /opt и других.
Давайте проведем простой расчет:
1 2 | echo "$(fdisk --list)$(lshw -short)" | md5sum | cut --delimiter=' ' --fields=1 |
Здесь мы используем системную утилиту GNU coreutils md5sum для вычисления хэша двух выходных данных команды:
- информация о диске и схема разбиения из fdisk
- общая информация об аппаратном обеспечении из lshw
Наконец, мы используем cut, чтобы получить только фактическую MD5-сумму.
Заключение
В этой статье мы рассмотрели методы извлечения идентификатора из системы Linux. Мы обсудили источники, инструменты и альтернативы. В заключение следует отметить, что выбор метода получения идентификатора машины в Linux зависит от системы и цели использования информации.