Comment exécuter Homebrew en tant que root?

11

Il y a des années, vous pouviez vous en passer en brewtant que root simplement en le faisant chown brewà root, mais ils ont supprimé cette fonctionnalité. Donc, dans Homebrew 1.1.6, j'avais l'habitude de modifier /usr/local/Homebrew/Library/Homebrew/brew.shpour supprimer le contrôle racine (celui qui disait que c'était "extrêmement dangereux") afin que je puisse exécuter en brewtant que root.

La nouvelle version de Homebrew fonctionne toujours avec cela, mais continue de restaurer le brew.shfichier à chaque fois après avoir exécuté brew, même si je chmod 500le fais . Je pourrais écrire un script pour le changer puis l'exécuter brewautomatiquement, mais je ne sais pas si cela fonctionnera toujours et je ne veux pas prendre de risques. Quelqu'un a-t-il trouvé une méthode différente pour exécuter Homebrew en tant que root?

sudo
la source
3
Par curiosité, pourquoi voulez-vous exécuter en brewtant que root? En outre, n'est-ce sudopas suffisant pour vos besoins?
Allan
2
@Allan l' sudoexécute en tant que root, et cela me donne la même erreur "extrêmement dangereuse". Je veux exécuter en tant que root car sinon il a des problèmes pour installer certains packages, surtout si quelque chose n'a pas été installé via Homebrew (par exemple via pip). J'ai emprunté cette voie plusieurs fois. De plus, il ne fonctionne pas correctement pour plusieurs utilisateurs sans solutions de rechange étranges, sauf si j'installe tout en tant que root.
sudo
$ su -> $ brasser quoi que vous vouliez?
StrawHara
1
Construire un progiciel rootest risqué. Même en construisant un package sans gestionnaire de packages, vous construisez le package en tant qu'utilisateur sans privilèges (vous-même), puis installez le package comme rootavec sudo. Les gestionnaires de packages tels que Fink et MacPorts construisent tous les deux avec leurs propres utilisateurs sans privilèges, puis installent en tant que root. Homebrew ne dispose pas d'un tel mécanisme.
fd0
1
Hmm, je ne vois pas le problème de mon côté où le brew.shfichier est rétabli après l'avoir modifié puis exécuté une brewcommande. Je peux donc courir sudo brew whateveret brew whateveren tandem très bien. Ma brew --versionsortie est donc: pour Homebrew 1.2.1-98-g803f9cbf7b-dirty Homebrew/homebrew-core (git revision d3d6; last commit 2017-05-28) info, j'ai modifié mon brew.shfichier pour commenter toutes les lignes de la check-run-command-as-rootfonction et j'ai placé une seule returninstruction en haut de la fonction.
GDP2

Réponses:

2

Après avoir apporté votre modification au script, essayez de définir l'indicateur immuable sur brew.sh.

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

Je n'ai pas testé. En règle générale, je ne donne pas racine aux applications dont les développeurs me supplient de ne pas le faire.

Jason
la source
Je suis également d'accord avec Jason. Il y a une raison pour laquelle ils disent de ne pas lancer le brassage en tant que root. Principalement parce qu'ils sont les développeurs et je leur ferai confiance avec leur logiciel. De plus, contrairement à macports, qui la dernière fois que j'ai vérifié l'exige toujours, brew n'a pas besoin ou ne veut pas d'autorisations root, donc si vous bousillez quelque chose, il ne fonctionnera probablement pas tout votre système. Tout est contenu dans votre compte utilisateur et pas besoin de jouer avec sudo.
user9950573
1
Travail confirmé, merci. Il faut un certain temps pour tenter de mettre à jour la première fois, mais plus tard sudo brew installs s'exécutera normalement.
sudo
1
Il n'y a pas grand-chose à gâcher et à rendre un système inutilisable avec les packages que j'installerais sur un Mac. Quoi qu'il en soit, je peux restaurer mon système en 30 minutes. Le nettoyage de mon utilisateur est beaucoup plus difficile, et beaucoup de choses ne fonctionnent directement que si elles sont installées à l'échelle du système, comme je l'explique dans les commentaires ci-dessus.
sudo
1

Les utilisateurs typiques ne devraient pas faire cela, mais vous n'êtes pas typique, n'est-ce pas?

Deux problèmes:

  1. Vous ne pouvez pas arrêter root. Si vous insistez pour utiliser root, root peut remplacer brew.shquoi qu'il arrive .

  2. Vous ne pouvez pas vous arrêter brew, après tout, vous parlez de courir brew.

Nous allons donc travailler avec cela. Configurons un alias à copier brew.shpuis à exécuter brew.

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

(Fixez les chemins pour qu'ils correspondent à votre système).

Il ne vous reste plus qu'à:

sudo brew <arguments>

(Il deviendra root, copiera brew.sh, puis s'exécutera en brewtant que root avec des arguments, puis il brewsera écrasé brew.shet vous serez prêt à tout recommencer)

Remarque: Vous pouvez également insérer sudol'alias, mais cela se sent mieux car vous serez invité à saisir un mot de passe à chaque fois.

En règle générale, vous ne pouvez pas utiliser setuid( chmod u+s) pour rooter sur des scripts shell, pour des raisons de sécurité. Perl a un programme distinct suidperlqui pourrait être installé et pourrait augmenter les privilèges des utilisateurs, mais ces solutions sont un peu profondes pour une réponse rapide.

Mac capable
la source