Sind meine Berechtigungen für / usr / local / korrekt?

88

Ich verwende HomeBrew für meine Portanforderungen (scheint ein bisschen "sauberer" als MacPorts zu sein).

Ich kann ohne sudoing installieren (was großartig ist), aber der Mann, der Schritt verbindet, scheint es zu erfordern ( /usr/local/share/man/man3gehört root).
Ein Leitfaden Ich fand schon sagt ich rekursiv , chown /usr/localindem Sie

sudo chown -R `whoami` /usr/local

Ist das sicher? Oder ist es eine schlechte Idee?

Außerdem: Sind meine Berechtigungen korrekt?

$ pwd
/usr/local/share/man
$ ls -lah
total 32
drwxrwxr-x    8 root  staff   272B  4 Set 11:02 .
drwxrwxr-x    9 root  staff   306B 10 Set 11:27 ..
drwxr-xr-x    3 root  wheel   102B  4 Ago  2009 de
drwxrwxr-x  163 root  staff   5,4K 10 Set 11:27 man1
drwxr-xr-x   11 root  wheel   374B 10 Set 11:27 man3
drwxr-xr-x    7 ago   staff   238B 10 Set 11:39 man5
drwxr-xr-x   11 ago   staff   374B 10 Set 11:39 man7
-rw-r--r--    1 root  staff    13K  4 Set 11:02 whatis
Agos
quelle
5
So soll Homebrew verwendet werden. Einige Leute mögen anderer Meinung sein, aber der leitende Entwickler sagt, die Dinge so zu machen.
Mike McQuaid
1
Etwas bessere Alternative zu Ihrem chown: sudo chown -R :admin /usr/local. Auf diese Weise funktioniert es für jeden Administrator des Computers gleich. Möglicherweise müssen Sie jedoch auch ausführen, sudo find /usr/local -perm -200 -exec chmod g+w '{}' \+um sicherzustellen, dass die Gruppe über denselben Schreibzugriff wie der Benutzer verfügt.
Slipp D. Thompson
12
"Ich verwende Homebrew, es fühlt sich sauberer an als Macports. Oh, sehen Sie sich diese unklare Berechtigungssituation an. Ich werde Stack Overflow prüfen. Oh, hier ist ein kurzer Hack, der gegen die Best Practices von Unix und gegen die Versuche von Betriebssystemaktualisierungen geht zu erzwingen. Monat später: "Hey, wie wurde diese Malware installiert?"
Hmijail
Das Problem, das ich bei diesem Ansatz habe, ist, dass nur das Benutzerkonto, das Homebrew installiert, es verwenden kann. Ich habe einen Mac mit mehreren Konten, mit denen ich beispielsweise Arbeitsprojekte von Heimprojekten trenne. Wenn ich mit dem falschen Konto angemeldet bin, kann ich die Brauinstallation nicht verwenden. Ich bin diesen Weg gegangen, um die Gefahren der Verwendung von root zu vermeiden, aber ich bin nicht überzeugt, dass dies der beste Ansatz ist.
Auspice
@MikeMcQuaid Ich finde es interessant, dass Homebrew dies endlich eingestanden hat und in der vor ein oder zwei Wochen veröffentlichten neuen Version die Standardberechtigungen für / usr / local
oemb1905

Antworten:

37

Es ist normalerweise besser, die Berechtigungen so streng wie möglich zu halten. Im /usr/localBesitz von bleiben rootbedeutet, dass nur Prozesse, die als root/ ausgeführt werden sudo(oder über das Apple-Autorisierungsdialogfeld nach Administratorbenutzern fragen), in diesen Bereich schreiben können. Daher muss ein Prozess-Download Sie nach einem Kennwort fragen, bevor Dateien dort beschädigt werden.

Aber wie Sie sagen, macht es das Hinzufügen neuer Programme schwieriger.

Ich bin mit dem Laufen einverstanden sudo, da Sie die Dinge weniger oft installieren als ausführen, aber Sie müssen darauf vertrauen, dass der Build-Prozess nichts ändert, was er sollte.

Wenn Sie sudo vermeiden möchten, würde ich Homebrew installieren ~/usr/localund Ihren Pfad, manpath usw. ändern, um die Verzeichnisse darunter dort einzuschließen.

