我正在编写一个程序来显示各种系统信息(在CentOS系统上)。例如,处理器类型和速度(来自/proc/cpuinfo)、上一次启动时间(根据/proc/uptime计算)、IP地址(来自ifconfig输出)和已安装打印机列表(来自lpstat输出)。
目前,一些数据是从dmidecode程序中获得的:
dmidecode -s system-product-name)dmidecode -s bios-version)dmidecode -t17 | grep Size)只有当我的程序以根用户的身份运行时,这些程序才可用(否则,dmidecode子进程会因/dev/mem: Permission denied错误而失败)。是否有其他方法可以让普通用户访问这些信息?
发布于 2011-11-08 20:02:17
我刚刚查看了我的CentOS 5系统-之后:
chgrp kmem /usr/sbin/dmidecode
chmod g+s /usr/sbin/dmidecode仍然不可能让dmidecode工作-- kmem组只有/dev/mem的读取权限--似乎涉及到对BIOS信息的写入。
因此,还有其他一些选择:
发布于 2015-10-26 23:46:52
dmidecode提供的一些信息可以在/sys/devices/virtual/dmi/id上获得。
其他信息可通过分析/proc/cpuinfo、/proc/meminfo或/sys/system/node/node0/meminfo获得。
发布于 2016-04-10 14:19:37
/sys/class/dmi/id/下以用户身份读取DMI信息。不包括序列号(读取时需要根权限)。我想这是考虑隐私的内核开发人员的行为。dmesg:dmesg是一个访问内核环缓冲区的命令。环形缓冲区意味着当缓冲区“溢出”时,旧信息被较新的信息覆盖。此外,这也是读取内核模块调试输出,它从来都不是可解析的。systemd运行访问内核输出:日志with静默-系统-引导SYSLOG_IDENTIFIER=kernel/dev/mem不只是提供内存信息,而是将整个物理内存映射到用户空间。因此,人们可以通过它访问DMI内存地址(并且做更多讨厌的事情)。chgrp和chmod g+s of dmidecode in 尼尔斯的的问题,答案是:我想这不符合预期,因为用chmod g+s保存gid并不能使dmidecode使用它的新权限。dmidecode必须调用setegid来设置它的有效组id,然后才能访问/dev/mem。从它的源代码来看,dmidecode不会这么做。https://unix.stackexchange.com/questions/24212
复制相似问题