sudo chown schlägt fehl, wenn der Betrieb nicht zulässig ist

8

Ich habe hier ähnliche Fragen gefunden, aber die Antworten auf diese Fragen lösen mein Problem nicht.

Wenn ich mache:

sudo chown <username> main.m

Ich bekomme eine Operation nicht erlaubt Fehler.

Die allgemeine Lösung für frühere Fehler war:

sudo chflags nouchg main.m

um eine Sperrflagge zu löschen. Danach kann ich die Datei jedoch immer noch nicht chownen. Ich habe auch versucht:

chflags noschg main.m

im Einzelbenutzermodus ohne Glück - ich bekomme einen Vorgang nicht erlaubten Fehler.

Wenn jemand irgendwelche Gedanken hat, wäre ich interessiert.

ericg
quelle
Was ist die zugrunde liegende Sache, die Sie versuchen zu tun? Vielleicht gibt es einen Grund dafür, dass diese Datei gesperrt ist.
Tamara Wijsman
Ich kann es also als Testdaten verwenden, ohne den Code in einem sicheren Hilfsprogramm abzulegen, was zusätzliches Debuggen erfordert - nicht unmöglich, aber ärgerlich genug, dass ein sicheres Hilfsprogramm nicht erforderlich ist, wenn ich die Attribute der Datei ändern kann. das würde die Sache etwas einfacher machen. Wenn man bedenkt, dass dies nur Testdaten sind, die erstellt wurden, gibt es keinen guten Grund mehr, eine Sperre zu haben.
Ericg
1
Auf welcher Art von Dateisystem befindet sich die Datei? Sie versuchen nicht, chownauf einem NTFS / FAT-Dateisystem zu verwenden, oder?
Zoredache
@ericgorr: Das meiste davon geht mir über den Kopf; Mir ist nicht bekannt, was genau ein sicheres Hilfsprogramm ist. Aber wie Sie sagen, es wurden nur Testdaten erstellt. Haben Sie die Testdatei in Ihrem Code ordnungsgemäß geschlossen?
Tamara Wijsman
@Tom ein Hilfsprogramm ist die Methode von OS X, einer Anwendung erhöhte Berechtigungen zu gewähren und gleichzeitig die Berechtigungen beizubehalten. Wenn eine App beispielsweise eine sichere Datei ändern möchte, weist sie das (autorisierte) Hilfsprogramm an, die Datei dafür zu ändern. Ich vermute, Ericgorr möchte vermeiden, seine / ihre Anwendung oder etwas anderes zu erhöhen, um das damit verbundene rigorose Debuggen zu vermeiden.
Vervious

Antworten:

8

Mac - Dateien können in geschützt werden vier drei verschiedene Möglichkeiten , dass ich bin mir dessen bewusst:

  1. Standard - Unix - Eigentümern und Berechtigungen wie r / w / x für Benutzer / Gruppe / andere , dass Sie mit sehen ls -lund fix mit chown(1)und chmod(1).
  2. Dateiflaggen wie uchgund schgdie Sie sehen ls -lOund mit denen Sie reparieren chflags(1).
  3. Die alten Finder-Metadaten "Sperrbit", mit denen Sie sehen GetFileInfo filename. Sie können auch das Vorhandensein der Finder-Metadaten sehen, jedoch nicht deren Bedeutung mit ls -l@. Sie können es mit beheben SetFile(1). Egal, dies ist uchgjetzt der Flagge zugeordnet.
  4. Zugriffssteuerungslisten (ACLs), die Sie ls -lemit den ACL-bezogenen Argumenten anzeigen und mit diesen korrigieren chmod(1).

Lassen Sie uns also sehen, was mit Ihrer Datei los ist, indem Sie all diese Flags zu Folgendem kombinieren ls:

ls -lO@e main.m

Es hört sich so an, als ob Sie bereits wissen, wie man mit # 1 und # 2 umgeht.

Wenn Sie eine ACL (# 4) sehen, können Sie diese mit den ACL-bezogenen Argumenten an beheben chmod(1).

Wenn Sie immer noch ratlos sind, aktualisieren Sie Ihre Antwort mit der Ausgabe des lsoben vorgeschlagenen kombinierten Befehls, damit wir sehen können, was los ist.

Spiff
quelle
Das Problem scheint bei ACLs zu liegen. Ich finde es interessant, dass sudo keinen um solche Schlösser herum bekommt. Darüber hinaus hat chmod -R -a # 0 * die ACLs aus den meisten Dateien in der Hierarchie entfernt, sie jedoch nicht aus einigen entfernt - die Verwendung von sudo mit dem chmod hat nicht geholfen.
Ericg