Eine bessere Möglichkeit besteht darin, einen anderen Benutzer zu erstellen homebrew, beispielsweise ein Verzeichnis, dessen Eigentümer dieser Benutzer ist. Dann installieren Sie dort mit sudo -U homebrew. Andere Benutzer haben den Vorteil, dass sie keine anderen Dateien überschreiben können, da sie nicht ausgeführt werden root und andere Programme keinen Einfluss auf Homebrew haben. (Ich stelle fest, dass die Homebrew-FAQ diesen neuen Benutzer vorschlagen, wenn Sie sich in einer "Mehrbenutzerumgebung" befinden. Ich würde sagen, dass jeder Unix-Rechner, einschließlich macOS, eine Mehrbenutzerumgebung ist.)

Wie das Homebrew-Wiki sagt, finden die Rezepte jedoch nicht alle Fälle von /usr/localund ersetzen sie durch das ausgewählte Verzeichnis, an dem wir vermutlich festhalten /usr/local.

user151019
quelle
1
+1, um Berechtigungen streng zu halten $PATHund $MANPATHBenutzerverzeichnisse zu ändern und einzuschließen. Wenn die installierten Programme keine systemweite Installation erfordern, ist dies eine viel bessere Alternative.
Zneak
3
+1 und akzeptierte Antwort für "Berechtigungen so streng wie möglich halten". Dabei brew doctor(unten vorgeschlagen) wurde mir gesagt, dass ich nur die freigegebenen Man-Verzeichnisse abrufen muss ... sicher genug für mich.
Vor dem
1
Eine Kompromisslösung, zumindest für Personen, die für die Sicherheit sorgen und nicht ständig als Administrator ausgeführt werden, besteht darin, die Gruppeneigentümer und Berechtigungen zu ändern, sodass nur Administratoren in / usr / local schreiben können. Siehe Kenorbs Antwort.
Hmijail
2
@Mark Ich finde es interessant, dass Homebrew dies endlich eingestanden hat und in der vor ein oder zwei Wochen veröffentlichten neuen Version die Standardberechtigungen für / usr / local
oemb1905
48

Ich benutze auch Homebrew und kann bestätigen, dass es absolut sicher ist. Zitieren der Installationsseite in der offiziellen Homebrew-FAQ :

Tun Sie sich selbst einen Gefallen und wählen Sie /usr/local

  1. Es ist einfacher,
    /usr/local/bin ist bereits in Ihrem PATH.

  2. Es ist einfacher,
    Unmengen von Build-Skripten zu zerstören, wenn sich ihre Abhängigkeiten nicht in / usr oder / usr / local befinden. Wir beheben dies für Homebrew-Formeln (obwohl wir nicht immer darauf testen), aber Sie werden feststellen, dass viele RubyGems- und Python-Setup-Skripte nicht funktionieren, was außerhalb unserer Kontrolle liegt.

  3. Es ist sicher, dass
    Apple POSIX-konform ist und dieses Verzeichnis für uns hinterlassen hat. Das bedeutet /usr/local, dass es standardmäßig kein Verzeichnis gibt, sodass Sie sich keine Sorgen machen müssen, vorhandene Tools zu beschädigen.

Wenn Sie Edelsteine ​​installieren möchten, die von Gebräuen abhängen, sparen Sie sich Ärger und installieren Sie sie /usr/local!

Es ist nicht trivial, gem anzuweisen, in Nicht-Standard-Verzeichnissen nach Headern und Dylibs zu suchen. Wenn Sie sich entscheiden /usr/local, „funktioniert einfach alles!“

Ich möchte nur hinzufügen, dass es eine sehr schlechte Idee ist , Dinge als root zu tun. chownDaher /usr/localerscheint es mir nicht nur vernünftig (es ist kein Systemverzeichnis unter OSX), sondern auch vernünftig .

Ihre Berechtigungen sind (noch) nicht korrekt. Führen Sie einfach den Befehl aus, den Sie aufgelistet haben, und alles wird gut.

Wenn Sie andere Probleme haben, denken Sie daran, das brew doctorkann Ihnen helfen!

Carmine Paolino
quelle
Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
bmike
7
Der Chat ist weg, was schade ist. Auf die Gefahr hin, die Geschichte zu wiederholen, möchte ich hier meinen Kommentar hinterlassen: Wenn dies getan wird, bedeutet das nicht, dass dies sicher ist.
Hmijail
4
Der Kern der Grafik ist, obwohl dies Homebrew vorschlägt, gibt es Gründe, warum dies falsch ist
user151019
1
brew doctorist einfach genial.
Utku
5
@Carmine Paolino Ich finde es interessant, dass Homebrew dies endlich eingestanden hat und in der vor ein oder zwei Wochen veröffentlichten neuen Version die Standardberechtigungen für / usr / local
oemb1905
9

