Opération non autorisée sur root - El Capitan (rootless désactivé)

236

J'essaie de déplacer quelque chose vers / usr / bin sur OS X El Capitan. J'ai désactivé rootless en utilisant les commandes suivantes:, sudo nvram boot-args="rootless=0"; sudo rebootmais je reçois toujours la même erreur:

MacBook-Air:~ Mark$ sudo cp class-dump /usr/bin
Password:
cp: /usr/bin/class-dump: Operation not permitted
MacBook-Air:~ Mark$ sudo mv class-dump /usr/bin
mv: rename class-dump to /usr/bin/class-dump: Operation not permitted
Mark Bourke
la source
14
Pourquoi essayez-vous de mettre le vidage de classe dans / usr / bin? Les ajouts locaux appartiennent à / usr / local / bin, et rootless vous permet d'y mettre des choses ...
Gordon Davisson
1
Créez simplement un alias dans ~ / .bash_profile et ne frackez pas avec / usr / bin
Warren P
5
class-dump est directement utilisé pour la programmation (outil d'ingénierie inverse - directement pour la programmation), donc la raison de la fermeture ne semble pas valable. En outre, 28 étoiles, près de 40 votes positifs et 90 réponses positives signifient que la question est utile.
Vive le
l'ingénierie inverse, car elle est utilisée pour obtenir une liste de classes?
marciokoko

Réponses:

355

Nvm. Pour toute autre personne ayant ce problème, vous devez redémarrer votre Mac et appuyer sur ⌘ + R lors du démarrage. Ensuite, allez dans Utilitaires> Terminal et tapez les commandes suivantes:

csrutil disable
reboot 

Ceci est le résultat de la protection de l'intégrité du système. Plus d'infos ici .

ÉDITER

Si vous savez ce que vous faites et que vous êtes habitué à exécuter Linux, vous devez utiliser la solution ci-dessus, car bon nombre des restrictions SIP sont une véritable douleur.

Cependant, si vous êtes un bricoleur / noob / "poweruser" et ne savez pas ce que vous faites, cela peut être très dangereux et il vaut mieux utiliser la réponse ci-dessous .

Mark Bourke
la source
2
@Chris, vous devrez redémarrer avec CMD + R, ouvrir le terminal et exécuter csrutil enable; reboot. La commande ne fonctionne malheureusement pas en mode normal.
Alexander Kachkaev
7
@AlexanderKachkaev Oui, c'est ce que j'ai fait. Je voulais juste souligner que everbody devrait permettre à nouveau après avoir effectué les changements! Sinon, la protection de l'intégrité du système est définitivement désactivée, ce qui peut entraîner de graves problèmes.
Chris
9
Cela ne conduira à de graves problèmes que si vous supprimez / modifiez quelque chose que vous ne devriez pas supprimer / modifier. En d'autres termes, si vous savez ce que vous faites, il est parfaitement sûr de le laisser désactivé.
Clintm
16
Quiconque utilise pour s'exécuter sur Linux voudra probablement laisser cette option désactivée. C'est une douleur complète dans le cul.
mschuett
3
@Chris cela n'a pas de sens de vous menotter à votre chaise de bureau pour éviter d'être heurté par une voiture ... en d'autres termes ... si vous savez regarder des deux côtés avant de traverser la rue ... c'est parfaitement sûr de ne pas se
menotter
254

La bonne solution est de copier ou d'installer /usr/local/binnon /usr/bin. Ceci est dû à la protection de l'intégrité du système (SIP) . SIP est en /usr/binlecture seule mais laisse /usr/localen lecture-écriture.

SIP ne doit pas être désactivé comme indiqué dans la réponse ci-dessus, car il ajoute une autre couche de protection contre les logiciels malveillants obtenant un accès root. Voici une explication complète de ce que fait SIP et pourquoi il est utile.

Comme suggéré dans cette réponse, il ne faut pas désactiver SIP (mode sans racine) "Il n'est pas recommandé de désactiver le mode sans racine! La meilleure pratique consiste à installer des éléments personnalisés dans" / usr / local "uniquement."

hariszaman
la source
8
Cela a résolu mon problème. Merci pour le lien! Aller sans racine ou désactiver des choses en mode de récupération semblait super dangereux! Heureux d'avoir trouvé ça.
caokey
1
Cela n'a pas tout à fait faire l'affaire pour moi - j'eu un peu de chance aliasing (par exemple, dans mon cas) javaà /usr/local/bin/javames alias de Bashrc, après avoir fait le lien approprié dans ce dossier que cette réponse suggère.
Eli Albert
Cette réponse a parfaitement résolu mon problème. Ce devrait être la réponse acceptée car elle ne nécessite aucune modification du système et aucun redémarrage.
Stephan
Alors, cela ne laisse-t-il aucun chemin vers rmquoi que ce soit /usr/bin/? Je comprends que SIP a son but, mais je veux supprimer un exécutable spécifique.
Brad Solomon
1
J'ai /usr/local/binsur mon chemin et openssl 1.0.2n est correctement lié à /usr/local/bin/opensslmais chaque fois que je le fais, which opensslil montre toujours /usr/bin/opensslquelle est l'ancienne OpenSSL 0.9.8zh 14 Jan 2016version. Comment faire en sorte que mon système préfère l' /usr/local/bin/opensslun à l'autre?
Francisc0
15

Si vous souhaitez prendre le contrôle de /usr/bin/

Vous devrez redémarrer votre système:

Juste après le son de démarrage, maintenez la touche Command-R enfoncée pour démarrer dans le système de récupération

Cliquez sur le menu Utilitaires et sélectionnez Terminal

Tapez csrutil disable et appuyez sur retour

Cliquez sur le menu  et sélectionnez Redémarrer

Une fois que vous avez validé vos modifications, assurez-vous de réactiver SIP! Cela fait beaucoup pour protéger votre système. (Mêmes étapes que ci-dessus sauf type: csrutil enable)

Elliot Yap
la source
0

Si après avoir appelé "csrutil désactivé" votre commande ne fonctionne toujours pas, essayez avec "sudo" dans le terminal, par exemple:

sudo mv geckodriver /usr/local/bin

Et ça devrait marcher.

Nicolas
la source