111 또는 333과 같은 Linux 권한(예: 사용자실행 가능, 하지만읽을 수 없음파일), 실행 능력이 자동으로 읽기 능력을 의미하지 않는다면 어떻게 될까요?
답변1
나는 그것을 가지고 놀았고 분명히 실행 권한이 읽기 권한을 의미하지는 않습니다. 바이너리 파일은 실행 가능하지만 읽을 수는 없습니다.
$ 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
답변2
예를 들어 특정 디렉터리에 실행 파일을 (비밀로) 보관한 다음 사용자가 디렉터리 내용을 볼 수 없는 상태에서 해당 파일을 호출할 수 있도록 허용하는 경우(그러나 특정 파일이 디렉터리에 있다는 것을 알고 있는 경우) 이는 디렉터리에 적합합니다. 거기에 알려주세요!). 111과 비교하여 333은 디렉토리의 내용을 볼 수 없이 이러한 디렉토리에 파일 쓰기/삭제를 허용합니다.
답변3
분명히 모든 조합이 그렇게 유용한 것은 아니지만 특별히 언급한 조합의 관점에서 볼 때 문제의 파일이 스크립트(예: 쉘 스크립트)가 아닌 한 read
파일을 실행하는 데 실제로 권한이 필요하지 않습니다. 단지 권한만 필요합니다. ), 펄 스크립트( ) 등). 일반 바이너리는 권한 이 있는 한 실행될 수 있습니다 . *BSD 시스템에서 일부 실행 파일은 특히 "보안 중요" 명령에 대해 허가 없이 허가를 부여합니다 .execute
.sh
.pl
execute
execute
read
su
그렇다면 사용자에게 read
권한(그리고 execute
권한만)을 부여하면 어떨까요? 사용자가 파일을 읽을 수 없기 때문입니다.복사이 사용자에 의한 것입니다! 권한을 제거하면 read
사용자가 나중에 오용할 수 있는 실행 파일의 "개인" 복사본을 만드는 것을 방지할 수 있습니다(예: get SUID=root on
).
그리고 write
권한이 없으면 파일이 실수로 삭제되는 것을 방지할 수 있습니다.
read
소유자에게 권한을 부여하지 않는 것은 write
다소 드문 일이지만 때로는 owner
소유자가 파일을 삭제하지 못하도록 막는 것도 좋은 생각일 수 있습니다. 물론 이러한 조치는 파일의 권한만으로 우회할 수 있다는 점 owner
은 말할 root
것도 없습니다.chmod