Inverser certains dégâts / usr / local

-2

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

Est-ce que quelqu'un sait comment je peux annuler ces modifications, tout en permettant à Homebrew, Node, Ruby, etc. de s'installer sans nécessiter de sudo?

Matty F
la source
1
Pourquoi était-ce une telle erreur?
Jason Salaz
1
Veuillez décrire les étapes que vous avez effectuées et les problèmes que vous rencontrez.
Gerry
@Gerry: La page référencée mentionne l'exécution sudo chown -R $USER /usr/local. Cela est critiqué dans un commentaire sur la même page. Comment annuler cela dépend de la manière dont elle /usr/locala été utilisée précédemment.
Harald Hanche-Olsen

Réponses:

10

En ce qui concerne la première partie de votre question, vous ne pouvez pas Zannuler les modifications, il n'y a pas de commande ou d'annuler, mais vous pouvez définir les autorisations de manière à deviner ce qu'elles étaient auparavant. Plus à ce sujet dans la première puce ci-dessous.

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

  1. Définissez le propriétaire pour vous-même . C'est ce que tu as fait avec sudo chown -R $USER /usr/local. Mon arrière-plan d’administrateur système Linux me dit que ce n’est pas la méthode standard, car elle se /usr/localtrouve en dehors de votre répertoire personnel et ne devrait pas vous appartenir. Mais je ne dirais pas que vous avez endommagé quoi que ce soit de façon irréparable.
  2. Utilisez sudo , mais vous ne voulez pas être obligé de l'utiliser.

    (De mon point de vue, la meilleure solution . Pourquoi? sudoVous 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 . Un bon moyen de séparer les autorisations d'origine de vos autorisations ajoutées. (Voir http://en.wikipedia.org/wiki/Access_control_list pour plus d'informations sur les ACL.)
  4. Configurez des groupes . Ajoutez-vous au groupe qui possédait /usr/local et modifiez les autorisations en g+rwx/ g+rw. Lourd. Ne fais pas ça.

Vous avez fait 1. et voulez annuler les modifications, 2. vous ne voulez pas, et je ne recommande pas 4., alors je vais expliquer 3 .:

  • Commençons par "annuler" les modifications que vous avez apportées. /usr/localappartenait probablement à l'utilisateur root, au groupe wheel. Vous pouvez le définir comme suit:

    $ cd /usr/local
    $ sudo chown -R root:wheel .
  • Définissez les ACL de sorte que vous ayez toutes les autorisations:

    $ 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 la man chmodsection ACL MANIPULATION OPTIONSpour plus de détails.)

  • Vous verrez que tous les fichiers ont une +annexe, ls -eaffiche les ACL:

    $ 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. Comme meilleure pratique, je vous recommande d'exécuter les commandes ci-dessus dans un répertoire de test . Vous pouvez le faire mkdir ~/tmpacl. Ensuite cd ~/tmpacl, sudo rsync -av /usr/local/ .copiez le contenu de /usr/localdans ~/tmpacl. Ensuite, passez cd /usr/localchaque ci-dessus pour appliquer les commandes ~/tmpacl. Lorsque vous avez terminé, rm -rf ~/tmpacl).

Maintenant, vous pouvez installer des logiciels (ou faire n'importe quoi, d'ailleurs) /usr/localsans sudo.

Notez que tout fichier que vous créez dans vous /usr/localappartiendra (comme myACLtestfiledans la liste ci-dessus), de sorte que vous verrez que certains fichiers sont la propriété de rootet d’autres par vous.

(Si vous changez d'avis et souhaitez revenir dans le monde merveilleux de sudo, supprimez les ACL comme suit:

sudo chmod -R -N /usr/local

et définissez les autorisations sur root:wheel:

sudo chown -R root:wheel /usr/local

)


** MODIFIER **

Si la routine d'installation du logiciel que vous souhaitez installer utilise/usr/bin/install cette solution, cela peut s'avérer une solution beaucoup plus simple. Ajouter:

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

à ~/.bashrc. Ensuite, faites . ~/.bashrcen sorte que les modifications prennent effet.

Puis éditez /etc/sudoersavec la commande sudo visudo, ajoutez:

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

et enregistrez et fermez le fichier avec :x.

(Si vous utilisez une autre installcommande ailleurs dans le système de fichiers, telle que l'installation de GNU, 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.

** /MODIFIER **

Jaume
la source
Quelle bonne réponse, j'aimerais pouvoir vous voter deux fois!
JamiePatt
@Matty F: J'ai ajouté un moyen beaucoup plus simple de réaliser une installation "moins rapide" (condition: /usr/bin/installdoit être utilisé), veuillez le vérifier au bas de ma réponse.
Jaume
1

Démarrez votre système de récupération HD et voyez si vous voulez utiliser un terminal pour réparer le Mac HD / usr / local manuellement ou si vous préférez simplement restaurer à partir d’une sauvegarde pratique.

Comme les Mac n'ont besoin d'aucun élément dans / usr / local, je ne vois pas en quoi un système ou un élément critique est affecté, alors je ne comprends peut-être même pas votre situation.

bmike
la source