Как получить серийный номер процессора под Linux без прав root

Как я могу получить серийный номер процессора в Linux (Ubuntu) без прав root?

Я попробовал команду cpuid, она работает без прав root, но, похоже, возвращает все нули (я считаю, потому что что-то нужно изменить в BIOS).

Не могли бы вы предложить мне другой способ получить серийный номер процессора из программы без прав root и без необходимости изменять BIOS?


person Alexey    schedule 18.02.2011    source источник


Ответы (7)


Требуются права root. Ответ - dmidecode.
Если вам нужен идентификатор процессора:

dmidecode | grep -w ID | sed "s/^.ID\: //g"

Будет получен идентификатор процессора, удалите "ID:" из вывода
Если вам нужно получить идентификатор компьютера:

dmidecode | grep -w UUID | sed "s/^.UUID\: //g"

Если вы хотите получить uuid ядра без прав root, то:

dmesg | grep UUID | grep "Kernel" | sed "s/.*UUID=//g" | sed "s/\ ro\ quiet.*//g"
person ETech    schedule 10.04.2014

Серийные номера процессоров были в основном только в процессорах Pentium III. Intel удалила его из более поздних моделей из-за возникших проблем с конфиденциальностью. Таким образом, если вы не используете PIII И, ваши настройки BIOS позволяют вам прочитать серийный номер, все, что вы получите, - это 0.

person Marc B    schedule 18.02.2011
comment
Я забыл об этих ... Xeon - это не то, о чем можно споткнуться в обычном WorstBuy. - person Marc B; 18.02.2011
comment
Да, но как тогда другие операционные системы могут их получить? Например WMI в Windows? Должен быть какой-то обходной путь и для Linux - person Alexey; 19.02.2011
comment
@Alexey Я ненавижу возрождать эту древнюю ветку, но она появляется в Google, и я просто хотел добавить, что причина, по которой вы можете получить эту информацию в Windows без прав администратора, заключается в том, что Windows использует драйвер ядра для предоставления этой информации в пользовательском пространстве. . Вы можете сделать то же самое в Linux разными способами, например, добавив конфигурацию Sudo, что dmidecode может выполняться без прав root под определенной учетной записью, или написав системную службу, которая предоставляет эту информацию через API в пользовательском пространстве. Windows также получает доступ к информации о «привилегированном» кольце 0, когда вы запрашиваете ее через WMI. - person Alex; 24.10.2019
comment
@Alex: Серийный номер процессора цитирует Intel, что эта функция вообще не реализована: есть есть нет серийного номера для получения. Не только то, что для этого требуется доступ к ядру. Если не будет какой-то более поздней функции ЦП, которая повторно представила его в другой форме, например, MSR ... Очевидно dmidecode может что-то получить, но я не знаю, откуда. Мы точно знаем, что дело не только в материнской плате? - person Peter Cordes; 04.12.2020
comment
@PeterCordes Я не совсем уверен, как устанавливается серийный номер, это вполне может быть материнская плата / набор микросхем (например, в Agesa с новыми процессорами ryzen), но в любом случае некоторые части должны знать, какой процессор там, чтобы дайте ему правильные обновления микрокода, отобразите его в BIOS и т. д., к которым интерфейс управления рабочим столом (DMI) на материнской плате даст вам доступ косвенно :) - person Alex; 05.12.2020
comment
@Alex: Номер модели, одинаковый для каждого процессора, выходящего из данной производственной линии, будет достаточным для этого (или, более конкретно, поставщик / семейство / модель / степпинг), и его можно даже встроить в литографию. серийный номер, уникальный для этого отдельного ЦП, - это нечто другое, и его не нужно существовать. (И, по-видимому, не было до функции PSN Pentium III, в то время как Intel имеет обновляемый микрокод после PPro / PII.) - person Peter Cordes; 05.12.2020
comment
@PeterCordes О, на самом деле, хороший момент, я бы не знал о сериале, кажется, трудно запечь это в кристалле с литографией, вам понадобится новая маска для каждого процессора, но, возможно, она будет мигать на какой-то крошечный бит nand или часть микрокода той же области сохраняется во время тестирования? а может серийник фальшивый и одинаковый для всех одной и той же модели: P без понятия tbh! - person Alex; 05.12.2020
comment
@Alex: Если серийный номер реальный и фактически хранится в процессоре, он, вероятно, будет запрограммирован путем сжигания предохранителей в некотором предназначенном для этого месте. (Как и PROM: пишите один раз, только с помощью внешнего программирования). То же самое место, которое программируется после того, как кристалл проверяется на его пределы частоты / напряжения, чтобы сделать его i7-6700k по сравнению с i5-6600 или чем-то еще, включая программирование строки модели, такой как Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz. (Intel также может предохранить верхнюю половину модулей SIMD, чтобы сделать его Celeron или Pentium, что сделает его пригодным для использования, даже если там был дефект короткого замыкания.) - person Peter Cordes; 05.12.2020

