Linux Setuid에는 읽기/쓰기를 위한 특수 권한 플래그가 있습니다.

Linux Setuid에는 읽기/쓰기를 위한 특수 권한 플래그가 있습니다.

~이든설정값실행 파일에만 적용됩니까(실행 가능 플래그만 해당)?

동일한 파일에 대한 다른 권한(읽기/쓰기)에 어떤 영향을 미치나요?

예:- 실제 파일 권한이 다음과 같은 경우4711, 소유자가 아닌 사용자는 읽을 수 없습니다.소유자 권한 4711을 높이고 다른 사람이 콘텐츠를 읽을 수 있도록 허용하는 것은 어떨까요?

답변1

setuid 및 setgid는 유효 권한에만 영향을 미치므로 소유자가 아닌 사람은 파일을 읽을 수 없습니다.파일이 실행될 때; 그렇지 않으면 파일 권한이 사용됩니다. 시도해 볼 수 있는 샘플 프로그램은 다음과 같습니다.

읽어보기.c

#include <stdio.h>

int main(int argc, char **argv) {
  FILE *f;
  int i;
  char c;

  if(argc>1) {
    f=fopen(argv[1],"rb");
    for(i=1; i++<100;) {
      c=getc(f);
      printf("%x%s", (int)c, i%50?" ":"\n");
    }
    fclose(f);
  }
}

테스트하려는 사람이 아닌 다른 사람으로 컴파일하고 권한을 변경합니다(저는 이것을 사용했습니다 root).

# gcc -Wall -o readme readme.c
# chown root:root readme
# chmod ug+s,o-rw readme

권한을 확인하고 테스트 사용자로 파일을 읽으십시오.

erik ~ $ ls -la readme
-rwsr-s--x 1 root root 8064 May  4 12:05 readme
erik ~ $ cat readme
cat: readme: Permission denied

이제 프로그램을 실행하고 스스로 읽도록 해보세요.

erik ~ $ ./readme readme
7f 45 4c 46 2 1 1 0 0 0 0 0 0 0 0 0 3 0 3e 0 1 0 0 0 fffffff0 5 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 18 0 0 0 0 0 0 0
0 0 0 40 0 38 0 9 0 40 0 1d 0 1c 0 6 0 0 0 4 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 fffffff8 1 0

유효권한이 사용자에게로 변경되므로 문제가 없음을 알 수 있습니다.그리고읽기 권한.

왜 이런 일이 발생합니까? 여러 가지 이유가 떠오릅니다. 첫째, 커널(로더)은 이미 모든 작업을 수행할 수 있는 전체 권한을 갖고 있으므로 실행 파일을 실행하기 위해 읽기 권한이 필요하지 않습니다. 실행 파일의 내용을 보려면 일반적으로 파일을 복사할 수 있는 읽기 권한만 필요합니다. 몇 가지 가능한 예를 들자면, 실행 파일에는 사용자가 볼 수 없는 민감한 데이터가 포함되어 있을 수 있습니다(이에 대해 강력히 권장하지만 실제로 발생했습니다!). 또는 시스템이 이를 사용자가 취약점을 발견하지 못하도록 심층적인 방어 수단으로 사용하고 있습니다.

관련 정보