使用
dmidecode -s system-uuid
我回来了:
/sys/firmware/dmi/tables/smbios_entry_point: Permission denied
/dev/mem: Permission denied
有了sudo
管理员密码,就没问题了。
我想在 python 脚本中使用 UUID 来标识 Web 服务器数据库上的本地计算机,但此本地脚本不应以管理员权限运行,并且我不想对凭据进行硬编码。我能做些什么?
有没有类似的纯Python方式
machineId = os.popen("cat /etc/machine-id").read()
?
扩展问题
的输出与具有 400 权限的文件
dmidecode -s system-uuid
具有相同的值。/sys/devices/virtual/dmi/id/product_uuid
为了测试目的,我将其更改为 444,现在我可以在没有管理员权限的情况下读取它。这会存在风险吗?如果没有,问题就解决了。Product-uuid 和 system-uuid 是否相同,只是名称不同?它是如何计算的?每次开机都要重新启动吗?
/sys/devices/virtual/dmi/id/product_uuid
如果整个磁盘是 dd 克隆并在新的/不同的主板上运行,那么存储的这个值是否会被更改和覆盖?
不使用 machine-id 的原因是,据我所知,当通过 dd 克隆整个系统并在另一块主板上使用时,machine-id 不会更改/覆盖。我正在开发一个多点销售点系统,其中包含一组具有相同磁盘映像的相同计算机,以简化服务。但它们中的每一个都必须在客户的仪表板中注册并分配给不同的任务。
答案1
纯 Python 方式是读取文件,正如您所注意到的,这需要适当的权限。更改文件权限并没有特别的风险,除非您认为 UUID 是特权信息;但每次系统启动时您都必须更改权限。
dmidecode -s system-uuid
并/sys/devices/virtual/dmi/id/product_uuid
代表相同的信息,存储在系统固件中并且理论上是唯一的(但不能保证唯一,有些制造商没有适当设置该字段)。
我建议/etc/machine-id
改为使用;只需确保您的系统克隆过程将其删除即可。看更改/etc/machine-id 可以吗?了解详情。