【问题标题】:Best way to get machine id on Linux?在 Linux 上获取机器 ID 的最佳方法?
【发布时间】:2012-04-26 12:31:34
【问题描述】:

GNU/Linux 中为i386 架构获取唯一机器ID 的最佳实践方法是什么?

除了mac地址还有什么好办法吗?

【问题讨论】:

    标签: linux unique gnu uniqueidentifier


    【解决方案1】:

    根据您的内核,DMI 信息可以通过 sysfs 获得。 试试这些:

    # cat /sys/class/dmi/id/board_serial
    xxxxxxxxxxxxxxx
    # cat /sys/class/dmi/id/product_uuid
    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

    或使用工具

    # dmidecode -s baseboard-serial-number
    ...
    # dmidecode -s system-uuid
    ...
    

    【讨论】:

    • 在谷歌上搜索/sys/class/dmi/id/board_serial 的可用性时,我发现0pointer.de/blog/projects/ids.html
    • 所以,实际上,我将使用/var/lib/dbus/machine-id
    • 这似乎不太便携,这取决于 dbus 等等。
    • 这是 x86 特有的。例如,在 Linux PPC(基于 Apple)上没有 /sys/class/dmi/id/product_uuid 这样的东西。
    • Mac 以外的机器 ID 对授权有用吗?
    【解决方案2】:

    在具有 systemd 的现代机器上:机器 ID 由 systemd-machine-id-setup 创建。机器 ID 的位置记录在 freedesktop machine-idman machine-id 中,机器 ID 具有更标准化的格式 - see RFC4122。只是:

    cat /etc/machine-id
    

    【讨论】:

    • 机器 ID 在克隆的虚拟机上可能相同。
    【解决方案3】:

    您可以使用 lshal。这需要先安装 hal(apt-get install hal 或 yum install hal)。这样你就可以在没有root权限的情况下访问dmidecode的所有信息。

    非根等效于

    # dmidecode | grep -i uuid
    

    将会

    $ lshal |grep -i system.hardware.uuid
    

    以及根据您的需要提供的类似信息。

    【讨论】:

    • 如果lshal在所述系统上可用,这意味着安装了hal,这意味着安装了dbus。因此它只是cat /var/lib/dbus/machine-id
    • @malat 从问题中可以清楚地看出,用户想要生成一个永久且不会更改的 uuid。 “dbus/machine-id”甚至可以在每次重启后改变。
    • Mac 以外的机器 ID 对授权有用吗?
    【解决方案4】:

    计算您自己的 sysid 的一种简单且可移植的方法可能是将 uname()、gethostid() 和一些 inode (如 /home 或您的应用程序 homedir(通过 stat() 获得)等)序列化为字符串并对其进行哈希处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-07
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2011-01-08
      • 1970-01-01
      • 2017-05-20
      相关资源
      最近更新 更多