Warum meldet chown unter OS X "Operation not allowed"?

64

Ich versuche auf meinem Mac (10.6.7) Folgendes zu tun:

sudo chown myusername:wheel ./entries

aber Unix / Mac gibt "Operation not allowed" zurück. Wenn ich ls -lashdie Täterakte habe, sieht es so aus:

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

Ich habe es versucht sudound sudo su; nichts funktioniert. Irgendwelche Ideen, was ist los?

Ich versuche, chmodDateien zu kopieren, die ich von meiner alten Ubuntu-Box kopiert habe. Die meisten Dateien wurden erfolgreich chmodrekursiv bearbeitet. nur dieser steckt fest und ich verstehe nicht warum.

josef.van.niekerk
quelle
1
Hast du es versucht sudo chgrp wheel ./entries?
Squircle
1
Führen Sie eine Dateisystemprüfung durch. Öffnen Sie das Festplatten-Dienstprogramm, wählen Sie Ihr Volume aus, und klicken Sie auf " Festplatte überprüfen" und ggf. auf " Festplatte reparieren" .
Daniel Beck
Stellen Sie sicher, dass die Datei nicht im Finder gesperrt ist (kein Sperrsymbol auf dem Symbol). Öffnen Sie zum Ändern das Dialogfeld "Informationen" und deaktivieren Sie " Gesperrt" .
Daniel Beck
Wenn es sich um ein "externes" Volume handelt (dh nicht um das System-Volume), müssen Sie möglicherweise die Option "Besitz auf diesem Volume ignorieren" entfernen. (Informationen zum Volume selbst finden Sie unten im Fenster "Informationen".)
Mivk

Antworten:

84

Ja, Mac hat viele Verbesserungen an Unix im Bereich der Dateien. Wenn man die ganze Ressourcengabel ignoriert , die nicht mehr viel benutzt wird, gibt es:

  • die Standard-Unix-Berechtigungen ugo rwx und so weiter. Es gelten die normalen Unix-Tools.
  • ACLs , sichtbar mit ls -leund änderbar mit chmod [ -a | +a | =a ].
  • Dateiflaggen sichtbar mit ls -lO(Capital oh, not zero) und änderbar mit chflags.
  • Erweiterte Attribute , sichtbar mit ls -l@(nur Attributschlüssel) und sichtbar und änderbar mit xattr. (Verwenden Sie xattr -hfür Hilfe, wenn man xattrSie nichts gibt.)
  • Ab OS X 10.11 "El Capitan" schützt der Systemintegritätsschutz (SIP) einige Dateien vor Änderungen gegenüber normalen Prozessen, auch wenn sie sudoals ausgeführt werden root. Durch SIP geschützte Dateien werden ls -lOmit dem restrictedFlag und / oder ls -l@mit dem com.apple.rootlessAttribut aufgelistet .

Aufgrund von Unix-Berechtigungen, ACLs, Dateiflaggen oder SIP können Ihnen Vorgänge für eine Datei verweigert werden. So entsperren Sie eine Datei vollständig:

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

Wenn der Systemintegritätsschutz (SIP) aktiviert ist sudo chflags norestrictedund sudo xattr -d com.apple.rootlessaußerdem den Fehler "Vorgang nicht zulässig" zurückgibt. Um das Flag und / oder Attribut zu löschen, müssen Sie in macOS Recovery booten und entweder die Befehle vom Terminal ausführen (möglicherweise müssen Sie zuerst das Festplatten-Dienstprogramm verwenden, um das Boot-Laufwerk zu entsperren und bereitzustellen, und sich dann daran erinnern, dass sich Ihre Dateien unter /Volumes/Macintosh HDoder unter welchem ​​Boot befinden Laufwerk ist benannt) oder SIP ganz deaktivieren und dann neu starten und die Befehle sollten dann funktionieren. Beachten Sie jedoch, dass zukünftige Betriebssystemaktualisierungen wahrscheinlich das restrictedFlag und das com.apple.rootlessAttribut für alle Dateien wiederherstellen , aus denen Sie es entfernt haben.

