Pouvons-nous générer un identifiant unique pour chaque PC, quelque chose comme uuuidgen, mais cela ne changera jamais sauf s'il y a des changements matériels? Je pensais à fusionner CPUID et MACADDR et les hacher pour générer un ID cohérent, mais je ne sais pas comment les analyser à l'aide du script bash, ce que je sais, c'est comment puis-je obtenir CPUID à partir de
dmidecode -t 4 | grep ID
et
ifconfig | grep ether
alors je dois combiner ces chaînes hexadécimales et les hacher en utilisant sha1 ou md5 pour créer une chaîne hexadécimale de longueur fixe.
Comment puis-je analyser cette sortie?
bash
- pour vous générer un UUID sur n'importe quel Linux.cat /proc/sys/kernel/random/uuid
.Réponses:
Que diriez-vous de ces deux:
Vous pouvez ensuite les combiner et les hacher avec:
Pour supprimer le tiret arrière, ajoutez un autre tuyau:
Comme @mikeserv le souligne dans sa réponse , le nom de l'interface peut changer entre les bottes. Cela signifie que ce qui est eth0 aujourd'hui pourrait être eth1 demain, donc si vous recherchez,
eth0
vous pourriez obtenir une adresse MAC différente sur des bottes différentes. Mon système ne se comporte pas de cette façon, je ne peux donc pas vraiment tester, mais les solutions possibles sont:Grep for
HWaddr
dans la sortie deifconfig
mais conservez-les tous, pas seulement celui correspondant à une carte réseau spécifique. Par exemple, sur mon système, j'ai:En saisissant les deux adresses MAC et en les transmettant
sha256sum
, vous devriez pouvoir obtenir un nom unique et stable, quel que soit le NIC appelé:Notez que le hachage est différent de ceux ci-dessus car je passe les deux adresses MAC renvoyées par
ifconfig
àsha256sum
.Créez à la place un hachage basé sur les UUID de vos disques durs:
la source
Tout d'abord, veuillez noter que le CPUID n'est certainement pas un marqueur d'identification unique communément accessible pour un système ultérieur à un Intel Pentium III. Bien que le hacher avec des adresses MAC puisse certainement conduire à des marqueurs uniques, cela n'est dû qu'aux qualités uniques des MAC eux-mêmes et le CPUID dans ce cas n'est rien de plus que circonstanciel. De plus, le hachage résultant n'est probablement pas plus unique que l'UUID de la carte mère, ce qui est beaucoup plus facile à récupérer et le processus est beaucoup moins sujet à l'erreur. De wikipedia.org/wiki/cpuid :
Vous pouvez afficher vous-même un processeur analysé en faisant
cat /proc/cpuinfo
ou même simplementlscpu
.Cela vous donne toutes les adresses MAC pour les interfaces réseau reconnues par le noyau linux, je pense:
Il peut être nécessaire de filtrer cette liste si elle peut inclure des cartes réseau virtuelles avec des MAC générés de manière aléatoire. Vous pouvez le faire avec des indicateurs dans l'appel à
ip
directement. Voirip a help
pour savoir comment procéder.Notez également que ce problème n'est pas propre à
ip
et doit également être traité si vous utilisezifconfig
, mais qu'il peut être traité de manière plus fiableip
- qui fait partie de laiproute2
suite réseau et est activement géré - qu'il ne peut le faireifconfig
- qui est membre dunet-tools
package et a vu une version Linux pour la dernière fois en 2001 . En raison de l'évolution des fonctionnalités du noyau depuis sa dernière version, ilifconfig
est connu de mal déclarer certains indicateurs de fonctionnalité de réseau et son utilisation doit être évitée si possible.Comprenez, cependant, que le filtrage avec des noms d'interface du noyau comme
eth[0-9]
n'est pas un moyen fiable de le faire, car ceux-ci peuvent changer en fonction de leur ordre de détection en parallèleudev
pendant le processus de démarrage. Veuillez consulter les noms de réseau prévisibles pour en savoir plus.Parce qu'il
dmidecode
n'est pas installé sur mon système, j'ai d'abord pensé à hacher une liste de publications en série sur le disque dur générées comme:Faites
lsblk --help
quelques indices pour affiner cette liste - par type de disque, par exemple. Considérez égalementlspci
et / oulsusb
peut - être.Les combiner est facile:
Comme vous m'avez informé que vous saisissez les ressources des utilisateurs de votre côté à leurs identifiants uniques, et que les disques durs ne peuvent pas être invoqués pour exister, j'ai pensé à changer de tactique.
Cela considéré, j'ai de nouveau examiné le système de fichiers et trouvé le
/sys/class/dmi/id
dossier. J'ai vérifié quelques fichiers:Cependant, celui-ci semble être assez bon, mais je ne publierai pas la sortie:
Je m'attends à ce que ce soit là où
dmidecode
obtient la plupart de ses informations de toute façon et en fait, cela lui ressemble . Selonman dmidecode
vous, vous pouvez également simplifier considérablement votre utilisation de cet outil en spécifiant l'argument:Plus simple encore, cependant, vous pouvez simplement lire le fichier. Notez que ce fichier particulier identifie spécifiquement une carte mère. Voici un extrait du correctif du noyau 2007 qui implémentait à l'origine ces exportations vers le
/sysfs
système de fichiers virtuel:Vous pourrez peut-être utiliser ces données seules pour identifier le système - si la carte mère est suffisante. Mais vous pouvez combiner ces informations avec les MAC du système de la même manière que j'ai démontré que vous pourriez faire avec les disques durs:
Le noyau Linux peut également générer des UUID pour vous:
Ou:
Certes, il est généré de manière aléatoire et vous devrez repenser l'attribution des ID, mais c'est à peu près aussi simple que possible d' obtenir au moins. Et cela devrait être assez solide si vous pouvez trouver un moyen de le saisir.
Enfin, sur les systèmes UEFI, cela devient beaucoup plus facile à faire, car chaque variable d'environnement du micrologiciel EFI comprend son propre UUID. La variable d'environnement
{Platform,}LangCodes-${UUID}
doit être présente sur chaque système UEFI, doit persister les redémarrages et même la plupart des mises à niveau et modifications du micrologiciel, et tout système Linux avec leefivarfs
module chargé peut répertorier l'un ou les deux noms aussi simplement que:L'ancienne forme -
LangCodes-${UUID}
est apparemment désormais obsolète , et sur les systèmes plus récents,PlatformLangCodes-${UUID}
mais, selon les spécifications, l'un ou l'autre devrait être présent dans chaque système UEFI. Avec peu d'effort, vous pouvez définir vos propres variables persistantes de redémarrage, et peut-être utiliser davantage le générateur UUID du noyau de cette façon. Si vous êtes intéressé, consultez efitools .la source
ip2
est spécifiquement conçu pour être analysé, et il se peut que je ne le fasse pas assez bien - je soupçonne que la même chose peut se faire presque sansgrep/sed
. On pourrait probablement faire la même chose aussi facilement avecudevadm
. Et chaque nom de variable d'environnement EFI est conçu pour être identifié de manière unique pour exactement ce genre de situations.De nombreuses distributions modernes expédient un fichier
/etc/machine-id
contenant une chaîne hexadécimale de 32 caractères très probablement unique. Il provient de systemd, où une page de manuel contient plus d'informations et peut être appropriée à votre objectif.la source
dbus
spécifique, je pense, et change si un système d'exploitation est effacé / réinstallé.Sur de nombreuses machines Linux, le fichier
/var/lib/dbus/machine-id
contient un identifiant unique pour chaque distribution Linux et est accessible par un appel àdbus_get_local_machine_id()
. C'est probablement le même que celui/etc/machine-id
mentionné ci-dessus. Il fonctionne également sur les installations Linux virtuelles. Je l'ai vérifié sur les distributions Ubuntu, SuSE et CentOS actuelles.la source
/etc/machine-id
.Avez-vous besoin que l'ID de la machine change lorsque le matériel change? L'ID d'ordinateur est-il utilisé pour protéger quelque chose? La meilleure façon, je pense, d'avoir un ID d'ordinateur "cohérent" est de stocker une chaîne aléatoire quelque part sur le système et de cette façon si l'un des composants matériels change, l'ID d'ordinateur ne changera pas non plus. C'est également bon pour les systèmes virtualisés où l'accès au matériel est limité et l'ID MAC est 00: 00: 00: 00
Essayez quelque chose comme ce script sh pour créer et obtenir l'ID:
la source
/dev/urandom
indique Linux de toute façon, vous pouvez simplement fairecat /proc/sys/kernel/random/uuid >$FILE
ce qui génère aléatoirement un UUID correctement formaté à chaque lecture. Néanmoins, toute persistance implémentée sur disque est sujette à suppression, et, à condition que cela soit acceptable et fournidbus
est installé, vous devriez probablement faire comme @XZS l'a suggéré à la place.Les autres réponses donnent un certain nombre de façons d'extraire les identifiants du matériel. Vous pouvez décider d'utiliser un seul matériel comme identifiant ou plusieurs. Cela est problématique si vous devez échanger ou remplacer arbitrairement des pièces de matériel.
Certaines personnes peuvent à la place stocker id un ID généré sur leur disque dur (ou utiliser l'UUID) mais les disques durs peuvent être clones.
Les modules TPM et le démarrage sécurisé peuvent fournir un moyen de lier la carte mère et d'autres matériels avec une installation sur un disque dur.
C'est toujours un peu plus facile dans ces cas si vous donnez plus d'informations sur ce que vous voulez accomplir.
la source