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目录上的位dir控制着像dir/somefile.

答案2

您不能在该目录内写入,因为不允许跨越该目录。

尝试在此目录上添加执行权限,您现在应该能够创建文件:

chmod 333 write-for-everyone/

文件夹的执行权限意味着您可以在Unix系统上进入该文件夹。
更多信息这里, 和这里

希望这可以帮助 !

相关内容