Linux:在系统上设置主机 ID?

Linux:在系统上设置主机 ID?

我有一个许可证服务器。硬件出现故障。

许可软件依赖于返回的系统“hostid” /usr/bin/hostid。hostid 是“当前主机的唯一数字标识符”。

如果我将软件迁移到另一台主机,似乎“hostid”会发生变化,并且许可证软件将失败。请注意,此系统的主机名和 IP 地址将保持不变。

两个问题:

  1. hostid 是如何确定的?它是随机的吗?还是取决于主机名或 MAC 地址等?

  2. 我可以在新系统上设置主机 ID 以使其与旧系统的主机 ID 匹配吗?

答案1

假设您在这里指的是传统的 unix hostid。如果我想将软件绑定到系统,我会使用加密狗或一些更强大的方法来识别系统,因为 hostid 非常随意,但尽管如此……

hostid 是使用库调用“gethostid”检索的。它只是一个通用值,如果未设置,则将基于主机系统的 ipv4 地址。

参见“man 2 gethostid”

在 glibc 实现中,如果 gethostid() 无法打开包含主机 ID 的文件,则它使用以下方法获取主机名获取主机名(2),将该主机名传递给获取主机名 (3)以获取主机的 IPv4 地址,并返回通过对 IPv4 地址进行位运算获得的值。(此值可能不是唯一的。)

您可以将文件放置在您想要/etc/hostid的值的位置,然后自行将其设置为任何您想要的值(大概这与您捐赠箱中的程序输出的值相同hostid)。

不过,设置它有点棘手……该文件需要 hostid 的打包二进制表示。

我使用了 python,但您可以做任何事情......(很确定有人知道一种更简单的方法来打印打包的字节)。

from struct import pack
f = open('/etc/hostid', 'w')
f.write(pack('i', 12345))
f.close()

这将以某种方式设置 hostid,使得 gethostid 返回与捐赠箱和迁移箱相同的值。

答案2

据我所知,hostid 要么是(主?)网卡的 MAC 地址,要么是与其他值(例如 ip 地址)的某种混合标识符(这在很大程度上取决于您运行的 *nix 类型)。

我猜,应该可以在任何系统上“伪造”此值(至少可以覆盖 mac 地址)。但是,最好的方法是要求软件供应商将许可证转移到新系统。我认为没有理由不这样做。

相关内容