Вопрос или проблема
Я искал ответ на свой вопрос, но никто не ответил мне:
Является ли machine-id таким же уникальным, как UUID материнской платы (полученный с помощью команды “get csproduct UUID” на Windows)? И достаточно ли надежен machine-id для привязки лицензии помимо MAC-адреса? Или какой UUID на системах *nix можно использовать для лицензирования?
Да, в настоящее время.
Эта информация изложена в руководстве по systemd. Значение в /etc/machine-id
изначально не являлось действительным UUID, поскольку разработчики systemd изначально не написали корректный код для генерации UUID версии 4. Но с тех пор это было исправлено.
Если вы связываете лицензию с машинным идентификатором, имейте в виду, что он может измениться…
- … если кто-то удалит
/etc/machine-id
, и он будет воссоздан при следующей загрузке; - … если
/etc
(обычно на корневом разделе на практике) не смонтирован в режиме чтения-записи при загрузке,/etc/machine-id
будет недействительным или отсутствовать, и/etc
не может быть позже перемонтирован в режиме чтения-записи, позволяя записать/etc/machine-id
; - … если дисковый объем, содержащий
/etc
, заменен на другой, отличающийся, дисковый объем, пока операционная система не работает, или кто-то изменяет machine-id на дисковом объеме с помощью инструмента, такого какsystemd-firstboot
; - … если система является “бессостоянием”, как это называет команда systemd, и (в принципе, это немного сложнее)
/etc/machine-id
воссоздается при каждой загрузке; - … внутри контейнеров на машине.
Но он, намеренно, не изменится …
- … если материнская плата, процессор или сетевой интерфейс заменены;
- … если MAC-адреса сетевых интерфейсов изменены;
- … если корневой объем (более конкретно, объем, содержащий
/etc
) скопирован на заменяющий диск с помощью чего-то вродеdd
илиpax
; - … во время работы системы (если только системный администратор не вмешивается в это намеренно);
- … от одной загрузки до другой, если
/etc/machine-id
действителен, не пуст и доступен для записи в первый раз.
заметки по переносимости
- Не используйте
/var/lib/dbus/machine-id
вместо/etc/machine-id
.- Исходный файл Desktop Bus, который породил
/etc/machine-id
, к сожалению, не находится в фиксированном месте, которое является переносимым между операционными системами. На некоторых системах его можно найти по адресу/var/lib/dbus/machine-id
; на других — по адресу/var/db/dbus/machine-id
. - Около 2013 года D-Bus был модифицирован для использования
/etc/machine-id
, если он существует, заменяя файл в/var
, где бы он ни находился. - В 2015 году люди из Debian/Ubuntu установили по умолчанию, что файл D-Bus в
/var
является символической ссылкой на/etc/machine-id
, в любом случае.
- Исходный файл Desktop Bus, который породил
/etc/machine-id
не ограничивается лишь доступностью в процессе загрузки после того, как/var
смонтирован или после активации сетевых интерфейсов.- Хотя ванильные версии FreeBSD/TrueOS, NetBSD и OpenBSD не предоставляют
/etc/machine-id
, набор инструментов nosh предоставляет переносимые инструменты (которые также могут использоваться в Linux) для его создания, которые также знают о местах, специфичных для BSD, где такие идентификаторы ожидаются, и поддерживают согласованность между ними.
Дополнительная литература
- Леннарт Поттеринг и др..
machine-id
. Страницы руководства systemd. Freedesktop.org. - Джонатан де Бойн Поллард (2019).
machine-id
. Руководство nosh. Программы ДждеБП. - Джонатан де Бойн Поллард (2017).
/etc/machine-id
. Гид. Руководство nosh. Программы ДждеБП. - Как dbus вычисляет идентификатор машины?
- Почему мой журнал systemd не сохраняется между перезагрузками?
- Можно ли изменять /etc/machine-id?
- Почему мои клонированные Linux ВМ борются за один и тот же IP
Согласно быстрому поиску в Google:
- /etc/machine-id должен быть уникальным и изменяться только при переустановке машины, но предоставляется systemd, которого нет на многих системах
- /var/lib/dbus/machine-id должен быть уникальным и должен быть гораздо более широко доступен. Документы говорят, что он может изменяться при изменении аппаратной конфигурации, но на практике, я думаю, он изменяется только при переустановке машины
- вы можете использовать system-uuid, но вам нужно быть root, и он изменится, если заменится материнская плата
/var/lib/dbus/machine-id
выглядит как лучший метод для большинства ситуаций.
Дополнительная литература:
/etc/machine-id
и /var/lib/dbus/machine-id
могут быть одинаковыми на разных машинах. У меня одна дистрибуция установлена на двух машинах, и их идентификаторы одинаковые.
MAC можно легко изменить на нужный и может быть изменен ядром.
В Linux нет постоянных и надежных идентификаторов. Все можно изменить. Чтобы получить лицензию, вам придется заново изобретать колесо.
Ответ или решение
Является ли machine-id UUID?
Вопрос о том, является ли идентификатор машины (machine-id) в системах на базе Linux уникальным идентификатором, эквивалентным UUID, получаемому с помощью команды "get csproduct UUID" в Windows, требует глубокого анализа.
Определение machine-id
Идентификатор машины (machine-id) – это уникальная строка, которая используется для идентификации системы, на которой она установлена. В современных системах на базе systemd данный идентификатор хранится в файле /etc/machine-id
. Ранее machine-id не был корректно сгенерирован в формате UUID, но эта проблема была решена, и теперь machine-id соответствует стандарту UUID версии 4.
Уникальность machine-id по сравнению с UUID материнской платы
-
Статическая и динамическая природа:
-
machine-id: Обычно уникален среди установок системы и не меняется при заменах аппаратуры (например, материнской платы или процессора). Однако его значение может измениться в определенных сценариях, таких как:
- Удаление файла
/etc/machine-id
, за которым следует его восстановление. - Если система является "бессостоявшей" (stateless), где machine-id может быть сгенерирован заново при каждом запуске.
- Использование системы контейнеров, где machine-id может изменяться.
- Удаление файла
-
UUID материнской платы: UUID материнской платы более стационарен. Он не изменяется, если только сама материнская плата не заменяется, что делает его более предсказуемым для использования в лицензировании.
-
-
Надежность и целостность:
- Использование machine-id для связывания лицензий имеет свои риски. Он может измениться при обстоятельствах, которые могут быть вне контроля пользователя. Следует учитывать, что реже machine-id сохраняет свою уникальность из-за зависимости от действий администратора.
Рекомендации по лицензированию
При выборе уникального идентификатора для лицензирования важно учитывать следующее:
-
machine-id: Удобен и легко доступен на системах с systemd, однако следует полагаться на дополнительные механизмы управления, чтобы гарантировать его стабильность.
-
MAC-адрес: Хотя MAC-адреса сетевых интерфейсов часто используются для идентификации, они также могут быть изменены. Более того, на виртуальных машинах разные экземпляры могут бороться за один и тот же адрес, что также может вызвать проблемы.
-
UUID и другие идентификаторы: Если уникальный идентификатор должен оставаться неизменным при любых условиях, UUID материнской платы будет более надежным выбором.
Заключение
Machine-id представляет собой потенциально уникальный идентификатор для систем на базе Linux, но его использование в контексте лицензирования требует осторожности и принятия во внимание возможные сценарии изменения. Идентификатор материнской платы, хотя он и менее доступен, может предоставить большую стабильность. Важно тщательно продумать, какой идентификатор использовать в зависимости от обстоятельств и требований к лицензированию.