Comment Homebrew n'a-t-il plus besoin d'être propriétaire de / usr / local?

28

Aujourd'hui, j'ai couru brew updateet après avoir migré le référentiel, il a indiqué qu'il n'avait plus besoin de posséder /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

Ce changement semble un peu douteux. Comment Brew utilise-t-il ce nouveau comportement, en contournant apparemment les contrôles de sécurité?

Jason R. Coombs
la source
Quels contrôles de sécurité contourne-t-il? Le /usr/localn'est pas inclus dans SIP. Voir À propos de la protection de l'intégrité du système sur votre Mac sous «Chemins et applications que les applications et les installateurs tiers peuvent écrire pour inclure:» /usr/localest répertorié.
user3439894
3
Cela dit, n'étant pas un utilisateur de Homebrew, car je compile directement à partir du code source les utilitaires que je veux qui ne sont pas inclus sous OS X, néanmoins j'imaginerais que Homebrew a été réécrit comme nécessaire / nécessaire pour agir normalement comme d'autres applications l'ont fait fait dans le passé. IMO Homebrew aurait dû être écrit dès le départ pour ne pas avoir à usurper la propriété root pour commencer!
user3439894
Je veux dire, si /usr/localet ses enfants appartiennent à root:adminou root:wheelne sont pas inscriptibles en groupe, alors je n'ai pas accès à l'écriture dans ces répertoires (et ni homebrew, sans doute), mais si c'est le cas, comment Homebrew peut-il gérer l'installation et supprimer des applications de ces emplacements?
Jason R. Coombs
3
Je remarque simplement que le message ne fait référence /usr/localqu'à ses descendants. Et en regardant ce que fait une toute nouvelle installation homebrew, elle définit tous les sous-répertoires comme appartenant à $ USER et au groupe accessibles en écriture.
Jason R. Coombs

Réponses:

19

Selon ce script ruby: update-report.rb , ils viennent de déplacer des éléments vers / usr / local / Homebrew, qui vous appartient toujours.

albb
la source
2
/ Usr / local ne doit-il pas être inscriptible par $ USER pour que la création de / usr / local / Homebrew ait lieu? Qu'en est-il des autres répertoires, comme / usr / local / Cellar ou / usr / local / opt? L'homebrew n'a-t-il pas encore besoin d'un accès (non sudo) pour écrire dans ces répertoires? Comment peut-il faire cela si les répertoires appartiennent à root et ne sont pas inscriptibles en groupe?
Jason R. Coombs
1
Lors de la première installation, ils utilisent toujours sudo pour créer un référentiel homebrew, voir installer . Le script dans ma réponse pour la mise à jour, à ce stade, vous possédez toujours / usr / local que vous avez affiché dans l'ancienne version.
albb
6

Nous créons maintenant tous les répertoires racine /usr/localdont vous avez besoin et vérifions leur propriété plutôt que de l'exiger sur /usr/locallui-même.

Mike McQuaid
la source