Wie benötigt Homebrew keinen Besitz von /usr/local mehr?

Heute habe ich ausgeführt brew updateund nach der Migration des Repositorys gemeldet, dass es keinen Besitz mehr benötigt von /usr/local:

$ brew update
Updated Homebrew from 5371359 to 13f08a2.
...
==> Migrating HOMEBREW_REPOSITORY (please wait)...
==> Migrated HOMEBREW_REPOSITORY to /usr/local/Homebrew!
Homebrew no longer needs to have ownership of /usr/local. If you wish you can
return /usr/local to its default ownership with:
  sudo chown root:wheel /usr/local

Diese Änderung scheint ein wenig zweifelhaft. Wie erreicht Brew dieses neue Verhalten und umgeht anscheinend Sicherheitskontrollen?

Welche Sicherheitskontrollen werden umgangen? Die /usr/localist bei SIP nicht dabei. Siehe Informationen zum Systemintegritätsschutz auf Ihrem Mac unter „Pfade und Anwendungen, in die Apps und Installationsprogramme von Drittanbietern schreiben können:“ /usr/localaufgeführt.
Da ich kein Benutzer von Homebrew bin, kompiliere ich die gewünschten Dienstprogramme, die in OS X nicht enthalten sind, direkt aus dem Quellcode . Trotzdem würde ich mir vorstellen, dass Homebrew nach Bedarf/Notwendigkeit umgeschrieben wurde, um sich normal wie andere Apps zu verhalten haben in der Vergangenheit gemacht. IMO Homebrew hätte von Anfang an geschrieben werden sollen, um nicht von Anfang an den Root-Besitz an sich reißen zu müssen!
Ich meine, wenn /usr/localund seine Kinder im Besitz von root:adminor root:wheelsind und nicht von Gruppen beschreibbar sind, dann habe ich keinen Zugriff, um in diese Verzeichnisse zu schreiben (und Homebrew vermutlich auch nicht), aber wenn das der Fall ist, wie kann Homebrew die Installation verwalten? und Anwendungen von diesen Standorten entfernen?
Mir ist gerade aufgefallen, dass die Nachricht nur auf Verweise /usr/localund nicht auf ihre Nachkommen verweist. Und wenn man sich ansieht, was eine brandneue Homebrew-Installation bewirkt, werden alle Unterverzeichnisse so eingestellt, dass sie $USER gehören und von der Gruppe beschreibbar sind.
Es ist eine Sicherheitslücke, den /usr/localBesitz an den Benutzer zu ändern! Es ist besser, nicht schlechter, es nicht zu besitzen. Es ist überhaupt nicht zweifelhaft, kein Eigentum daran zu haben; aber ob es nötig ist, ist fraglich. Sophos schreibt tatsächlich auch in dieses Verzeichnis (richtig). Lassen Sie das sinken.

Antworten (2)

Laut diesem Ruby-Skript: update-report.rb haben sie gerade Sachen nach /usr/local/Homebrew verschoben, das immer noch Ihnen gehört.

Muss /usr/local nicht von $USER beschreibbar sein, damit /usr/local/Homebrew erstellt werden kann? Was ist mit anderen Verzeichnissen wie /usr/local/Cellar oder /usr/local/opt? Benötigt Homebrew nicht immer noch (Nicht-Sudo-) Zugriff, um in diese Verzeichnisse zu schreiben? Wie kann es das tun, wenn die Verzeichnisse im Besitz von root sind und nicht von der Gruppe beschreibbar sind?
Bei der ersten Installation verwenden sie immer noch sudo, um das Homebrew-Repository zu erstellen, siehe install . Das Skript in meiner Antwort zum Aktualisieren, zu diesem Zeitpunkt besitzen Sie immer noch /usr/local, das Sie in der alten Version chowned haben.

Wir erstellen jetzt alle Root-Verzeichnisse /usr/local, die Sie benötigen, und überprüfen den Besitz an ihnen, anstatt es für /usr/localsich selbst zu verlangen.