Wie führe ich Homebrew als root aus?

Vor Jahren konnten Sie brewals Root durchgehen, indem Sie einfach brewzu Root wechselten, aber sie haben diese Funktion entfernt. Also habe ich in Homebrew 1.1.6 bearbeitet /usr/local/Homebrew/Library/Homebrew/brew.sh, um die Root-Prüfung (diejenige, die sagte, dass sie "extrem gefährlich" ist) zu entfernen, damit ich brewals Root laufen konnte.

Die neuere Version von Homebrew funktioniert immer noch damit, setzt die brew.shDatei aber jedes Mal zurück, nachdem ich sie ausgeführt habe brew, auch wenn ich chmod 500sie habe. Ich könnte ein Skript schreiben, um es zu ändern und dann brewautomatisch auszuführen, aber ich bin mir nicht sicher, ob dies immer funktioniert und möchte kein Risiko eingehen. Hat jemand eine andere Methode gefunden, um Homebrew als root auszuführen?

Aus Neugier, warum willst du brewals root laufen? Auch sudofür Ihre Zwecke nicht ausreichend?
@Allan sudoführt es als root aus und es gibt mir den gleichen "extrem gefährlichen" Fehler. Ich möchte als root laufen, da es sonst Probleme beim Installieren bestimmter Pakete gibt, insbesondere wenn etwas nicht über Homebrew installiert wurde (z. B. über pip). Ich bin diesen Weg schon oft gegangen. Außerdem funktioniert es für mehrere Benutzer ohne seltsame Problemumgehungen nicht richtig, es sei denn, ich installiere alles als root.
$ su -> $ brauen was du willst ?
Das Erstellen eines Softwarepakets rootist riskant. Selbst wenn Sie ein Paket ohne einen Paketmanager erstellen, würden Sie das Paket als Benutzer ohne Berechtigungen (selbst) erstellen und dann das Paket wie rootmit installieren sudo. Paketmanager wie Fink und MacPorts bauen beide mit ihren eigenen Benutzern ohne Privilegien und installieren sie dann als root. Homebrew hat keinen solchen Mechanismus.
@fd0 Verständlich, aber ich bin bereit, das Risiko einzugehen; Sie können ohne Root auf meinem PC sowieso ziemlich viel Schaden anrichten. Aber warum installiert Homebrew nicht einfach mit root wie die anderen? Ihr derzeitiger Ansatz, Systemdateien als ein bestimmter Benutzer zu installieren, hat meine Berechtigungen viele Male ruiniert.
@StrawHara Wenn ich das mache, erkennt es, dass es als root ausgeführt wird und stoppt.
Hmm, ich sehe das Problem an meinem Ende nicht, bei dem die brew.shDatei zurückgesetzt wird, nachdem sie geändert und dann ein brewBefehl ausgeführt wurde. So kann ich gut laufen sudo brew whateverund brew whateverim Tandem fahren. Meine brew --versionAusgabe lautet also: Homebrew 1.2.1-98-g803f9cbf7b-dirty Homebrew/homebrew-core (git revision d3d6; last commit 2017-05-28)FYI, ich habe meine brew.shDatei geändert, um alle Zeilen in der check-run-command-as-rootFunktion auszukommentieren, und stattdessen eine einzelne returnAnweisung am Anfang der Funktion platziert.
@GDP2 Ich habe auf Homebrew 1.2.1 aktualisiert (obwohl meines aus irgendeinem Grund nicht "schmutzig" ist) und das getan, was Sie vorgeschlagen haben, und ich kann es sudo brew ...mehrmals ausführen, aber es "aktualisiert" Homebrew, wenn ich sudo brew install ...den Hack überschreibe, also es kommt auf das alte Problem zurück.
Ich habe auch versucht, meine Änderung in /usr/local/Homebrew mit git festzuschreiben, kein Glück. Vielleicht kann ich die brew.sh-Datei zum Schreiben per SIP sperren lassen, auch für root? :D
@sudo Hmm, das ist sehr seltsam. Ich habe versucht, a zu machen, brew installund es ging ohne Probleme weiter, dh es blieb brew.shunverändert und wurde problemlos installiert (möglicherweise unabhängige Nebenbemerkung: Ich musste zuerst export HOMEBREW_NO_SANDBOX=truedie Installation korrekt abschließen). Bevor Sie die Datei mit SIP schützen , können Sie es sudo chflags schg /usr/local/Homebrew/Library/Homebrew/brew.shmit dem versuchen chmod 500, was Sie getan haben. Das wird, laut man chflags, "das unveränderliche Flag des Systems setzen (nur Superuser)".
Zur Verdeutlichung meines letzten Kommentars: Ich habe einen brew installUnterstand sudo -sgemacht und es ging reibungslos weiter.
Ja, ich weiß, das ist alt. SO würde wahrscheinlich kein Duplikat mögen. Hier also mein Nachtrag. Ich verstehe die Notwendigkeit einer Nicht-Root-Installation vollständig ... aber es scheint übertrieben zu sein, Root nicht zu erlauben, "brew leaves --installed-on-request" auszuführen - was einfach eine Abfrage ist, um herauszufinden, was installiert ist. Auch das schlägt mit dem gleichen Fehler fehl. Ich habe ein Skript, das alle installierten Produkte (PECL, APT, BREW PIP) dokumentieren soll, und für einige davon (APT) ist Root erforderlich. Wenn root für Brew verboten ist, sehe ich keine saubere Möglichkeit, dies alles in einem Skript auszuführen. Rat? (Es wird auf einer Vielzahl von Systemen verwendet.)
@Dennis Idk, wenn dir das hilft, aber MacPorts läuft einfach als root. Ich verwende kein Gebräu mehr.
Danke @StrawHara. Ich entschied mich für Homebrew, nachdem ich die verfügbaren Installationsprogramme recherchiert hatte - nur widerwillig installiert, weil ich anscheinend keine andere Wahl hatte, als ein alternatives (nicht natives) Installationsprodukt zu verwenden. (Eine neue indirekte Ebene, wenn Sie so wollen.) Jetzt sieht es so aus, als würde MacPorts diese Rolle übernehmen. Nächste Woche vielleicht was anderes. Anscheinend müssen wir an der Spitze unserer Spiele stehen, um Software am Laufen zu halten, und die Zuverlässigkeit ist aus dem Fenster. Ich bin dagegen, das Schiff für die Lösung des Augenblicks zu verlassen. Ich schätze und schätze Ihre Antwort jedoch; Ich habe vielleicht keine andere Wahl, als dies zu tun.

