Setuid および SUID ビットは root 権限を提供しません。

Setuid および SUID ビットは root 権限を提供しません。

/sys/class/backlight/intel_backlight/brightness私はすべてのユーザーが自分のファイルの内容を変更できるようにする短いプログラムを作成してコンパイルしましたが、ユーザーの権限を拡大することはできません。何か落ちたかもしれません。

#include <stdio.h>
#include <stdlib.h>
#define FILENAME "/sys/class/backlight/intel_backlight/brightness"

int main (int argc, char * argv[])
{
    int res;
    setuid(0); // I didn't intend to keep this, but I included it just in case
    printf("euid %d\n", geteuid());
    system("whoami");
    // Attempt to open FILENAME; print "Can't open..." on failure
}

ただし、常に代わりにをwhoami返し、プログラムは出力ファイルを開くことはありません。exampleuserroot

これをコンパイルし、uidビットを設定してプログラムを実行します。

$ gcc -o example.bin example.c     # compile
$ sudo chown root:root example.bin # set owner & group
$ sudo chmod 4770 example.bin      # set uid bit
$ ./example.bin 75                 # execute
euid 1000
exampleuser
Can't open output file /sys/class/backlight/intel_backlight/brightness

ターゲット出力ファイルが存在します。

$ ls -l /sys/class/backlight/intel_backlight/brightness
-rw-r--r-- 1 root root 4096 May  2 07:57 /sys/class/backlight/intel_backlight/brightness

Ubuntu 14.04 LTSを実行しています。

ベストアンサー1

ファイルシステムがsetuid実行可能ファイルをサポートしていないか(オプションを使用してマウントされた、またはnosuidroot以外のユーザーがマウントしたFUSEファイルシステムであるため)、セキュリティフレームワークが存在します(SELinuxやAppArmorなど)。ここでsetuidをブロックしてください(Ubuntuではそのようなものを設定しないと思います)。または、実際にそのコマンドを実行していない場合 - 他の人がファイルを実行できないようにしたため、rootグループに属している場合にのみ機能するため、そうしないでください。

これは決して良いアプローチではありません。ファイルの権限を変更する方がはるかに簡単です。

chgrp users /sys/class/backlight/intel_backlight/brightness
chmod g+w /sys/class/backlight/intel_backlight/brightness

このグループのメンバーではない場合は、自分が属するグループを使用してくださいusers

/etc/rc.local起動シーケンスの終わりに実行されるいくつかの追加スクリプトにこれらのコマンドを追加します。

おすすめ記事