1

操作系统是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 运行的,操作是可以的,但dmidecode如果程序是非 root 用户运行的,调用会返回 null。

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

编辑:从评论中添加代码和描述:

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

/* ...... */

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

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

4

2 回答 2

1

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

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

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

于 2012-04-19T08:55:11.177 回答
0

dmidecode程序需要/dev/mem普通用户无权访问的访问权限。解决此类问题的最常见方法是像您已经做的那样,使程序成为 SUID,或者将用户添加到kmem组(拥有的组/dev/mem)。

于 2012-04-13T07:07:32.807 回答