2 votes

Inverser certains dommages /usr/local

Je suivais ce tutoriel - http://howtonode.org/introduction-to-npm - et mis /usr/local à $USER, ce qui, je le réalise maintenant, était une énorme erreur.

Quelqu'un sait-il comment je peux revenir sur ces changements, tout en permettant à Homebrew, Node, Ruby, etc. de s'installer sans avoir besoin de sudo ?

12voto

jaume Points 13186

Pour ce qui est de la première partie de votre question, vous ne pouvez pas annuler les changements, il n'y a pas de Z ou la commande undo, mais vous pouvez définir les permissions à une bonne estimation de ce qu'elles étaient avant. Plus d'informations à ce sujet dans le premier point ci-dessous.

Pour installer un logiciel dans /usr/local vous devez avoir autorisations d'écriture dans le répertoire (et ses sous-répertoires). Il existe plusieurs façons d'y parvenir :

  1. Fixez le propriétaire à vous-même . C'est ce que vous avez fait avec sudo chown -R $USER /usr/local . Mon expérience d'administrateur système Linux me dit que ce n'est pas la méthode standard, car /usr/local est en dehors de votre répertoire personnel et ne devrait pas vous appartenir. Mais je ne dirais pas que vous avez endommagé quelque chose de façon irréparable.

  2. Utilisez sudo mais vous ne voulez pas être obligé de l'utiliser.

    (De mon point de vue, le la meilleure solution . Pourquoi ? sudo vous protège de vous-même. Vous réfléchissez à deux fois si vous devez taper sudo (sauf si vous suivez un tutoriel de http://howtonode.org :-) ).)

  3. Définir les ACL . C'est une bonne façon de séparer les autorisations d'origine de celles que vous avez ajoutées. (Voir http://en.wikipedia.org/wiki/Access_control_list pour plus d'informations sur les ACL).

  4. Configurer les groupes . Ajoutez vous au groupe qui possédait /usr/local et changez les permissions pour g+rwx / g+rw . Encombrant. Ne faites pas cela.

Vous avez fait 1. et vous voulez revenir sur les changements, 2. vous ne voulez pas, et je ne recommande pas 4., donc je vais expliquer 3 :

  • Commençons par "rétablir" les changements que vous avez effectués. /usr/local a probablement appartenu à l'utilisateur root groupe wheel . Vous pouvez le régler comme suit :

    $ cd /usr/local
    $ sudo chown -R root:wheel .
  • Définissez les ACL de façon à ce que vous ayez toutes les permissions :

    $ cd /usr/local
    $ sudo chmod -R +a "$USER allow delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,list,search,add_file,add_subdirectory,delete_child,file_inherit,directory_inherit" .

    (voir man chmod , section ACL MANIPULATION OPTIONS pour plus de détails).

  • Vous verrez que tous les fichiers ont un + annexé, ls -e montre les ACLs :

    $ cd /usr/local
    $ ls -la .
    total 0
    drwxr-xr-x+ 11 root  wheel   374 Oct 10 21:57 .
    drwxr-xr-x+ 12 root  wheel   442 Sep 22 13:44 ..
    drwxr-xr-x+  3 root  wheel  3774 Oct 10 21:57 bin
    -rw-r--r--+  1 jaume wheel    0  Oct 25 14:53 myACLtestfile
    drwxr-xr-x+  3 root  wheel   136 Jul 26 18:55 include
    drwxr-xr-x+  4 root  wheel   442 Jul 26 18:55 lib
    (...)
    $ ls -led bin
    drwxr-xr-x+ 3 root  wheel  3774 Oct 10 21:57 bin
     0: user:jaume allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit
    $ ls -le myACLtestfile 
    -rw-r--r--+ 1 jaume  wheel  0 Oct 25 14:53 myACLtestfile
     0: user:jaume inherited allow read,write,execute,delete,append,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown

(J'ai testé les commandes ci-dessus, mais J'ai peut-être fait une faute de frappe. Je vous recommande d'exécuter les commandes ci-dessus dans un répertoire de test. . Vous pourriez faire mkdir ~/tmpacl . Ensuite, cd ~/tmpacl y sudo rsync -av /usr/local/ . pour copier le contenu de /usr/local a ~/tmpacl . Puis sauter cd /usr/local dans chaque section ci-dessus pour appliquer les commandes à ~/tmpacl . Lorsque vous avez terminé, rm -rf ~/tmpacl .)

Maintenant, vous pouvez installer des logiciels (ou faire quoi que ce soit, d'ailleurs) en /usr/local sans sudo .

Notez que tout fichier que vous créez dans /usr/local vous appartiendra (comme myACLtestfile dans le listing ci-dessus), vous verrez donc que certains fichiers sont la propriété de root et d'autres par vous.

(Si vous changez d'avis et que vous voulez retourner dans le monde merveilleux des sudo , supprimez les ACLs comme suit :

sudo chmod -R -N /usr/local

et définir les permissions pour root:wheel :

sudo chown -R root:wheel /usr/local

)


** EDIT **

Si la routine d'installation du logiciel que vous voulez installer utilise /usr/bin/install il s'agit peut-être d'une solution beaucoup plus simple. Ajoutez :

alias install="sudo /usr/bin/install"

à ~/.bashrc . Ensuite, faites . ~/.bashrc pour que les changements prennent effet.

Puis modifier /etc/sudoers avec commande sudo visudo , ajoutez :

<your username> ALL=(ALL) NOPASSWD:/usr/bin/install

puis enregistrez et fermez le fichier avec :x .

(Si vous utilisez d'autres install ailleurs dans le système de fichiers, comme GNU install, modifiez le chemin ci-dessus de manière appropriée).

Pour que cela fonctionne, le logiciel doit utiliser /usr/bin/install . C'est généralement le cas avec make install .

** /EDIT **

0 votes

Quelle belle réponse, j'aimerais pouvoir voter deux fois pour vous !

0 votes

@Matty F : J'ai ajouté une méthode beaucoup plus simple pour réaliser une installation "sans sudo" (condition : /usr/bin/install doit être utilisé), veuillez le vérifier au bas de ma réponse.

2voto

Oskar Points 1242

Démarrez sur votre disque dur de récupération et voyez si vous voulez utiliser le terminal pour réparer le Mac HD /usr/local à la main ou si vous préférez simplement restaurer à partir d'une sauvegarde pratique.

Puisque les Macs n'ont pas besoin que quoi que ce soit existe dans /usr/local, je ne vois pas comment sudo ou quoi que ce soit d'essentiel au système est même affecté, donc peut-être que je ne comprends pas votre situation.

Supprimer tout ce qui se trouve dans /usr/local et recommencer est souvent un bon plan pour que le contenu de votre ligne de commande locale soit correctement configuré si vous ne pouvez pas le nettoyer/réparer au coup par coup.

0voto

coolaj86 Points 282

node sans sudo

Voici la façon la plus simple d'installer Node.js

  • sans sudo ou root
  • sans modifier les autorisations du système
  • sans gestionnaire de paquets
  • à partir des constructions officielles de Node.js, via l'API de version

https://webinstall.dev/node

Exemple :

curl -s https://webinstall.dev/node@stable | bash

Autres

Il existe des moyens d'installer ruby y python sans root mais après avoir lutté contre les deux, je n'ai pas réussi à trouver une solution générique qui fonctionnerait sans avoir beaucoup de chaînes d'outils.

brew ... me rend triste à cet égard. Je ne vois pas pourquoi ils ont choisi de jouer avec les permissions du système... à part le fait qu'ils ne sont peut-être pas assez intelligents pour trouver une manière agréable d'obtenir des choses comme ruby y python pour jouer gentiment non plus.

J'aimerais voir une meilleure solution.

Si je trouve la solution, je la mettrai sur PR. webi .

Correction des permissions

Je n'ai rien à ajouter en dehors de ce que les autres ont dit, mais je vais inclure ceci pour être complet.

Pour passer aux autorisations de niveau utilisateur :

sudo chown -R "$(whoami)":admin /usr/local
# Or possibly 'staff' instead:
# sudo chown -R "$(whoami)":staff /usr/local

Ou pour revenir à ce qu'il était avant :

sudo chown -R root:wheel /usr/local

0 votes

Veuillez relire la question. Il ne s'agit pas d'installer node, mais de résoudre les problèmes de propriété sur /usr/local.

1 votes

@nohillside Je pense que vous n'avez peut-être vu que le titre et pas la question dans le post de l'utilisateur "Est-ce que quelqu'un sait comment je peux revenir sur ces changements, mais toujours permettre à Homebrew, Node, Ruby, etc de s'installer sans avoir besoin de sudo ?".

0 votes

La partie principale de votre réponse concerne la promotion de votre propre solution qui n'installe node que pour l'utilisateur actuel (et non pas sur l'ensemble du système comme le fait Homebrew). Il peut y avoir des cas d'utilisation où cela est suffisant, mais ce n'est pas une solution générale.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X