Linux uuidgen-跨VM实例的输出的唯一性



背景:我开发了一个在Linux上运行的软件,并为其分发了工作许可证。对于Linux安装,我使用的是系统UUID,我的许可证就是基于此。为了在各种云设置上安装,我将操作系统与我的软件打包并提供给用户。用户部署它并根据我的软件中显示的UUID请求许可证。

问题:当用户部署每个实例时,在少数云设置中,同一物理机器上不同VM实例的UUID是相同的。这会导致许可证出现问题。

解决方案:我计划做的很简单:当操作系统第一次启动时,调用uuidgen并生成UUID并将其存储到一个文件中。在那之后,下次重新启动时,我将从这个文件中获取它,这样机器的UUID将是相同的。

关于上述解决方案的问题:

1

带有随机选项的uuidgen通过使用/dev/random计算uuid在虚拟机设置中,由于没有直接的硬件访问来生成此随机种子,在不同的虚拟机实例中/dev/random值可能相同吗?这意味着uuidgen将对同一种子进行操作

2

如果uuidgen在第一次启动时在两个不同的linux系统中生成的UUID是相同的,因为随机种子不够好,那么下一个生成的UUD在这些linux系统中也会是相同的即。启动时,会调用uuidgen并在VM1中生成一个UUID1。假设它与在另一个VM实例VM2中调用uuidgen时的UUID2相同。如果为VM1中的下一个UUID再次调用uuidgen,那么如果在VM2中调用,它会再次相同吗?

谢谢。

最有可能调查的是客户是否从一个公共的VM映像中生成了这些VM映像,其中已经生成了uuid。有了uuid的长度,就不太可能产生uuid的共会话。

顺便说一句,要求您的软件依赖于存储在文件中的uuid,可以让您的客户在安装软件后克隆您的VM,并通过克隆验证所有许可证。

如果你想在虚拟机上保护你的软件许可证,你必须连接到许可证服务器,并执行一些公钥签名功能来验证许可证。

主要问题是,来自虚拟机的两个克隆映像(硬件和软件)完全相等,因此可以运行相同的软件,而与克隆的时间点没有任何差异。

最新更新