Uprawnienia Homebrew i wielu użytkowników potrzebujących aktualizacji

79

Korzystam z Homebrew do zarządzania instalacjami pakietów na Lionie (właściwie Lion Server, ale to nie powinno mieć znaczenia) .

Homebrew został zainstalowany pod jednym użytkownikiem. Teraz inny użytkownik chciałby dodać pakiet, a Homebrew nie jest zadowolony:

$ brew update
fatal: Unable to create '/usr/local/.git/index.lock': Permission denied
Error: Failure while executing: git checkout -q master

Czy to jest uważane za złe? Pomyślałem, że jedną z zalet korzystania /usr/local/z instalacji jest to, że nie potrzebujesz sudo. Ale oczywiście to robimy.

Wszyscy użytkownicy, którzy musieliby zmodyfikować Homebrew, są członkami grupy administracyjnej . Mógłbym się chmod -R g+w /usr/local/jednak obawiać, że to coś rozwali lub stworzy problemy bezpieczeństwa?!?

Rada?

$ ls -al /usr/local/.git/
total 432
drwxr-xr-x  14 ladmin  admin     476 Feb 24 11:48 .
drwxrwxr-x  14 root    admin     476 Feb  9 15:27 ..
-rw-r--r--   1 ladmin  admin      94 Feb 24 11:48 FETCH_HEAD
-rw-r--r--   1 ladmin  admin      23 Feb 24 11:48 HEAD
-rw-r--r--   1 ladmin  admin      41 Feb  9 15:28 ORIG_HEAD
drwxr-xr-x   2 ladmin  admin      68 Feb  9 15:27 branches
-rw-r--r--   1 ladmin  admin     218 Feb  9 15:27 config
-rw-r--r--   1 ladmin  admin      73 Feb  9 15:27 description
drwxr-xr-x  12 ladmin  admin     408 Feb  9 15:27 hooks
-rw-r--r--   1 ladmin  admin  200272 Feb 24 11:48 index
drwxr-xr-x   3 ladmin  admin     102 Feb  9 15:27 info
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 logs
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 objects
drwxr-xr-x   5 ladmin  admin     170 Feb  9 15:27 refs
Meltemi
źródło

Odpowiedzi:

100

Czy to jest uważane za złe? Pomyślałem, że jedną z zalet używania / usr / local / do instalacji jest to, że nie potrzebujesz sudo. Ale oczywiście to robimy.

Homebrew domyślnie ustawia się na dostęp dla jednego użytkownika /usr/local. Musisz więc otworzyć uprawnienia do drzewa katalogów, aby mogło nim zarządzać więcej niż jedna osoba.

Ludzie nie muszą tutaj biegać sudo, aby zarządzać homebrew. Musisz tylko zmienić niektóre uprawnienia. Ponieważ masz już:

Wszyscy użytkownicy, którzy musieliby zmodyfikować Homebrew, są członkami grupy administracyjnej.

Musisz zrobić jeszcze dwie rzeczy:

  1. Upewnij się, że wszystko poniżej /usr/localnależy do grupy admin; i
  2. Upewnij się, że każdy z grupy adminmoże pisać do wszystkiego pod /usr/local.

W takim przypadku zmiany, które należy wprowadzić, to:

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

I każdy użytkownik z admingrupy powinien mieć możliwość zarządzania instalacją homebrew na komputerze. Jeśli chcesz dodać użytkownika do grupy administracyjnej, możesz to zrobić w następujący sposób:

 dseditgroup -o edit -a <username> -t user admin

(ten użytkownik będzie musiał się ponownie zalogować, aby uzyskać uprawnienia).

Ze względów bezpieczeństwa na komputerze możesz rozważyć utworzenie własnego rozwidlenia Homebrew i poprowadzić lokalne repozytorium git do lokalnego rozwidlenia. Dzięki temu możesz dostosować Homebrew do swojego środowiska i kontrolować wersje pakietów, które ludzie mogą zainstalować za pomocą brewpolecenia. Gdy wiele osób robi instalacje, możesz napotkać problemy z wersjami lub zależnościami.

