Bisakah kita menghasilkan id unik untuk setiap PC, seperti uuuidgen, tetapi tidak akan pernah berubah kecuali ada perubahan perangkat keras? Saya sedang berpikir untuk menggabungkan CPUID dan MACADDR dan hash mereka untuk menghasilkan ID yang konsisten, tetapi saya tidak tahu bagaimana mem-parsing mereka menggunakan skrip bash, yang saya tahu adalah bagaimana saya bisa mendapatkan CPUID dari
dmidecode -t 4 | grep ID
dan
ifconfig | grep ether
maka saya perlu menggabungkan string hex dan hash menggunakan sha1 atau md5 untuk membuat string hex panjang tetap.
Bagaimana saya bisa menguraikan output itu?
bash
- untuk menghasilkan UUID di linux apa pun.cat /proc/sys/kernel/random/uuid
.Jawaban:
Bagaimana dengan dua ini:
Anda kemudian dapat menggabungkan dan hash dengan:
Untuk menghapus trailing dash, tambahkan satu pipa lagi:
Seperti yang ditunjukkan @mikeserv dalam jawabannya , nama antarmuka dapat berubah di antara booting. Ini berarti bahwa apa yang dimaksud dengan eth0 hari ini mungkin adalah eth1 besok, jadi jika Anda
eth0
mengerti Anda mungkin akan mendapatkan alamat MAC yang berbeda pada bot yang berbeda. Sistem saya tidak berperilaku seperti ini sehingga saya tidak bisa benar-benar menguji tetapi solusi yang mungkin adalah:Terima
HWaddr
outputifconfig
tetapi simpan semuanya, tidak hanya yang sesuai dengan NIC tertentu. Sebagai contoh, pada sistem saya, saya memiliki:Dengan mengambil kedua alamat MAC dan melewati mereka
sha256sum
, Anda harus bisa mendapatkan nama yang unik dan stabil, terlepas dari apa NIC disebut apa:Perhatikan bahwa hash berbeda dari yang di atas karena saya lewat kedua alamat MAC dikembalikan oleh
ifconfig
kesha256sum
.Buat hash berdasarkan UUID hard drive Anda sebagai gantinya:
sumber
Pertama, harap perhatikan bahwa CPUID jelas bukan penanda pengidentifikasi unik yang dapat diakses secara umum untuk sistem apa pun selain Intel Pentium III. Meskipun hashing dengan alamat MAC tentu saja dapat menyebabkan penanda unik, ini hanya disebabkan oleh kualitas unik dari MAC itu sendiri dan CPUID dalam hal ini tidak lebih dari keadaan langsung. Selain itu, hash yang dihasilkan tidak akan lebih unik dari UUID motherboard, dan itu jauh lebih mudah untuk diambil dan prosesnya jauh lebih mudah untuk dikorbankan. Dari wikipedia.org/wiki/cpuid :
Anda dapat melihat cpuid yang diurai sendiri dengan melakukan
cat /proc/cpuinfo
atau bahkan adillscpu
.Ini memberi Anda semua alamat MAC untuk antarmuka jaringan yang dikenali oleh kernel linux, saya pikir:
Mungkin perlu memfilter daftar itu jika mungkin menyertakan nics virtual dengan MAC yang dibuat secara acak. Anda dapat melakukan ini dengan bendera dalam panggilan untuk
ip
secara langsung. Lihatip a help
informasi tentang cara melakukannya.Perhatikan juga bahwa masalah ini tidak unik
ip
dan harus juga ditangani jika Anda menggunakannyaifconfig
, tetapi dapat ditangani dengan lebih andalip
- yang merupakan bagian dari rangkaianiproute2
jaringan dan dipelihara secara aktif - daripada yang dapat dilakukanifconfig
- yang merupakan anggota darinet-tools
paket dan melihat lalu Linux rilis pada tahun 2001 . Karena perubahan fitur di kernel sejak rilis terakhir,ifconfig
diketahui salah melaporkan beberapa tanda fitur jaringan dan penggunaannya harus dihindari jika memungkinkan.Namun, pahami bahwa pemfilteran dengan nama antarmuka kernel seperti
eth[0-9]
bukan cara yang dapat diandalkan untuk melakukan hal itu, karena ini dapat berubah berdasarkan urutan deteksi paralel merekaudev
selama proses boot. Silakan lihat Nama Jaringan yang Dapat Diprediksi untuk informasi lebih lanjut tentang itu.Karena
dmidecode
tidak diinstal pada sistem saya, saya awalnya berpikir untuk hash daftar serial hard disk yang dihasilkan seperti:Lakukan
lsblk --help
untuk beberapa petunjuk tentang memperbaiki daftar itu - menurut jenis disk, katakanlah. Pertimbangkan jugalspci
dan / ataulsusb
mungkin.Menggabungkannya mudah:
Ketika Anda memberi tahu saya bahwa Anda memasukkan sumber daya pengguna di ujung Anda ke id uniknya, dan hard disk tidak dapat diandalkan, saya pikir akan mengubah taktik saya.
Yang dipertimbangkan, saya melihat ke sistem file lagi dan menemukan
/sys/class/dmi/id
folder. Saya memeriksa beberapa file:Namun, yang ini sepertinya cukup bagus, tapi saya tidak akan mempublikasikan hasilnya:
Saya berharap di situlah
dmidecode
mendapatkan banyak informasi dan sebenarnya itu memang terlihat seperti itu . Menurutman dmidecode
Anda, Anda juga dapat menyederhanakan penggunaan alat itu dengan banyak dengan menetapkan argumen:Lebih sederhana lagi, Anda hanya bisa membaca file. Perhatikan bahwa file khusus ini mengidentifikasi motherboard. Berikut adalah kutipan dari tambalan kernel 2007 yang awalnya menerapkan ekspor ini ke
/sysfs
sistem file virtual:Anda mungkin dapat menggunakan data itu sendiri untuk mengidentifikasi sistem - jika motherboard sudah cukup. Tetapi Anda dapat menggabungkan informasi ini dengan MAC sistem dengan cara yang sama seperti yang saya tunjukkan yang mungkin Anda lakukan dengan hard disk:
Kernel Linux juga dapat menghasilkan UUID untuk Anda:
Atau:
Memang, ini dibuat secara acak dan Anda harus memikirkan kembali penugasan ID, tapi itu semudah mendapatkan setidaknya. Dan itu harus cukup solid jika Anda dapat menemukan cara untuk menguncinya.
Terakhir, pada sistem UEFI ini menjadi jauh lebih mudah dilakukan - karena setiap variabel lingkungan firmware EFI menyertakan UUID sendiri. Variabel lingkungan
{Platform,}LangCodes-${UUID}
harus ada pada setiap sistem UEFI, harus bertahan reboot dan bahkan sebagian besar pembaruan dan modifikasi firmware, dan sistem Linux apa pun denganefivarfs
modul yang dimuat dapat mencantumkan salah satu atau kedua nama hanya dengan:Bentuk yang lebih lama -
LangCodes-${UUID}
tampaknya sekarang sudah tidak digunakan lagi , dan pada sistem yang lebih baru seharusnyaPlatformLangCodes-${UUID}
tetapi, menurut spesifikasi, satu atau yang lain harus ada di setiap sistem UEFI. Dengan sedikit usaha, Anda dapat mendefinisikan variabel persisten reboot Anda sendiri, dan mungkin memanfaatkan generator UUID kernel dengan cara itu. Jika tertarik, lihatlah efitools .sumber
ip2
secara khusus dirancang untuk diuraikan, dan mungkin saya tidak melakukannya dengan cukup baik - saya kira hal yang sama dapat dilakukan hampir tanpagrep/sed
. Mungkin hal yang sama bisa dilakukan dengan mudahudevadm
. Dan setiap nama variabel lingkungan EFI dirancang untuk diidentifikasi secara unik untuk situasi seperti ini.Banyak distribusi modern mengirimkan file yang
/etc/machine-id
berisi string 32-karakter heksadesimal unik. Itu berasal dari systemd, di mana halaman manual memiliki lebih banyak informasi , dan mungkin sesuai untuk tujuan Anda.sumber
dbus
spesifik, saya pikir, dan berubah jika sistem operasi dihapus / diinstal ulang.Pada banyak mesin Linux, file tersebut
/var/lib/dbus/machine-id
berisi id unik untuk setiap distribusi Linux dan dapat diakses melalui panggilandbus_get_local_machine_id()
. Ini mungkin sama dengan yang/etc/machine-id
disebutkan di atas. Ini bekerja pada instalasi Linux virtual juga. Saya telah memeriksanya di distribusi Ubuntu, SuSE dan CentOS saat ini.sumber
/etc/machine-id
.Apakah Anda memerlukan ID mesin untuk berubah ketika perangkat keras berubah? Apakah ID mesin digunakan untuk melindungi sesuatu? Cara terbaik yang saya yakini memiliki ID mesin "konsisten" adalah dengan menyimpan string acak di suatu tempat di sistem dan dengan cara itu jika ada perubahan perangkat keras, maka ID mesin tidak akan berubah. Ini juga baik untuk sistem tervirtualisasi di mana akses perangkat keras dibatasi dan ID MAC adalah 00: 00: 00: 00
Coba sesuatu seperti skrip sh ini untuk membuat dan mendapatkan ID:
sumber
/dev/urandom
menunjukkan Linux, Anda hanya dapat melakukancat /proc/sys/kernel/random/uuid >$FILE
yang secara acak menghasilkan UUID yang diformat dengan benar pada setiap pembacaan. Namun, setiap kegigihan yang diimplementasikan disk dapat dihapus, dan, asalkan dapat diterima, dan asalkandbus
diinstal, Anda mungkin harus melakukan seperti yang disarankan oleh @XZS.Jawaban lain memberikan sejumlah cara mengekstraksi id dari perangkat keras. Anda dapat memutuskan untuk menggunakan satu perangkat keras sebagai pengenal atau banyak. Ini bermasalah jika Anda perlu menukar atau mengganti perangkat keras secara sewenang-wenang.
Beberapa orang mungkin malah menyimpan id id yang dihasilkan di harddrive mereka (atau menggunakan UUID) tetapi harddrides dapat dikloning.
Modul TPM dan boot aman mungkin menyediakan sarana untuk mengikat motherboard dan perangkat keras lainnya dengan instalasi ke harddisk.
Selalu lebih mudah dalam kasus ini jika Anda memberikan informasi lebih lanjut tentang apa yang ingin Anda capai.
sumber