0111, 0333 등 권한의 목적

0111, 0333 등 권한의 목적

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.plexecuteexecutereadsu

그렇다면 사용자에게 read권한(그리고 execute권한만)을 부여하면 어떨까요? 사용자가 파일을 읽을 수 없기 때문입니다.복사이 사용자에 의한 것입니다! 권한을 제거하면 read사용자가 나중에 오용할 수 있는 실행 파일의 "개인" 복사본을 만드는 것을 방지할 수 있습니다(예: get SUID=root on).

그리고 write권한이 없으면 파일이 실수로 삭제되는 것을 방지할 수 있습니다.

read소유자에게 권한을 부여하지 않는 것은 write다소 드문 일이지만 때로는 owner소유자가 파일을 삭제하지 못하도록 막는 것도 좋은 생각일 수 있습니다. 물론 이러한 조치는 파일의 권한만으로 우회할 수 있다는 점 owner은 말할 root것도 없습니다.chmod

관련 정보