
これは私のユーザーです
$ 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
。