cpuid возвращает мне один и тот же серийный номер независимо от того, что я использую sudo:

 % cpuid | grep serial
Processor serial: 0002-0652-0000-0000-0000-0000
 % sudo cpuid | grep serial
Processor serial: 0002-0652-0000-0000-0000-0000

Если вы не имеете в виду какой-то другой серийный номер ...?

person CanSpice    schedule 18.02.2011
comment
Да, я имею в виду именно это - 0000-0000-0000-0000. Первый байт - это некоторый идентификатор шага, но за этими нулями должен стоять настоящий серийный номер. - person Alexey; 19.02.2011

Как было предложено, когда этот вопрос задавался ранее, если вы пытаетесь использовать это для лицензирования (поскольку вы использовали тег лицензирования), вы можете попробовать MAC-адрес: серийный номер процессора

person Quinn Bailey    schedule 18.02.2011
comment
Да, я тоже использую MAC-адрес, но хочу большего :) - person Alexey; 19.02.2011

Привяжите лицензию к номерам inode, которые получают исполняемые файлы при их установке в файловую систему пользователя. Если их переместят в другое место, они изменятся.

Обратной стороной является то, что номера могут не сохраниться, если программа должна быть восстановлена ​​из резервной копии.

Я делал подобные вещи раньше. Вы должны быть очень щедры, позволяя подлинным пользователям активировать лицензию при смене оборудования.

person Kaz    schedule 10.03.2012

Вы проверили dmesg? Это в /bin

person Foo Bah    schedule 18.02.2011
comment
Я никогда не использовал его раньше - он просто выдал мне кучу таких сообщений - не могли бы вы подсказать, как именно мне его вызвать, чтобы получить серийный номер процессора: [38988.366706] VFS: занятые inodes на измененном носителе. [38990.355161] VFS: занятые дескрипторы на измененном носителе. [38990.360004] VFS: занятые дескрипторы на измененном носителе. [38992.355334] VFS: занятые дескрипторы на измененном носителе. [38992.357489] VFS: занятые дескрипторы на измененном носителе. - person Alexey; 19.02.2011
comment
dmesg - это кольцевой буфер сообщений ядра. после загрузки в нем будут все сообщения ядра при загрузке, но в конечном итоге они будут вытеснены другими системными событиями. Где-то в / var / log должен быть файл, содержащий загрузочные сообщения. - person Marc B; 19.02.2011
comment
@Marc вам нужно быть root, чтобы видеть файлы / var / log / messages *, но dmesg доступен не рутованным пользователям - person Foo Bah; 19.02.2011

ЦП не имеет серийного номера; возможно, вам нужна базовая информация DMI без привилегий root (это покажет вам только постоянный идентификатор производителя и модели вашей материнской платы, но не серийный номер):

dmesg | grep -i dmi: | cut -d ":" -f 2-

В противном случае вы могли бы «указать» dmidecode запускаться от непривилегированного пользователя:

sudo chmod +s /usr/sbin/dmidecode

Тогда вы могли бы запустить, например:

dmidecode -s system-serial-number

В большинстве случаев «серийный-системный-номер» подобен «серийному-номеру шасси» или «серийному-номеру основной платы». Помните, что не во всех дистрибутивах эта программа установлена, например, в системах на основе Debian есть пакет, названный в ее честь.

В противном случае вы можете найти уникальный и постоянный, постоянно устанавливаемый, системный идентификатор на диске вашей системы; для этого вы можете запустить следующее:

mount | grep "on / type" | awk '{print $1}'

Первый предоставит вам путь к устройству, на котором смонтирована ваша система (для моей ОС он вернул / dev / sda7), а затем вы можете найти для него идентификатор со следующим:

find /dev/disk/by-id/ -lname "*sda" ! -name "wwn*"

Таким образом, полная команда для поиска уникального идентификатора на жестком диске вашей системы может выглядеть так:

find /dev/disk/by-id/ -lname "*`mount | grep " / " | awk '{print $1}' | cut -b 6-8`" ! -name "wwn*" -printf "%f\n"

Я надеюсь, что это может подойти вам или кому-то еще. Команда cut -b 6-8 может быть непереносимой, потому что я предполагаю, что имена блочных устройств состоят из трех символов; кроме того, путь / dev / disk / by-id / заполняется только управляемыми системами UDEV, и не все дистрибутивы Linux используют его, но я гарантирую, что первый будет работать в Ubuntu.

person delverdl    schedule 07.06.2019