尝试在只写目录中创建/删除/重命名文件时权限被拒绝

Posted

技术标签:

【中文标题】尝试在只写目录中创建/删除/重命名文件时权限被拒绝【英文标题】:Permission denied when attempt to create/remove/rename files in write-only directory 【发布时间】:2017-03-27 01:53:54 【问题描述】:

网上有很多帖子说目录的写权限允许受影响的用户对该目录中的create/remove/rename文件,但我发现如果没有执行权限集实际上无法完成。我尝试调用open/fopen/remove/rename,但无一例外都失败了。

应该有一些我错过或误解的东西。有一些解释是,对目录的操作通常涉及文件操作。如果它是正确的,我想知道涉及到什么操作。如果目录维护了从文件名到 inode 的映射,那么重命名时似乎没有理由涉及文件操作。

如果涉及到意外的文件操作,是否可以绕过此类操作直接操作目录?

【问题讨论】:

【参考方案1】:

你是对的,网络上到处都是错误的东西,尤其是对于 unix 文件权限规则。我用普通搜索引擎找到的第一个链接都是错误的。很有趣!

目录的文件权限是什么意思:

x 您可以“访问”此目录中的文件,这意味着您可以使用它们。如果您没有读取权限但有访问权限,则可以使用您知道但看不到的文件!

mkdir one
touch one/x.h
chmod -r one

ls one   // fails!
cat one/x.h  // works!

和写权限用于更改目录的内容。因此,只有在您对该目录具有写入权限的情况下,才能从该目录添加和删除文件!

由于无法读取/写入/执行位于您无法访问的目录中的文件,因此您始终需要该目录的访问权限才能使用其中的文件。

听起来有点奇怪,但就是这样实现的。

【讨论】:

以上是关于尝试在只写目录中创建/删除/重命名文件时权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

在配置单元中创建数据库时权限被拒绝错误

重命名文件夹时拒绝访问

在 vagrant 的 Django 应用程序中创建迁移文件夹的权限被拒绝

权限被拒绝尝试附加到已安装目录中的文件

使 SaveFileDialog 不在用户选择的目录中创建测试文件

如何在 /Library/Application Support 中创建目录