/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
返し、プログラムは出力ファイルを開くことはありません。exampleuser
root
これをコンパイルし、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実行可能ファイルをサポートしていないか(オプションを使用してマウントされた、またはnosuid
root以外のユーザーがマウントした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
起動シーケンスの終わりに実行されるいくつかの追加スクリプトにこれらのコマンドを追加します。