태그 보관물: chmod

chmod

“실행 전용”파일 권한에 대한 유효한 사용 사례는 무엇입니까? 사용 사례는 무엇입니까?

나는 chmod와 8 진 모드를 읽고 있었다 . 나는 그것이 1실행되는 것을 보았다 . 실행 전용 권한에 대한 유효한 사용 사례는 무엇입니까? 파일을 실행하려면 일반적으로 읽기 및 실행 권한이 필요합니다.

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo



답변

셸 스크립트 에는 읽기 권한이 필요하지만 이진 파일 에는 필요하지 않습니다.

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission

파일의 내용을 표시하고 실행하는 것은 서로 다른 두 가지입니다. 쉘 스크립트를 사용하면 단순화를 용서할 경우 이러한 스크립트는 새 쉘 (또는 현재 쉘)로 “읽기”하여 “실행”되기 때문에 관련이 있습니다. 그렇기 때문에 읽을 수 있어야합니다. 바이너리는 그 메커니즘을 사용하지 않습니다.

디렉토리의 경우 실행 권한이 약간 다릅니다. 즉, 해당 디렉토리 내의 파일 대해 작업을 수행 할 수 있습니다 (예 : 파일을 읽거나 실행). 따라서 /tools사람들이 사용할 수 있기를 원하지만 도구에 대해 알고 있는 도구 세트가 있다고 가정 해 봅시다 . chmod 711 /tools. 그런 다음 실행 파일을 /tools명시 적으로 실행할 수 /tools/mytool있지만 ls /tools/거부됩니다. 마찬가지로 /private-docs파일 이름을 알고있는 경우에만 읽을 수있는 문서를 저장할 수 있습니다.


답변

젠투에서는 setuid (호출자 대신 소유자의 권한으로 실행하도록 설정된) 실행 프로그램이 읽기 액세스가 거부됩니다 (모드 4711). 이것은 권한 상승을 돕기 위해 버그 악용으로부터 보호 계층을 추가하는 것입니다.

권한이없는 공격자가 setuid 파일을 읽을 수 있고 libc 스타일로의 공격 을 허용하는 버그를 알고있는 경우 파일의 내용을 사용하여 특정 유용한 기능이나 라이브러리가있을 수있는 위치를 예측할 수 있습니다 프로그램이 호출 될 때 메모리에 배치됩니다.

최신 시스템에는 종종 ASLR 과 같은보다 효과적인 추가 보호 기능이 포함되어 있지만 32 비트 플랫폼에 존재하는 제한으로 인해보다 쉽게 ​​악용 될 수 있습니다.


답변

“execute only”값은 파일을 많이 사용하지 않는 것처럼 보이지만 디렉토리의 내용을 읽지 못하게하는 데 사용할 수 있습니다.

$ mkdir foo
$ touch foo/bar
$ ls foo/
bar
$ chmod 100 foo
$ ls foo/
ls: cannot open directory foo/: Permission denied


답변

스크립트를 실행하려면 읽기 및 실행 권한이 있어야합니다. 스크립트의 내용을 읽으면 스크립트를 실행할 수 있으므로 다음을 수행 할 수 있어야합니다 read and execute. 그렇지 않으면 스크립트없이 스크립트를 실행할 수 없습니다.

실행 전용 권한에 대한 유효한 사용 사례는 무엇입니까?

보안. 일부는 파일을 보호하고 다른 사용자가 파일을 실행하거나 사용하지 못하게 할 수 있습니다.


답변