Das Deaktivieren von SIP wird nicht empfohlen, da es viel Schutz vor Malware und versehentlichem Schaden entfernt. Außerdem ist es nicht erforderlich, wenn Sie den Schutz einfach auf Dateibasis entfernen können. Wenn Sie SIP deaktivieren, aktivieren Sie es erneut, wenn Sie die gewünschten Änderungen vorgenommen haben.

Beachten Sie, dass Sie, wenn angezeigt wird, dass ls -lOdas schgFlag gesetzt ist, in den Einzelbenutzermodus wechseln müssen, um es zu deaktivieren. Ich werde hier nicht darauf eingehen, da es größere Fragen gibt, warum die Datei dieses Flag gesetzt hat und warum Sie versuchen, sich damit herumzuschlagen und was die Konsequenzen sein werden.

Alter Pro
quelle
7
Hinzu kommt, dass andere Flags Sie möglicherweise daran hindern, Ihre Dateien zu ändern. In mein Drehbuch habe ichsudo chflags -R nouchg,noschg,nouappnd,nosappnd,noopaque,dump .
djjeck
1
Hinweis: Wenn ein Objekt das Flag "Unveränderlich" aufweist, wird das Kontrollkästchen "Gesperrt" unter "Informationen" aktiviert und abgeblendet. "sudo chflags nouchg" behebt das Problem.
Foo Bar
1
Ich konnte das -Nund ugo+rwbeides nicht gleichzeitig machen (ich bekam es Failed to clear ACL on file ugo+rw: No such file or directory), aber es funktionierte gut, wenn ich sie einzeln laufen ließ. Wenn rekursiv gewünscht wird, -Rmuss das erste Argument sein.
Owenfi
3
Beachten Sie, dass der Systemintegritätsschutz (rootless) dies auch bei El Capitan und höher verursachen kann. Um dies zu beheben, booten Sie in den Wiederherstellungsmodus ( Cmd-R), öffnen Sie das Terminal und starten Sie es csrutil disableneu (verwenden Sie zum erneuten Aktivieren csrutil enable).
Erwin Wessels
Danke ... Ich hatte keine Ahnung über Dateiflaggen. Jetzt verstehe ich, warum es hießoverride rwxrwxrwx huttarl/staff uchg for green.html?
LarsH
18

Ich hatte das gleiche problem Es stellt sich heraus, dass die betroffenen Dateien vom Betriebssystem als "Gesperrt" markiert wurden. Ich habe diese Lösung gefunden und sie hat die Probleme in Sekunden gelöst:

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

Es scheint, dass sich der rmBefehl in Tiger so geändert hat, dass bei Verwendung rm -Rfmit erhöhten Rechten die Dateien automatisch entsperrt werden.

In OS X vor Tiger: find /Volumes/Transit -flags +uchg -print0 | xargs -0 chflags nouchg

In OS X nach Tiger: sudo rm -Rf foldername/

Auch nach OS X 10.4 kann es Dateimetadaten-Flags wie uchgund geben uappnd, die eine Änderung der Dateiberechtigungen oder des Eigentums verhindern. chflagskann die Fahnen entfernen. Einige der Dateiattribute / Metadaten und wie sie von verschiedenen Kopierwerkzeugen verarbeitet werden, finden Sie hier .

Bendalton
quelle
sudo rm -Rf foldername/arbeitet perfekt an OSX Mountain Lion
Aryo
5
@Aryo: rmlöscht das Verzeichnis. Gibt es eine Möglichkeit, alles freizuschalten, ohne es zu löschen? Wenn ich gucke uchgist nicht festgelegt, und ich kann es wie erwartet ein- und wieder ausschalten (mit chflags [no]uchg), aber das hat keinen Einfluss auf das Schlosssymbol im Finder oder auf meine Fähigkeit dazu chown.
Orome
12

Ich hatte das gleiche Problem mit der Crashplan.app.

