为什么 chown 在 OS X 上报告“操作不允许”?

为什么 chown 在 OS X 上报告“操作不允许”?

我正在尝试在我的 Mac(10.6.7)上执行以下操作:

sudo chown myusername:wheel ./entries

但 Unix/Mac 返回“操作不允许”。当我找到ls -lash罪魁祸首文件时,它看起来如下:

8 -rwxrwxrwx   1 myusername  staff   394B Apr 26 23:26 entries

我试过了,sudosudo su没用。有什么想法吗?

我正在尝试chmod从我的旧 Ubuntu 机器复制文件。大多数文件都已成功chmod递归执行;只有这个文件卡住了,我不明白为什么。

答案1

是的,Mac 在文件方面比 Unix 有很多增强。忽略整个资源分叉不再使用的东西有:

  • 标准 Unix 权限 ugo rwx等等。适用普通 Unix 工具。
  • 访问控制列表's,可用 来查看ls -le并可用 来更改chmod [ -a | +a | =a ]
  • 文件标志可以用ls -lO(大写哦,不是零)查看,可以用 更改chflags
  • 扩展属性,可用 来查看ls -l@(仅限属性键)以及可用 来查看和更改xattr。(如果没有给出任何信息,请使用xattr -h来获取帮助。)man xattr
  • 从 OS X 10.11 “El Capitan” 开始,系统完整性保护(SIP)进一步保护某些文件免受普通进程的更改,即使使用sudo运行也是如此。受 SIP 保护的文件将作为具有标志的文件root列出和/或作为具有属性的文件列出。ls -lOrestrictedls -l@com.apple.rootless

由于 Unix 权限、ACL、文件标志或 SIP,您可能会被拒绝对文件进行操作。要完全解锁文件:

sudo chmod -N file        # Remove ACLs from file
sudo chmod ugo+rw file    # Give everyone read-write permission to file
sudo chflags nouchg file  # Clear the user immutable flag from file
sudo chflags norestricted file  # Remove the SIP protection from file
sudo xattr -d com.apple.rootless file # Remove SIP protection from file

如果启用了系统完整性保护 (SIP),sudo chflags norestricted也会sudo xattr -d com.apple.rootless返回“操作不允许”错误。要清除标志和/或属性,您需要启动到macOS 恢复然后从终端运行命令(您可能必须先使用磁盘工具来解锁并安装您的启动驱动器,然后记住您的文件将位于/Volumes/Macintosh HD或您的启动驱动器的名称下)或完全禁用 SIP然后重新启动,命令应该就可以正常工作了。但请注意,将来的操作系统更新可能会将标志restrictedcom.apple.rootless属性恢复到您从中删除的任何文件。

不建议禁用 SIP因为它会删除大量针对恶意软件和意外损坏的保护,而且当您可以简单地根据每个文件删除保护时,它就没有必要了。如果您确实禁用了 SIP,请在完成更改后重新启用它。

请注意,如果ls -lO显示schg已设置标志,则必须进入单用户模式才能取消设置。我不会在这里讨论这个问题,因为还有更大的问题,比如为什么文件设置了该标志、为什么你要试图弄乱它以及后果会是什么。

答案2

我也遇到了同样的问题。结果发现有问题的文件被操作系统标记为“已锁定”。我找到了这个解决方案,它在几秒钟内解决了问题:

http://explanatorygap.net/2005/07/10/unlocking-files-recursively-from-the-command-line/

似乎rmTiger 中的命令已经发生了变化,如果您rm -Rf以提升的权限使用,它将自动解锁文件。

在 Tiger 之前的 OS X 中:find /Volumes/Transit -flags +uchg -print0 | xargs -0 chflags nouchg

在 Tiger 之后的 OS X 中:sudo rm -Rf foldername/

此外,即使在 OS X 10.4 之后,也可能存在文件元数据标记(如uchguappnd),这些标记会阻止对文件权限或所有权的任何修改。 chflags可以删除这些标记。一些文件属性/元数据以及不同复制工具如何处理它们是这里

答案3

我在使用 Crashplan.app 时也遇到了同样的问题。

这里列出的所有解决方案都对我不起作用,但这个解决方案确实起了作用: http://forums.macrumors.com/showthread.php?t=1546163

您必须更改系统和用户不可变标志:

执行此操作以查看文件/文件夹上哪些标志处于活动状态:

ls -lhdO MyFile

响应可能如下所示:

drwxrwxr-x 3 root admin schg,uchg 102B Apr 8 2013 MyFile

響鳴乌赫格是那些不可变的标志。一个用于系统,一个用于用户。要删除它们,请执行以下操作:

chflags noschg CrashPlan.app # this removes system immutable flag
chflags nouchg CrashPlan.app # this removes the user immutable flags

然后,至少对我来说,该文件已解锁,您可以删除它!

答案4

经过一番努力之后,我必须采取以下步骤来解决问题:

  • 将文件移至~/Desktop
  • sudo chown myusername:staff ./entries
  • 将文件移回其原始位置不起作用(再次不允许操作),所以......
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries

相关内容