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

标签 linux file-permissions permission-denied

网上有很多帖子说目录的写权限允许受影响的用户在该目录中创建/删除/重命名文件,但我发现实际上如果不执行就无法完成权限集。我尝试调用open/fopen/remove/rename,但无一异常(exception),它们都失败了。

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

如果涉及非预期的文件操作,是否可以直接操作目录,绕过此类操作?

最佳答案

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

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

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

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

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

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

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

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

关于linux - 尝试在只写目录中创建/删除/重命名文件时权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40571613/

相关文章:

linux - 命令源码

linux - 设置SSL/需要先设置邮件

java - 使用 WINEPREFIX 的 ANT exec 任务

linux - 尽管用户存在但无法 chown

c++ - 如何在 root 用户拥有的文件夹中以编程方式创建文件

java - com.sun.net.httpserver 报错,是什么意思?

C#更新程序权限

Git 无法解释地更改单个文件的权限

c# - SC.EXE - 从 C# 调用 - 拒绝访问

Azure ServiceBusClient,应用程序注册, "System.UnauthorizedAccessException Unauthorized access"