touch 명령은 쓰기가 허용된 디렉토리에 파일을 생성할 수 없습니다.

touch 명령은 쓰기가 허용된 디렉토리에 파일을 생성할 수 없습니다.

이것은 내 사용자입니다

$ 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디렉토리의 비트 dirdir/somefile.

답변2

디렉터리 확장이 허용되지 않으므로 이 디렉터리 내에 쓸 수 없습니다.

이 디렉터리에 실행 권한을 추가하면 이제 파일을 만들 수 있습니다.

chmod 333 write-for-everyone/

폴더에 대한 실행 권한은 Unix 시스템의 폴더에 들어갈 수 있음을 의미합니다.
추가 정보여기, 그리고여기.

도움이 되었기를 바랍니다!

관련 정보