2013-09-04 4 views
1

У меня есть программа, которая нуждается в установке отпечатка пальца операционной системы, как в MSW, хранящейся в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ MachineGuid В Microsoft Windows я готов для себя, но я не могу найти эквивалент для Linux. Есть ли что-то близкое к этому в Linux? У меня не будет доступа к корню, поэтому ничего подобного dmidecode -s system-uuid не может быть и речи.Linux Equivalent MachineGuid

Пример будет приятным, но не необходимым.

+0

С какой целью вы собирались использовать это? В большинстве программ Unixy используется имя хоста для идентификации машины; есть ли конкретная причина, которая может не сработать для вас? – BRFennPocock

ответ

2

Одной из возможностей было бы читать /etc/ssh/ssh_host_{d,r}sa_key.pub, которые могут быть прочитаны всеми и генерируются случайным образом во время установки.

Очевидно, проблема в том, что эти файлы могут вообще не существовать, если нет SSH (сервера). Они также часто копируются с более старой установки.

+0

Я вижу, но это ненадежно по очевидной причине, если нет способа генерировать их, если они не существуют. Заставлять пользователя устанавливать их не вариант! –

1

Канонический Unix'y ответ является идентификатор хоста, но на практике это часто заканчивается отступая на хэш IP адреса ...

#include <unistd.h> 

    long gethostid(void); 
    int sethostid(long hostid); 

DESCRIPTION 
    gethostid() and sethostid() respectively get or set a unique 32-bit identifier for 
    the current machine. The 32-bit identifier is intended to be unique among all UNIX 
    systems in existence. This normally resembles the Internet address for the local 
    machine, as returned by gethostbyname(3), and thus usually never needs to be set. 

NOTES 
    In the glibc implementation, the hostid is stored in the file /etc/hostid. (In glibc 
    versions before 2.2, the file /var/adm/hostid was used.) 

    In the glibc implementation, if gethostid() cannot open the file containing the host 
    ID, then it obtains the hostname using gethostname(2), passes that hostname to geth‐ 
    ostbyname_r(3) in order to obtain the host's IPv4 address, and returns a value 
    obtained by bit-twiddling the IPv4 address. (This value may not be unique.) 
+0

Как это работает в случае динамической IP-адресации. Я имею в виду, если компьютеры подключены к серверу DHCP? Будет ли оно изменяться каждый раз, если «невозможно открыть файл, содержащий идентификатор хоста» при каждом запуске компьютера? –

+0

Да, это было бы в значительной степени, в таком случае. – BRFennPocock

1

Я предполагаю, что вы пытаетесь сделать это, потому что вы хотите «заблокировать» программное обеспечение для определенной части оборудования?

Один из вариантов - использовать MAC-адрес сетевого интерфейса для идентификации текущего компьютера. MAC-адрес довольно легко получить, см. this Stackoverflow question.

Это хорошо работает вокруг проблем с изменением IP-адресов и т. Д., Поскольку MAC-адрес интерфейса значительно реже изменяется, если кто-то не заменяет сетевую карту.

+0

Я хочу заблокировать его для конкретной подписи ОС, как то, что Windows Generates, но привязать ее к аппаратной надежно даже будет лучшим решением. –

0

Я считаю, что MAC-адреса не являются хорошим выбором для идентификации машины. Существует много USB-ключей, которые могут быть подключены к ПК для обеспечения мобильного/3G/H +/и т. Д. сетевой интерфейс, поэтому, пока такой ключ подключен к аппарату, у него будет другой идентификатор, полученный из доступных MAC-адресов сетевого интерфейса.

Есть/etc/machine-id (/ var/lib/dbus/идентификатор машины), доступный в вашей целевой системе?

см: http://man7.org/linux/man-pages/man5/machine-id.5.html

см: http://0pointer.de/blog/projects/ids.html