실행 기능이 자동으로 읽기 기능을 암시하지 않는 경우 111 또는 333 (예 : 사용자 는 실행할 수 있지만 파일을 읽을 수 없음) 과 같은 Linux 권한의 목적은 무엇입니까 ?
실행 기능이 자동으로 읽기 기능을 암시하지 않는 경우 111 또는 333 (예 : 사용자 는 실행할 수 있지만 파일을 읽을 수 없음) 과 같은 Linux 권한의 목적은 무엇입니까 ?
답변:
나는 그것을 가지고 놀았으며 분명히 exec 권한은 읽기 권한을 의미하지 않습니다. 바이너리는 읽을 수없이 실행 가능할 수 있습니다.
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
읽기 및 실행 권한 비트가 모두 없으면 스크립트를 실행할 수 없습니다.
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
되고 bash는 hw.sh
읽기 위해 열려고 시도합니다 .
예를 들어 특정 디렉토리에 (비밀) 실행 파일을 유지 한 다음 사용자가 디렉토리 내용을 보지 않고도 해당 파일을 호출 할 수있게하는 경우와 같이 디렉토리에 적합합니다. 111에 비해 333은 디렉토리의 내용을 보지 않고도 해당 디렉토리에 파일을 쓰거나 삭제할 수 있습니다.
분명히 모든 조합이 그다지 유용하지는 않지만 구체적으로 언급 한 것을 취하십시오 ... 문제의 파일이 스크립트 (예 : 셸 스크립트)가 아닌 한 실제로 read
파일을 실행할 권한이 필요하지 않습니다 ( 권한 만) execute
( .sh
), 펄 스크립트 ( .pl
) 등). execute
권한 만으로 일반 바이너리를 실행할 수 있습니다 . * BSD-systmes에서 여러 실행 파일은 특히 "보안 중요"명령에 대해 execute
허용없이 권한을 부여합니다 (예 read
:) su
.
그렇다면 왜 사용자에게 read
권한을 부여하지 execute
않는가? 사용자가 읽을 수없는 파일을 숨기십시오. 해당 사용자 도 복사 할 수 없습니다 ! read
권한을 제거 하면 사용자가 자신의 "개인"실행 파일 사본을 만들 수 없습니다. 나중에 사본을 남용 할 수 있습니다 (예 : get SUID=root on
).
write
-permission이 없으면 파일이 악의적으로 삭제 되지 않습니다 .
소유자 에게 read
-또는- write
권한을 부여하지 않는 것은 조금 드문 일이지만 때로는 owner
파일을 삭제하는 것 조차 막는 것이 좋습니다 . 물론 owner
- 말할 것도없고 root
- 수도 항상 우회하기 등의 조치를하지 않을 경우 다른 방법으로, 단순히하여 chmod
파일에 대한 권한.
owner
파일을 삭제하는 것 조차 방지하는 것이 좋습니다 ." — 파일을 삭제하기 위해 파일에 대한 어떠한 종류의 권한 (읽기, 쓰기 또는 실행)이 필요하지 않다는 점을 제외하고.
/proc/${PID}/maps
찾은 다음 메모리의 관련 섹션을 읽음으로써 메모리 덤프에 취약한 접근 방식은 아닙니다./proc/${PID}/mem
아닐까요? 또는 실행 파일의 권한을 제한하면 실행 중에 메모리의 관련 섹션에 대한 읽기 권한도 제한됩니까? (후자는 IMO가 아닌 것 같습니다.)