1

OSはLinux SuSE 2.6.16.60-0.21-smp

以下に示すように、SUIDが構成された実行可能binファイル(名前はbmu)が1つあります。

-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 に答える