Wenn Sie Homebrew verwenden, sollten Sie die Schreibberechtigung einer bestimmten Gruppe (entweder adminoder staff) erteilen , damit die Dateien für Benutzer in dieser Gruppe freigegeben werden können.

Zum Beispiel:

sudo chgrp -R admin /usr/local /Library/Caches/Homebrew
sudo chmod -R g+w /usr/local /Library/Caches/Homebrew

Weisen Sie dann die Benutzer, die Zugriff auf den brewBefehl haben sollen, dieser Gruppe zu (überprüfen Sie Ihre Gruppen über:) id -Gn.

brewFühren Sie es dann bei der Arbeit mit nicht mit aus sudo.

Wenn immer noch ein Berechtigungsproblem vorliegt, führen Sie brew doctorden Befehl aus, um das Problem zu beheben.

Kenorb
quelle
+1 für eine tatsächliche, besser erzogene Lösung, auch wenn diese noch nicht wirklich abgeschlossen ist. Zum Beispiel: Hinzufügen eines Benutzers zur Administratorgruppe auf BSD-Ebene? Wird das nicht mit dem Konzept der Administratorbenutzer von OS X zu tun haben?
Hmijail
Für die Aufzeichnung habe ich diese Anweisungen befolgt, aber nur meinen vorhandenen, über die Benutzeroberfläche von OS X erstellten Administrator-Benutzer verwendet, anstatt jemanden zu einer Gruppe in der CLI hinzuzufügen. Es funktioniert: Um Brühbefehle ausführen zu können, muss ich zuerst etwas tun su myAdminUser, und dann funktioniert alles wie beabsichtigt. Aber diese Lösung bietet natürlich keine Sicherheit für Leute, die ohnehin schon immer einen Admin-Benutzer haben.
hmijail
Dies ist wahrscheinlich der beste Weg, ich stimme @kenorb
pixel 67
7

Für das, was es wert ist, /usr/localwird es von OS X nicht als "System" -Ordner angesehen, und bei einer brandneuen Snow Leopard-Installation ist dieser Ordner leer.

Alle in diesem Ordner befindlichen Stammdaten sind das Ergebnis einer sudo make installanderen Software oder der Eingabe Ihres Kennworts nach einem Doppelklick auf eine .pkgDatei, in die die Daten kopiert werden sollen /usr/local.

Owning /usr/localhat über ein Jahr lang auf 2 Maschinen "für mich gearbeitet".

Wenn Sie MySQL installiert haben (ohne Homebrew zu verwenden) und die Dateien angezeigt haben, können die Datenbanken möglicherweise nicht mehr angezeigt werden (Sie müssen sie also an den Benutzer zurückgeben, unter dem MySQL ausgeführt wird) .)

Adam Vandenberg
quelle
5
gcc und andere Entwicklungstools suchen automatisch in / usr / local, sodass dies Auswirkungen auf das System hat
user151019 10.09.10
11
Das Problem ist nicht, dass es sich um einen "System" -Ordner handelt. Es ist ein "systemweiter" Ordner. Auch wenn dort nichts ist, /usr/local/binist der Standardwert $PATHimmer noch vorhanden, und alles, was Sie dort ablegen, kann auch von anderen Benutzern verwendet werden und sollte als vertrauenswürdig eingestuft werden . Wenn das gesamte /usr/local/Verzeichnis über dieselben Berechtigungen verfügt, die /usr/local/share/manderzeit für das Setup von OP gelten, kann jeder mit einem entsprechenden Skript eine beliebige Binärdatei ändern rm -rf ~.
Zneak
1
zu riskant: es ist wahrscheinlich, dass ich MySQL früher oder später installieren werde
Agos
2
@Agos: Sie können MySQL immer mit HomeBrew installieren. In diesem Fall haben Sie keine Probleme :)
Carmine Paolino
1
@ Agos Überhaupt nicht riskant. Dies gilt nur, wenn Sie MySQL vor Homebrew installiert haben. Wenn Sie es später tun, sollten die Berechtigungen auf /usr/localin Ordnung sein. (Aber Sie verwenden wahrscheinlich trotzdem Postgres. :))
Marnen Laibow-Koser
6

