Setuid 및 SUID 비트는 루트 권한을 제공하지 않습니다.

Setuid 및 SUID 비트는 루트 권한을 제공하지 않습니다.

/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

우분투 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시작 시퀀스가 ​​끝날 무렵에 실행되는 일부 추가 스크립트 에 이러한 명령을 추가합니다 .

관련 정보