这是我的用户
$ 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
.