이것은 내 사용자입니다
$ id
uid=1000(pzk) gid=1000(pzk) groups=1000(pzk)
이것은 내 디렉토리 구조입니다
$ ls -tlrh
total 12K
d-w--w--w- 2 root root 4.0K Apr 13 10:53 write-for-everyone
dr--r--r-- 2 root root 4.0K Apr 13 10:53 read-for-everyone
d--x--x--x 2 root root 4.0K Apr 13 10:53 execute-for-everyone
write-foreveryone 권한이 주어지면 write-foreveryone에서 파일을 생성할 수 있어야 합니다. 그렇지만 난 아니야.
$ touch write-for-everyone/x
touch: cannot touch 'write-for-everyone/x': Permission denied
이 문제를 해결하도록 도와주세요.
답변1
디렉터리 w
제어의 비트는 디렉터리의 파일 이름 목록으로 변경되어 파일을 생성하고, 이름을 바꾸고, 삭제합니다. 그러나 이러한 작업에는 디렉터리에 있는 파일 자체에 액세스하는 것도 포함되며 이를 위해서는 x
권한이 필요합니다. 관련된 시스템 호출은 와 유사합니다 open("dir/file1", O_WRONLY | O_CREAT)
. 이 비트가 없으면 w
액세스가 제공되지 않습니다 x
.
반면에 디렉터리에 있는 파일 목록을 읽는 것은 해당 r
비트에서만 작동합니다. 왜냐하면 디렉터리 내의 파일이 아닌 디렉터리 자체에 대한 액세스만 필요하기 때문입니다. 관련된 시스템 호출은 open("dir", O_RDONLY)
.
어떤 의미에서 x
디렉토리의 비트 dir
는 dir/somefile
.