首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得没有根权限的dmidecode信息?

如何获得没有根权限的dmidecode信息?
EN

Unix & Linux用户
提问于 2011-11-08 17:29:23
回答 9查看 54.7K关注 0票数 19

我正在编写一个程序来显示各种系统信息(在CentOS系统上)。例如,处理器类型和速度(来自/proc/cpuinfo)、上一次启动时间(根据/proc/uptime计算)、IP地址(来自ifconfig输出)和已安装打印机列表(来自lpstat输出)。

目前,一些数据是从dmidecode程序中获得的:

  • 平台类型(dmidecode -s system-product-name)
  • BIOS版本(dmidecode -s bios-version)
  • 物理内存量(dmidecode -t17 | grep Size)

只有当我的程序以根用户的身份运行时,这些程序才可用(否则,dmidecode子进程会因/dev/mem: Permission denied错误而失败)。是否有其他方法可以让普通用户访问这些信息?

EN

回答 9

Unix & Linux用户

回答已采纳

发布于 2011-11-08 20:02:17

我刚刚查看了我的CentOS 5系统-之后:

代码语言:javascript
复制
chgrp kmem /usr/sbin/dmidecode
chmod g+s /usr/sbin/dmidecode

仍然不可能让dmidecode工作-- kmem组只有/dev/mem的读取权限--似乎涉及到对BIOS信息的写入。

因此,还有其他一些选择:

  1. 使用sudo
  2. 使用其他信息来源(例如/proc/meminfo )
  3. 使用init脚本将dmidecode的静态输出写入世界可读的文件。
票数 5
EN

Unix & Linux用户

发布于 2015-10-26 23:46:52

dmidecode提供的一些信息可以在/sys/devices/virtual/dmi/id上获得。

其他信息可通过分析/proc/cpuinfo/proc/meminfo/sys/system/node/node0/meminfo获得。

票数 10
EN

Unix & Linux用户

发布于 2016-04-10 14:19:37

  1. 我可以在/sys/class/dmi/id/下以用户身份读取DMI信息。不包括序列号(读取时需要根权限)。我想这是考虑隐私的内核开发人员的行为。
  2. 关于dmesgdmesg是一个访问内核环缓冲区的命令。环形缓冲区意味着当缓冲区“溢出”时,旧信息被较新的信息覆盖。此外,这也是读取内核模块调试输出,它从来都不是可解析的。
  3. 使用systemd运行访问内核输出:日志with静默-系统-引导SYSLOG_IDENTIFIER=kernel
  4. 关于大卫-荷马氏尼尔斯的的答案:文件/dev/mem不只是提供内存信息,而是将整个物理内存映射到用户空间。因此,人们可以通过它访问DMI内存地址(并且做更多讨厌的事情)。
  5. 关于chgrpchmod g+s of dmidecode in 尼尔斯的的问题,答案是:我想这不符合预期,因为用chmod g+s保存gid并不能使dmidecode使用它的新权限。dmidecode必须调用setegid来设置它的有效组id,然后才能访问/dev/mem。从它的源代码来看,dmidecode不会这么做。
票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/24212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档