操作系统为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,应该有一些值。
答案 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
的组)。