/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
우분투 14.04 LTS를 실행 중입니다.
답변1
파일 시스템이 setuid 실행 파일을 지원하지 않거나(옵션을 사용하여 마운트되었거나 nosuid
루트가 아닌 사용자가 마운트한 FUSE 파일 시스템이기 때문에) 보안 프레임워크가 존재합니다(예: SELinux 또는 AppArmor). 여기에서 setuid를 차단하세요(우분투에서는 그런 것을 설정하지 않는다고 생각합니다). 또는 실제로 해당 명령을 실행하고 있지 않은 경우 - 다른 사람이 파일을 실행할 수 없게 만들었으므로 root
그룹에 속해 있는 경우에만 작동하므로 그렇게 해서는 안 됩니다.
이것은 결코 좋은 접근 방식이 아닙니다. 파일의 권한을 변경하는 것이 훨씬 간단합니다.
chgrp users /sys/class/backlight/intel_backlight/brightness
chmod g+w /sys/class/backlight/intel_backlight/brightness
이 그룹의 구성원이 아닌 경우 귀하가 속한 그룹을 이용하십시오 users
.
/etc/rc.local
시작 시퀀스가 끝날 무렵에 실행되는 일부 추가 스크립트 에 이러한 명령을 추가합니다 .