Wie in Homebrew 1.0.0:

Homebrew muss nicht länger im Besitz von / usr / local sein. Wenn Sie möchten, können Sie / usr / local mit: sudo chown root: wheel / usr / local auf seinen Standardbesitz zurücksetzen

Yuhao Zhang
quelle
1
Ich aktualisiere derzeit Brew mit brew update, für das immer noch der Besitz von erforderlich ist /usr/local. Ich werde danach versuchen, die Berechtigungen wiederherzustellen.
Joshua Pinter
Das sind wirklich tolle Infos! Ich habe die Dauerwellen gemäß Homebrew (<1.0) eingestellt und nach der Aktualisierung diese Anweisungen zum Zurücksetzen gegeben.
Mortona42
0

Ich denke, es ist in Ordnung, dass Benutzer Schreibberechtigungen für haben /usr/local- das bedeutet schließlich, dass Sie nicht sudofür jedes Build-Skript verwenden. Ich mag es nicht , die Idee von einem normalen Benutzer besitz /usr/local . Ich würde es vorziehen, root (oder ähnliches) zu besitzen /usr/local, aber ändere die Berechtigungen, damit Benutzer (oder zumindest einige privilegierte Gruppen) darauf schreiben können. Das scheint der begrifflich richtige Ansatz zu sein.

Marnen Laibow-Koser
quelle
7
Das Problem hierbei ist, dass /usr/local/binfür die meisten Benutzer $ PATH möglicherweise ganz oben steht. Wenn Sie das Verzeichnis für die ganze Welt beschreibbar machen, entstehen auf diese Weise viele Sicherheitslücken.
Nohillside
@patrix Also ändere die Wege. :) Wenn Sie Skripte haben, die aufgrund mehrdeutiger Befehlspfade Sicherheitslücken aufweisen, würde ich die Skripte beschuldigen, nicht Ihre Berechtigungen - Befehle, die in Skripten aufgerufen werden, sollten in der Regel aus genau diesem Grund vollständig qualifiziert sein. Wie auch immer, es gibt keine bessere Lösung: Entweder geben Sie Ihrem Administratorkonto eine unsichere umask, oder Sie führen alle Build-Skripte mit aus sudo, oder Sie erteilen einigen Benutzern Schreibrechte /usr/local. Ich nehme den dritten als am wenigsten riskant an ... es sei denn, Sie kennen einen besseren Weg.
Marnen Laibow-Koser
Hmm. Wenn Sie noch etwas darüber nachdenken, ist es vielleicht besser, Homebrew das zu lassen, was RVM standardmäßig tut: Installieren Sie alles in ~/brewoder in einem solchen. Das Problem ist jedoch, dass sich im Gegensatz zu Ruby, das ziemlich eigenständig ist, viele * nix-Dienstprogramme in /usr/local...
Marnen Laibow-Koser
3
Ich habe versäumt zu erwähnen, dass meine /usr/localnicht von der Welt beschreibbar sind: Ich habe eher eine vertrauenswürdige Gruppe homebrew(nicht nur Administrator), die über Schreibberechtigungen verfügt (erweiterte Berechtigungen wie 0: group:homebrew allow add_file,delete,add_subdirectory,delete_child,file_inherit,directory_inheritTotal Rock). Dies ist der beste Kompromiss, den ich finden konnte: keine sudoSkripte zum Erstellen, aber eine gewisse Kontrolle darüber /usr/local.
Marnen Laibow-Koser
@ MarnenLaibow-Koser Ich würde gerne eine ausführlichere Erläuterung dieses Ansatzes sehen (Erstellen einer vertrauenswürdigen Benutzergruppe mit Schreibrechten für /usr/local). Beim Durchsuchen von SO-Sites und anderen Sites werden häufig Argumente angezeigt, die sich darauf beziehen, Homebrew in den privaten Ordner des Benutzers zu verschieben /usr/local, den Besitzer zu ändern und / oder die Gruppe der Benutzer zu wechseln /usr/local, und so weiter. Es ist schwierig festzustellen, ob es welche gibt universell akzeptable Lösung. Haben Sie einen Blogbeitrag oder einen Artikel dazu oder könnten Sie irgendwo eine tiefere Erklärung geben?
Gabriel L.