尽管目录权限正确,但为什么在使用 mv 时权限被拒绝?

Tim*_*nst 30 osx permissions directory files mv

尽管目录所有者设置为我的用户并且用户权限设置为 7 Musicmv但我在尝试移动文件夹时获得权限被拒绝。这是怎么回事?

(我知道我可以使用 sudo 但我想找出问题所在。这里有些东西闻起来很腥)。Ps:我在 Mac OS X El Capitan 上。

终端截图

小智 52

我使用的是适用于 Linux 的 Windows 子系统。我在不同的 bash 实例中打开了该目录。关闭它让我移动目录。

  • 在带有远程 WSL 的 VS Code 中,我不得不关闭编辑器并在该 VS Code 项目之外打开 WSL 的终端。 (15认同)

Kon*_*rak 26

做笔记,在文件夹的时候a,移动bc的文件夹权限a决定你能做什么。

在这种情况下,权限.将是最重要的。

请注意,权限比简单的更复杂rwx。您的music文件夹@末尾.有一个,文件夹末尾有一个+

  • 使用xattr -h以确定@符号的复杂权限。
  • 使用getfacl来确定ACL的+符号。

  • 或者使用`ls -la@e`。很可能在这里,有一个“拒绝删除”ACL 也可以防止重命名。 (4认同)
  • 不,没有手动输入。如果其他人想了解更多信息,我可以在谷歌周围找到它的另一个名称:[扩展属性](https://en.wikipedia.org/wiki/Extended_file_attributes#Linux)。 (2认同)

Tim*_*nst 12

似乎在该目录深处的某处至少有 1 个文件没有正确的权限。

所以,我所做的是:

sudo chown -R valmar ./Music
sudo chmod -R 755 ./Music
Run Code Online (Sandbox Code Playgroud)

现在它起作用了。

  • 无论问题是什么,赋予音乐文件执行权限都不是解决方案。 (18认同)
  • 并且目录中的对象似乎不太可能干扰您重命名该目录的能力。 (3认同)

spi*_*nup 7

这里的问题可能与 Music 文件夹的访问控制列表 (ACL) 有关。ACL 是一个单独的权限系统,与通常由ls -l. Home 文件夹和其他地方的一些其他目录也有 ACL。

要查看主目录中的 ACL,请使用:

/bin/ls -le ~
Run Code Online (Sandbox Code Playgroud)

您可能会看到类似0: group:everyone deny deleteMusic 目录的规则。正如您所指出的,您可以使用sudo. 如果您不想(或不能)这样做,那么您还有其他选择,因为您是文件的所有者。您可以根据其索引(在我上面给出的示例中为 0),从 Music 目录的 ACL 中删除有问题的条目:

/bin/chmod -a# 0 Music
Run Code Online (Sandbox Code Playgroud)

或者您可以删除 ACL 中的所有条目:

/bin/chmod -N Music
Run Code Online (Sandbox Code Playgroud)

现在您可以移动目录(取决于常规 POSIX 权限)。如果要在移动后放回 ACL,可以使用:

/bin/chmod +a "group:everyone deny delete" Music_tmp
Run Code Online (Sandbox Code Playgroud)

/bin/ls -le再次使用以确认 ACL 是否符合您的要求。查看 ACL 示例以man chmod获取更多信息。特别是,这个介绍很有帮助:

每个文件都有一个 ACL,其中包含一个有序的条目列表。每个条目都引用一个用户或组,并授予或拒绝一组权限。在用户和组存在同名的情况下,用户/组名称可以以“user:”或“group:”为前缀,以指定名称的类型。

ACL命令

我不认为手册页解释了有关排序的规则,但此页面清楚地解释了 ACL 的顺序规则。特别是,显式deny规则将在显式allow规则之前应用。因此,只要该group:everyone deny delete条目就位,就不可能通过allow规则授予您的用户删除权限。这是因为该everyone组(包括您)的权限被拒绝,并且将首先应用该规则。

  • 我不知道为什么这被否决了。macOS 默认主目录上的“所有人拒绝删除”ACL 条目是目录既不能移动也不能删除的_实际_原因。(另外,请注意操作系统可能随时重新创建它们。) (2认同)