Autorizzazioni per l'homebrew e più utenti che devono effettuare l'aggiornamento


79

Sto usando Homebrew per gestire le installazioni di pacchetti su Lion (Lion Server in realtà, ma questo non dovrebbe importare) .

Homebrew è stato installato sotto un utente. Ora un utente diverso vorrebbe aggiungere un pacchetto e Homebrew non è contento:

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

Questo è considerato cattivo? Ho pensato che uno dei vantaggi dell'utilizzo /usr/local/per le tue installazioni fosse che non ti serviva sudo. Ma chiaramente lo facciamo.

Tutti gli utenti che dovrebbero modificare Homebrew sono membri del gruppo admin . Quindi, potrei chmod -R g+w /usr/local/solo temere che questo possa ostacolare qualcosa o creare problemi di sicurezza?!?

Consigli?

$ 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

Risposte:


100

Questo è considerato cattivo? Ho pensato che uno dei vantaggi di usare / usr / local / per le tue installazioni fosse che non hai bisogno di sudo. Ma chiaramente lo facciamo.

Homebrew, per impostazione predefinita, si imposta per l'accesso a utente singolo a /usr/local. Quindi è necessario aprire le autorizzazioni sull'albero delle directory affinché sia ​​amministrato da più di una persona.

Le persone non hanno bisogno di eseguire sudo qui per amministrare l'homebrew. Hai solo bisogno di cambiare alcune autorizzazioni. Dal momento che hai già:

Tutti gli utenti che dovrebbero modificare Homebrew sono membri del gruppo admin.

Devi fare altre due cose:

  1. Assicurarsi che tutto ciò che /usr/localappartiene al gruppo appartenga al gruppo admin; e
  2. Assicurati che chiunque del gruppo adminpossa scrivere su qualsiasi cosa sotto /usr/local.

In questo caso le modifiche da apportare sono:

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

E qualsiasi utente del admingruppo dovrebbe essere in grado di gestire l'installazione homebrew sulla macchina. Se è necessario aggiungere un utente al gruppo admin, ciò può essere realizzato in questo modo:

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

(quell'utente dovrà accedere nuovamente per avere i privilegi concessi).

Per sanità mentale sulla macchina, potresti prendere in considerazione l'idea di creare il tuo fork di Homebrew e far sì che il tuo repository git homebrew locale punti al fork locale. Ciò consente di personalizzare Homebrew per l'ambiente e controllare le versioni dei pacchetti che le persone sono in grado di installare con il brewcomando. Con più persone che eseguono installazioni, potresti imbatterti in problemi di versione o di dipendenza.


1
Ho lo stesso problema e ho cambiato la proprietà del gruppo e le autorizzazioni del gruppo come suggerito. brew doctorsi lamenta ancora che, ad esempio, /usr/local/includenon sia scrivibile, anche se posso verificare manualmente che posso scrivere su un file qui (ad esempio, usando echo "hello" > /usr/local/include/testfile). Sono membro del gruppo admin. Qualche idea per il debug?
mgd,

2
Questa soluzione ha funzionato per me, ma non riguarda la cache locale di Homebrew. Suggerisco anche di correre:chmod -R g+w /Library/Caches/Homebrew
Drew Dara-Abrams,


2
Sembra che Homebrew abbia ora trasferito la cache nella directory dell'utente corrente. Ho appena visto: ==> Migrazione / Libreria / Caches / Homebrew su /Users/bluechain.admin/Library/Caches/Homebrew ... quando si esegue un aggiornamento della birra. Se lo sto interpretando correttamente, ciò significa che non dobbiamo più preoccuparci di avere una directory cache scrivibile a livello globale per Homebrew.
Endareth,

Per gli utenti di High Sierra con questo problema ora è necessario utilizzare questo: sudo chown -R $(whoami) $(brew --prefix)/*anziché i comandi sopra. Capito da qui
Jeff Kranenburg il

7

È possibile abilitare le autorizzazioni homebrew per più di un utente tramite il gruppo admin o tramite qualsiasi altro gruppo utenti. Ecco una ricetta leggermente espansa per configurare questo:

Il gruppo deve amministrare la directory di installazione homebrew locale. Quindi assegna / usr / local al gruppo admin (o al tuo gruppo preferito) e abilita le autorizzazioni di scrittura del gruppo:

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

Il gruppo necessita anche delle autorizzazioni per la cache locale di homebrew di formule e file sorgente su / Library / Caches / Homebrew :

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

Se si verificano ulteriori problemi di autorizzazione simili durante l'utilizzo dell'homebrew da più account, prendere nota del percorso offensivo e considerare di provare lo stesso approccio.

Leif Hanack ha bloggato una soluzione simile , dove si crea e configura un apposito gruppo di utenti birra per lo scopo.

- Aggiornamento 2015-08-20

Recentemente ho usato di nuovo questa risposta per impostare un account ospite con accesso homebrew. Per usare Cask dal secondo account amministratore ho dovuto anche eseguire i seguenti comandi:

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask

4

Stavo solo per commentare la risposta accettata (ma non ho ancora la reputazione per quello.)

Come utente di Caskroom.io , consiglierei anche di aggiungere:

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

poiché cask, un'estensione estremamente utile di homebrew, inserisce tutti i suoi file /opt/homebrew-cask


1
Con /optCredo che vuoi dire /usr/local? Come /optnon esiste nelle recenti installazioni di OS X, anche dopo un'installazione homebrew.
forquare,

Nel giugno del 2016, Homebrew-Cask (un'estensione brew) ha spostato la posizione predefinita per la sua cartella Caskroom in /usr/local(o più accuratamente $(brew --prefix)) da /opt/homebrew-caskcosì questa risposta è ora discutibile, ma era valida quando è stata scritta. Vedi Sposta posizione di caskroom predefinita # 21603
zen

1

Devi dare il permesso al percorso. eseguilo nella riga di comando e andrà tutto bene. Ha funzionato per me:

sudo chown -R $ USER / usr / local


0

Vorrei votare per impostare il permesso di gruppo - e per me sembra che sia proprio quello per cui è lì e non dovrebbe creare un problema di sicurezza.

  • Non usare sudo.

tl; dr Sudo è pericoloso e hai installato TextMate.app senza sudo comunque.

Homebrew è progettato per funzionare senza usare sudo. Puoi decidere di usarlo ma ti consigliamo vivamente di non farlo. Se hai usato sudo ed hai incontrato un bug, è probabile che sia la causa. Si prega di non presentare una segnalazione di bug a meno che non sia possibile riprodurlo dopo aver reinstallato Homebrew da zero senza usare sudo.


Quindi, il tuo consiglio sarebbe sudo chmod -R g+w /usr/local/?
Meltemi,

Sì, ma potresti voler chiedere un secondo parere usando uno di questi: IRC (irc: //irc.freenode.net/#machomebrew); Mailing List (homebrew@librelist.com); Twitter ( twitter.com/machomebrew )
iolsmit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.