2012-04-13 40 views
1

OS是Linux SuSE 2.6.16.60-0.21-smp可以通過Linux中的SUID程序成功調用dmidecode命令嗎?

我有一個可執行bin文件(名稱爲BMU),其已被配置SUID,如示於以下

-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

你有SELinux嗎?如果是的話,嘗試一下,只是爲了排除它。 – 2012-04-13 07:29:07

+0

它看起來並不像SuSE10可以支持SELinux。 – siikee 2012-04-13 09:14:51

回答

0

dmidecode程序需要訪問/dev/mem哪些普通用戶沒有權限。解決此類問題的最常見的方法是按照您已完成的操作並使程序爲SUID,或將用戶添加到kmem組(擁有/dev/mem的組)。

+0

感謝您的回答,但問題是我已經使程序SUID,爲什麼在程序中調用'dmidecode'返回仍然爲空? – siikee 2012-04-13 07:23:53

+0

@siikee你能解釋一下你的「返回null」嗎?命令沒有輸出?返回碼是0嗎? – 2012-04-13 07:44:27

+0

我的描述不準確,代碼是這樣的: 'read_fp = popen(「dmidecode | grep'Product Name'」,「r」); ...... chars_read = fread(buffer,sizeof(char),BUFSIZ-1,read_fp); ......'read_fp'的返回值不爲空,但'buffer'的長度爲0,應該有一些值。 – siikee 2012-04-13 08:06:54

1

問題以不安全的方式解決。

在程序bmu中添加SUID是不夠的,dmidecode也應該是。

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

相關問題