Alle hier aufgelisteten Lösungen würden mir nicht helfen, aber dieser hat den Trick gemacht: http://forums.macrumors.com/showthread.php?t=1546163

Sie müssen die system- und benutzerunabhängigen Flags ändern:

Gehen Sie folgendermaßen vor, um festzustellen, welche Flags in Ihrer Datei / Ihrem Ordner aktiv sind:

ls -lhdO MyFile

Die Antwort könnte folgendermaßen aussehen:

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

schg , uchg sind diese unveränderlichen Flags. Eine für das System und eine für den Benutzer. Gehen Sie folgendermaßen vor, um sie zu entfernen:

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

Dann ist zumindest für mich die Datei freigeschaltet und Sie können sie löschen!

ruffy
quelle
Awesome, musste chflagsmit sudozwar, aber es macht Sinn
Felipe
Hatte das gleiche Problem mit CrashPlan.app (hatte ich drwxrwxr-x@ 3 _BGMXPCHelper admin schg 96B 9 Jan 2018 CrashPlan.app) und dies war die einzige Lösung, die mir erlaubte, es zu löschen, danke!
webeno
12

In OS X 10.11 (El Capitan) kann dies auch durch die neue Rootless- Funktion verursacht werden. In dieser Antwort finden Sie eine Erklärung.

Kurz gesagt, für einige wichtige Verzeichnisse, gibt es keine Möglichkeit , sie zu ändern - egal ob Sie verwenden sudo, chownoder chmod. Dies wirkt sich auf das /usrVerzeichnis aus (obwohl Sie Änderungen vornehmen dürfen /usr/local).

Um ein durch Rootless geschütztes Verzeichnis zu ändern, müssen Sie Rootless deaktivieren . Und natürlich können Sie es wieder aktivieren, nachdem Sie Ihre Änderungen vorgenommen haben, da es eine wichtige Sicherheitsverbesserung darstellt.

Nate
quelle
1
Beeindruckend. Das hat mich verrückt gemacht. Irgendwie musste ich etwas nach / usr / lib kopieren, was sonst nicht in / usr / local / lib gefunden wurde (frag mich nicht warum). Und das hat den Trick getan.
Qwerty_so
4
Eigentlich müssen Sie Rootless nicht komplett deaktivieren. Sie können einfach in den Wiederherstellungsmodus booten (was Sie ohnehin tun müssten, um Rootless zu deaktivieren) und die gewünschten Änderungen im Terminal vornehmen.
Old Pro
6

Nach vielen Kämpfen musste ich Folgendes tun, um das Problem zu beheben:

  • Verschob die Datei nach ~/Desktop
  • sudo chown myusername:staff ./entries
  • Das Verschieben der Datei an ihren ursprünglichen Speicherort hat nicht funktioniert (Vorgang erneut nicht zulässig), also ...
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries
josef.van.niekerk
quelle
4

Ich hatte das gleiche Problem mit meinem privaten Ordner. Am Ende habe ich den Finder so benutzt:

Gehen Sie zu -> Computer -> Ihre Festplatte -> Benutzer -> Ihr Benutzername -> Rechtsklick -> Informationen abrufen

Ich fand, dass es verschlossen war, wahrscheinlich habe ich es in der Vergangenheit getan und vergessen. Deaktiviert das gesperrte Kontrollkästchen, Problem behoben.

Ich kann die Verwendung von "Get Info" vom Finder empfehlen, um diese Art von Problemen anzugehen.

(OS X 10.8.3)

Danza
quelle
Dies hat mir geholfen, die .isofehlerhafte Virtual Box freizuschalten .
Nakilon
1

Stellen Sie sicher, dass sowohl die Datei als auch der übergeordnete Ordner entsperrt sind

Beim Versuch, eine Mac Mail-E-Mail-Signaturdatei zu löschen, trat ein ähnliches Problem auf. Ich konnte es nicht löschen, bis ich die Datei sowie den übergeordneten Ordner entsperrt hatte.

camslice
quelle