可以通过Linux中的SUID程序成功调用dmidecode命令吗?

时间:2012-04-13 06:46:07

标签: linux

操作系统为Linux SuSE 2.6.16.60-0.21-smp

我有一个已配置SUID的可执行bin文件(名称为bmu),如下所示

-rwsr-sr-x 1 root root 14968899 2012-03-29 10:35 bmu

此程序在内部调用dmidecode

如果它由root运行,则操作正常,但如果程序由非root用户运行,则调用的dmidecode将返回null。

此问题的原因是什么以及如何解决?

修改:在评论中添加了代码和说明:

read_fp = popen("dmidecode | grep 'Product Name'", "r");

/* ...... */

chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);

read_fp的返回值不为空,但缓冲区的长度为0,应该有一些值。

2 个答案:

答案 0 :(得分:1)

问题以不安全的方式解决了。

仅在程序bmu中添加SUID是不够的,dmidecode也应该是。

-rwsr-sr-x 1 root root 59504 2006-06-16 22:08 /usr/sbin/dmidecode

答案 1 :(得分:0)

dmidecode程序需要访问普通用户无权访问的/dev/mem。解决此类问题的最常见方法是执行以下操作并将程序设为SUID,或将用户添加到kmem组(拥有/dev/mem的组)。