Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux中的SUID程序能否成功调用dmidecode命令?_Linux - Fatal编程技术网

Linux中的SUID程序能否成功调用dmidecode命令?

Linux中的SUID程序能否成功调用dmidecode命令?,linux,Linux,操作系统是Linux SuSE 2.6.16.60-0.21-smp 我有一个可执行的bin文件(名称为bmu),它已配置为SUID,如下所示 -rwsr-sr-x 1根根目录14968899 2012-03-29 10:35 bmu 这个程序在内部调用dmidecode 如果该操作由root用户运行,则该操作将是正常的,但是如果该程序由非root用户运行,则调用的dmidecode将返回null 这个问题的原因是什么?如何解决 编辑:添加了注释中的代码和说明: read_fp = popen(

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

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

-rwsr-sr-x 1根根目录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\u fp
的返回值不为空,但缓冲区的长度为0,应该有一些值。
dmidecode
程序需要访问普通用户无权访问的
/dev/mem
。解决此问题最常见的方法是,要么像您已经做的那样,将程序SUID,要么将用户添加到
kmem
组(拥有
/dev/mem
)中。

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

问题以不安全的方式解决

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


-rwsr-sr-x 1 root root 59504 2006-06-16 22:08/usr/sbin/dmidecode
问题以不安全的方式解决

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


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

谢谢您的回答,但问题是我已经将程序设置为SUID,为什么程序内部调用的
dmidecode
的返回值仍然为空?@siikee您能解释一下“返回空值”的含义吗?命令没有输出?返回代码是否为0?我的描述不准确,代码如下:
read_fp=popen(“dmidecode | grep‘Product Name’,“r”)。。。。。。chars_read=fread(缓冲区,大小(char),BUFSIZ-1,read_fp)
返回的
read\u fp
不是空的,但是
缓冲区的长度是0,应该有一些值。谢谢你的回答,但问题是我已经使程序SUID,为什么程序内部调用的
dmidecode
的返回仍然是空的?@siikee你能解释一下你用它“返回空”是什么吗?命令没有输出?返回代码是否为0?我的描述不准确,代码如下:
read_fp=popen(“dmidecode | grep‘Product Name’,“r”)。。。。。。chars_read=fread(缓冲区,大小(char),BUFSIZ-1,read_fp)读取fp的返回值不为空,但缓冲区的长度为0,应该有一些值。是否启用SELinux?如果是这样的话,试着关闭它,只是为了排除它。看起来SuSE10不能支持SELinux。您是否打开了SELinux?如果是这样的话,试着关闭它,排除它。看起来SuSE10不能支持SELinux。你找到更好的方法了吗?虽然我认为你的解决方案仍然安全,因为它只是转储信息。我不知道泄露信息会带来什么安全风险。你找到更好的方法了吗?虽然我认为你的解决方案仍然安全,因为它只是转储信息。我不知道泄露信息会带来什么安全风险。