Öncelikle, CPUID'nin Intel Pentium III'ten sonraki herhangi bir sistem için kesinlikle yaygın olarak erişilebilen benzersiz bir tanımlayıcı işaret olmadığını lütfen unutmayın . MAC adresleri ile karıştırmak kesinlikle benzersiz işaretlere yol açabilir, ancak bu sadece MAC'lerin kendilerinin benzersiz niteliklerinden kaynaklanır ve bu durumda CPUID durumdan başka bir şey değildir. Dahası, ortaya çıkan hashın anakartın UUID'sinden daha benzersiz olması muhtemel değildir ve alınması çok daha kolaydır ve süreç hataya çok daha az eğilimlidir. Gönderen wikipedia.org/wiki/cpuid :
EAX = 3 : İşlemci Seri Numarası
Ayrıca bkz: Pentium III § Gizlilik sorunları hakkında tartışma
Bu işlemcinin seri numarasını döndürür. İşlemci seri numarası Intel Pentium III'te tanıtıldı, ancak gizlilik endişeleri nedeniyle bu özellik daha sonraki modellerde uygulanmıyor (PSN özellik biti her zaman temizlenir). Transmeta'nın Efficeon ve Crusoe işlemcileri de bu özelliği sağlar. Ancak AMD işlemciler bu özelliği hiçbir CPU modelinde uygulamamaktadır.
Ayrıştırılmış bir cpuid'i yaparak cat /proc/cpuinfoveya hatta sadece kendiniz görüntüleyebilirsiniz lscpu.
Bu, linux çekirdeği tarafından tanınan ağ arabirimleri için tüm MAC adreslerini alır, sanırım:
ip a | sed '\|^ *link[^ ]* |!d;s|||;s| .*||'
Rastgele oluşturulmuş MAC'lara sahip sanal nics içeriyorsa, bu listeye filtre uygulamak gerekebilir. Bunu ipdoğrudan çağrıdaki bayraklarla yapabilirsiniz . Bunun ip a helpnasıl yapılacağı hakkında bilgi için bkz .
Ayrıca, bu sorunun benzersiz olduğunu ipve kullanmanız durumunda ele alınması gerektiğini ifconfig, ancak ağ paketinin birip parçası olan ve aktif olarak bakımı yapılan - bir üye olan - daha güvenilir bir şekilde ele alınabileceğini unutmayın. ait paketin Linux ve son testere 2001 yılında bırakma . Çekirdeğin son sürümünden bu yana değişen özellikler nedeniyle, bazı ağ özelliği bayraklarını yanlış bildirdiği bilinmektedir ve mümkünse kullanımından kaçınılmalıdır.iproute2ifconfignet-toolsifconfig
Bununla birlikte, çekirdek arabirim adları ile filtrelemenin böyle eth[0-9]güvenilir bir yöntem olmadığını anlayın, çünkü bunlar udevönyükleme işlemi sırasında paralel algılama sırasına göre değişebilir . Bununla ilgili daha fazla bilgi için lütfen Öngörülebilir Ağ Adlarına bakın .
Çünkü dmidecodebenim sistemde yüklü değil ben ilk başta gibi oluşturulan sabit disk seri listesi karma düşündüm:
lsblk -nro SERIAL
Do lsblk --helpbu listeyi rafine bazı ipuçları - Disk tipine göre, derler. Ayrıca düşünün lspcive / veya lsusbbelki.
Bunları birleştirmek kolaydır:
{ ip a | sed ... ; lsblk ... ; } | #abbreviated... for brevity...
tr -dc '[:alnum:]' | #deletes all chars not alphanumeric - including newlines
sha256sum #gets your hash
Bana bildirdiğiniz gibi, kullanıcının kaynaklarını benzersiz kimliklerine girdiğinizde kilitliyorsunuz ve sabit disklerin varlığına güvenilemiyor, yapışmamı değiştirmeyi düşündüm.
Bu göz önüne alındığında, dosya sistemine tekrar baktım ve /sys/class/dmi/idklasörü buldum . Birkaç dosyayı kontrol ettim:
cat ./board_serial ./product_serial
###OUTPUT###
To be filled by O.E.M.
To be filled by O.E.M.
Ancak, bu oldukça iyi görünüyor, ancak çıktıyı yayınlamayacağım:
sudo cat /sys/class/dmi/id/product_uuid
dmidecodeZaten onun bilgilerinin çoğunu burada alıyor ve aslında öyle görünüyor . Buna göre man dmidecode, argümanı belirterek bu aracı kullanmanızı büyük ölçüde basitleştirebilirsiniz:
dmidecode -s system-uuid
Yine de daha basit, sadece dosyayı okuyabilirsiniz. Bu dosyanın özellikle bir anakartı tanımladığını unutmayın. İşte, 2007 yılında, bu ihracatları /sysfssanal dosya sistemine uygulayan çekirdek düzeltme ekinden bir alıntı :
+DEFINE_DMI_ATTR_WITH_SHOW(bios_vendor, 0444, DMI_BIOS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(bios_version, 0444, DMI_BIOS_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(bios_date, 0444, DMI_BIOS_DATE);
+DEFINE_DMI_ATTR_WITH_SHOW(sys_vendor, 0444, DMI_SYS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(product_name, 0444, DMI_PRODUCT_NAME);
+DEFINE_DMI_ATTR_WITH_SHOW(product_version, 0444, DMI_PRODUCT_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(product_serial, 0400, DMI_PRODUCT_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(product_uuid, 0400, DMI_PRODUCT_UUID);
+DEFINE_DMI_ATTR_WITH_SHOW(board_vendor, 0444, DMI_BOARD_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(board_name, 0444, DMI_BOARD_NAME);
+DEFINE_DMI_ATTR_WITH_SHOW(board_version, 0444, DMI_BOARD_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(board_serial, 0400, DMI_BOARD_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(board_asset_tag, 0444, DMI_BOARD_ASSET_TAG);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_vendor, 0444, DMI_CHASSIS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_type, 0444, DMI_CHASSIS_TYPE);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_version, 0444, DMI_CHASSIS_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_serial, 0400, DMI_CHASSIS_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_asset_tag, 0444, DMI_CHASSIS_ASSET_TAG);
Anakart yeterliyse, bu verileri sistemi tanımlamak için tek başına kullanabilirsiniz. Ancak bu bilgileri, sabit disklerle yapabileceğinizi gösterdiğim gibi sistemin MAC'leriyle birleştirebilirsiniz:
sudo sh <<\CMD | tr -dc '[:alnum:]' | sha256sum
ip a | sed '\|^ *link[^ ]* |!d;s|||;s| .*||'
cat /sys/class/dmi/id/product_uuid
CMD
Linux çekirdeği ayrıca sizin için UUID'ler de oluşturabilir:
cat /proc/sys/kernel/random/uuid #new random uuid each time file is read
Veya:
cat /proc/sys/kernel/random/boot_id #randomly generated per boot
Verilmiş, rasgele oluşturulmuş ve sen tekrar düşünmek kimlik ataması zorunda kalacak, ancak alır gibi yaklaşık olarak kolay olsun en azından. Ve bunu anahtarlamak için bir yol bulabilirseniz oldukça sağlam olmalıdır.
Son olarak, her EFI sabit yazılım ortamı değişkeni kendi UUID'sini içerdiğinden, UEFI sistemlerinde bunu yapmak çok daha kolay hale gelir. Ortam değişkeni {Platform,}LangCodes-${UUID}her UEFI sisteminde bulunmalı, yeniden başlatmalara ve hatta çoğu ürün yazılımı yükseltmelerine ve değişikliklerine devam etmelidir ve efivarfsmodül yüklü herhangi bir Linux sistemi adlardan birini veya her ikisini aşağıdaki gibi basit bir şekilde listeleyebilir:
printf '%s\n' /sys/firmware/efi/efivars/*LangCodes-*
Eski form - LangCodes-${UUID}görünüşe göre artık kullanılmıyor ve daha yeni sistemlerde olmalı, PlatformLangCodes-${UUID}ancak spesifikasyonlara göre, her UEFI sisteminde bir veya diğeri mevcut olmalıdır. Biraz çaba harcamadan, kendi yeniden başlatma kalıcı değişkenlerinizi tanımlayabilir ve belki de çekirdeğin UUID üretecini bu şekilde daha fazla kullanabilirsiniz. Eğer ilgileniyorsanız, efitools'a bakın .