Ian C.
źródło
1
Mam ten sam problem i zgodnie z sugestią zmieniłem własność grupy i uprawnienia grupy. brew doctorwciąż narzeka, że ​​np. /usr/local/includenie można zapisać, mimo że ręcznie mogę zweryfikować, czy mogę tutaj zapisać plik (np. używając echo "hello" > /usr/local/include/testfile). Jestem członkiem grupy administracyjnej. Jakieś pomysły na debugowanie?
mgd
2
To rozwiązanie działało dla mnie, ale nie dotyczy lokalnej pamięci podręcznej Homebrew. Sugeruję także bieganie:chmod -R g+w /Library/Caches/Homebrew
Drew Dara-Abrams
Znalazłem na nim post na blogu blog.strug.de/2012/06/my-homebrew-multi-user-setup i dostosowałem skrypt z tego raw.githubusercontent.com/steshaw/shelly/master/bin/…
Steven Shaw
2
Wygląda na to, że Homebrew przeniósł teraz pamięć podręczną do katalogu bieżącego użytkownika. Właśnie zobaczyłem: ==> Migracja / Library / Caches / Homebrew do /Users/bluechain.admin/Library/Caches/Homebrew ... podczas aktualizacji aktualizacji. Jeśli interpretuję to poprawnie, oznacza to, że nie musimy się już martwić o posiadanie globalnie zapisywalnego katalogu pamięci podręcznej dla Homebrew.
Endareth,
Dla użytkowników High Sierra z tym problemem musisz teraz użyć tego: sudo chown -R $(whoami) $(brew --prefix)/*zamiast powyższych poleceń. Mam to stąd
Jeff Kranenburg
7

Możesz włączyć uprawnienia homebrew dla więcej niż jednego użytkownika za pośrednictwem grupy administracyjnej lub dowolnej innej grupy użytkowników. Oto nieco rozszerzony przepis, aby to skonfigurować:

Grupa musi administrować lokalnym katalogiem instalacyjnym homebrew. Więc przypisz / usr / local do grupy administracyjnej (lub preferowanej grupy) i włącz uprawnienia do zapisu grupowego:

chgrp -R admin /usr/local
chmod -R g+w /usr/local

Grupa potrzebuje również uprawnień do lokalnej pamięci podręcznej formuł i plików źródłowych homebrew w / Library / Caches / Homebrew :

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

Jeśli napotkasz kolejne podobne problemy z uprawnieniami podczas korzystania z homebrew z wielu kont, zwróć uwagę na ścieżkę obrażeń i rozważ skorzystanie z tego samego podejścia.

Leif Hanack napisał na blogu podobne rozwiązanie , w którym tworzy i konfiguruje dedykowany napar dla grupy użytkowników .

- Aktualizacja 2015-08-20

Niedawno użyłem tej odpowiedzi ponownie, aby skonfigurować konto gościa z dostępem homebrew. Aby użyć Cask z drugiego konta administratora musiałem również uruchomić następujące polecenia:

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask
VizJS
źródło
4

Chciałem skomentować zaakceptowaną odpowiedź (ale nie mam jeszcze na to reputacji).

Jako użytkownik Caskroom.io polecam również dodanie:

sudo chown -R admin /opt/homebrew-cask
sudo chmod -R g+w /opt/homebrew-cask
sudo chmod -R g+w  /Library/Caches/Homebrew/

ponieważ cask, niezwykle przydatne rozszerzenie homebrew, umieszcza wszystkie swoje pliki /opt/homebrew-cask

zen
źródło
1
Przez /optChyba masz na myśli /usr/local? Ponieważ /optnie istnieje w ostatnich instalacjach OS X, nawet po instalacji homebrew.
forquare
W czerwcu 2016 roku Homebrew-Cask (rozszerzenie parzenia) przeniósł domyślną lokalizację swojego folderu Caskroom do /usr/local(lub dokładniej $(brew --prefix)) z, /opt/homebrew-caskwięc ta odpowiedź jest teraz dyskusyjna, ale była ważna, kiedy została napisana. Zobacz Przenieś domyślną lokalizację w beczce # 21603
zen
1

Musisz wyrazić zgodę na ścieżkę. uruchom to w wierszu poleceń, a będziesz w porządku. To działało dla mnie:

sudo chown -R $ USER / usr / local

Asso
źródło
0

Głosowałbym za ustawieniem uprawnienia grupy - i wydaje mi się, że właśnie po to jest i nie powinno stwarzać problemu z bezpieczeństwem.

  • Nie używaj sudo.

tl; dr Sudo jest niebezpieczny, a mimo to zainstalowałeś TextMate.app bez sudo.

Homebrew jest zaprojektowany do pracy bez użycia sudo. Możesz zdecydować się na jego użycie, ale zdecydowanie tego nie zalecamy. Jeśli użyłeś sudo i napotkałeś błąd, prawdopodobnie jest to przyczyną. Nie przesyłaj raportu o błędzie, chyba że możesz go odtworzyć po ponownej instalacji Homebrew od nowa bez użycia sudo.

iolsmit
źródło
Więc twoja rada byłaby sudo chmod -R g+w /usr/local/?
Meltemi
Tak, ale możesz poprosić o drugą opinię, korzystając z jednego z poniższych: IRC (irc: //irc.freenode.net/#machomebrew); Lista mailingowa ([email protected]); Twitter ( twitter.com/machomebrew )
iolsmit