Antworten (2)

Nachdem Sie Ihre Änderung am Skript vorgenommen haben, versuchen Sie, das unveränderliche Flag auf brew.sh zu setzen.

chflags uchg /usr/local/Homebrew/Library/Homebrew/brew.sh

Ich habe nicht getestet. Als allgemeine Regel verwurzele ich keine Anwendungen, deren Entwickler mich anflehen, dies nicht zu tun.

Ich stimme Jason auch zu. Es gibt einen Grund, warum sie sagen, Brew nicht als Root auszuführen. Hauptsächlich, weil sie die Entwickler sind und ich ihnen ihre Software anvertrauen werde. Im Gegensatz zu Macports, die das letzte Mal, als ich es überprüft habe, immer noch erforderlich ist, benötigt oder möchte Brew keine Root-Berechtigungen. Wenn Sie also etwas vermasseln, wird es höchstwahrscheinlich nicht Ihr gesamtes System borkieren. Alles ist in Ihrem Benutzerkonto enthalten und Sie müssen nicht mit sudo herumspielen.
Bestätigt funktioniert, danke. Es dauert einige Zeit, bis versucht wird, das erste Mal zu aktualisieren, aber später sudo brew installwerden s wie gewohnt ausgeführt.
Mit den Paketen, die ich auf einem Mac installieren würde, gibt es nicht viel, was ein System durcheinander bringen und unbrauchbar machen könnte. Jedenfalls kann ich mein System innerhalb von 30 Minuten wiederherstellen. Das Bereinigen meines Benutzers ist viel schwieriger, und viele Dinge funktionieren nicht, wenn sie nicht systemweit installiert sind, wie ich in den Kommentaren oben erkläre.

Typische Benutzer sollten das nicht tun, aber Sie sind nicht typisch, oder?

Zwei Probleme:

  1. Sie können root nicht stoppen. Wenn Sie darauf bestehen, root zu verwenden, kann root in jedem Fall überschreiben brew.sh.

  2. Du kannst nicht aufhören brew, schließlich redest du vom Laufen brew.

Also werden wir damit arbeiten. Lassen Sie uns einen Alias ​​einrichten, der kopiert und brew.shdann ausgeführt werden soll brew.

alias brew='cp /<modified>/brew.sh /<actuall>/brew.sh; /usr/local/bin/brew'

(Passen Sie die Pfade an Ihr System an).

Jetzt müssen Sie nur noch Folgendes tun:

sudo brew <arguments>

(Es wird root, kopiert über brew.sh, läuft dann brewals root mit Argumenten, brewwird danach überschrieben brew.shund Sie sind bereit, es noch einmal zu tun.)

Hinweis: Sie könnten auch sudoden Alias ​​eingeben, aber dieser Weg fühlt sich besser an, weil Sie jedes Mal nach einem Passwort gefragt werden.

Normalerweise können Sie setuid( chmod u+s) aus Sicherheitsgründen nicht zum Rooten von Shell-Skripten verwenden. Perl hat ein separates Programm suidperl, das installiert werden könnte und die Benutzerprivilegien eskalieren könnte, aber solche Lösungen sind für eine schnelle Antwort etwas tiefgründig.