web-dev-qa-db-fra.com

Pourquoi chown rapporte-t-il "Opération non autorisée" sur OS X?

J'essaie de faire ce qui suit sur mon Mac (10.6.7):

Sudo chown myusername:wheel ./entries

mais Unix/Mac retourne "Operation not allowed". Lorsque je ls -lash le fichier coupable, il se présente comme suit:

8 -rwxrwxrwx   1 myusername  staff   394B Apr 26 23:26 entries

J'ai essayé Sudo et Sudo su; rien ne fonctionne. Des idées quoi de neuf?

J'essaie de chmod fichiers que j'ai copiés de mon ancien ordinateur Ubuntu. La plupart des fichiers ont chmod 'ed avec succès récursivement; juste celui-ci est bloqué et je ne comprends pas pourquoi.

61

Après beaucoup de difficultés, voici ce que j'ai dû faire pour résoudre le problème:

  • Déplacé le fichier vers ~/Desktop
  • Sudo chown myusername:staff ./entries
  • Le déplacement du fichier à son emplacement d'origine n'a pas fonctionné (opération non autorisée à nouveau), alors ...
  • Sudo rm ./entries
  • Sudo mv ~/Desktop/entries ./entries
6

Oui, Mac apporte de nombreuses améliorations à Unix dans le domaine des fichiers. En ignorant l'ensemble ressource fork chose qui n'est plus beaucoup utilisée, il y a:

  • le permissions Unix standard ugorwx et ainsi de suite. Les outils Unix normaux s'appliquent.
  • ACL, visualisable avec ls -le et modifiable avec chmod [ -a | +a | =a ].
  • indicateurs de fichier visibles avec ls -lO (majuscule, pas zéro) et modifiables avec chflags.
  • attributs étendus , visualisable avec ls -l@ (clés d'attribut uniquement) et visualisable et modifiable avec xattr. (Utilisez xattr -h pour obtenir de l'aide si man xattr ne vous donne rien.)
  • À partir de OS X 10.11 "El Capitan",Protection de l'intégrité du système(SIP) protège en outre certains fichiers des modifications apportées aux processus ordinaires, même lorsque Sudo est exécuté en tant que root. Les fichiers protégés par SIP seront répertoriés par ls -lO avec le drapeau restricted et/ou par ls -l@ avec l'attribut com.Apple.rootless.

Des opérations sur un fichier peuvent être refusées en raison d'autorisations Unix, de listes de contrôle d'accès, d'indicateurs de fichier ou de SIP. Pour déverrouiller complètement un fichier:

Sudo chmod -N file        # Remove ACLs from file
Sudo chmod ugo+rw file    # Give everyone read-write permission to file
Sudo chflags nouchg file  # Clear the user immutable flag from file
Sudo chflags norestricted file  # Remove the SIP protection from file
Sudo xattr -d com.Apple.rootless file # Remove SIP protection from file

Si la protection de l'intégrité du système (SIP) est activée, Sudo chflags norestricted et Sudo xattr -d com.Apple.rootless renverront également l'erreur "Opération non autorisée". Pour effacer l'indicateur et/ou l'attribut, vous devez démarrer dans macOS Recovery et exécuter les commandes à partir de Terminal (vous devrez peut-être d'abord utiliser Utilitaire de disque pour déverrouiller et monter votre lecteur de démarrage, sans oublier que vos fichiers seront placés sous. /Volumes/Macintosh HD ou quel que soit le nom de votre lecteur d'amorçage) ou désactivez SIP au total puis redémarrez et les commandes devraient alors fonctionner. Sachez toutefois que les futures mises à jour du système d'exploitation restaureront probablement les attributs restricted et com.Apple.rootless à tous les fichiers que vous avez supprimés.

Désactiver SIP n'est pas recommandé car il supprime une grande partie de la protection contre les logiciels malveillants et les dommages accidentels. De plus, il n'est pas nécessaire de simplement supprimer la protection base de fichier. Si vous désactivez SIP, réactivez-le lorsque vous avez terminé les modifications.

Notez que si ls -lO indique que l'indicateur schg est défini, vous devez entrer en mode mono-utilisateur pour le désactiver. Je ne vais pas m'étendre là-dessus, car il y a de plus grandes questions sur la raison pour laquelle le fichier a cet indicateur défini, pourquoi vous essayez de le gêner et quelles en seront les conséquences.

81
Old Pro

J'ai eu le même problème. Il s’avère que les fichiers incriminés ont été marqués «Verrouillé» par le système d’exploitation. J'ai trouvé cette solution et elle a résolu les problèmes en quelques secondes:

http://explanatorygap.net/2005/07/10/unlocking-files-recursively-from-the-command-line/

Il semble que la commande rm ait changé dans Tiger, de sorte que si vous utilisez rm -Rf avec des privilèges élevés, les fichiers seront automatiquement déverrouillés.

Sous OS X avant Tiger: find /Volumes/Transit -flags +uchg -print0 | xargs -0 chflags nouchg

Sous OS X après Tiger: Sudo rm -Rf foldername/

De même, même après OS X 10.4, il peut exister des indicateurs de métadonnées de fichier, tels que uchg et uappnd, qui empêchent toute modification des autorisations ou de la propriété des fichiers. chflags peut supprimer les drapeaux. Certains attributs/métadonnées de fichier et la façon dont ils sont gérés par différents outils de copie sont ici .

18
bendalton

J'ai eu le même problème avec le Crashplan.app.

Toutes les solutions énumérées ici ne m'aideraient pas, mais celle-ci a fait l'affaire: http://forums.macrumors.com/showthread.php?t=1546163

Vous devez modifier les indicateurs immuables du système et de l'utilisateur:

Faites ceci pour voir quels drapeaux sont actifs sur votre fichier/dossier:

ls -lhdO MyFile

La réponse pourrait ressembler à ceci:

drwxrwxr-x 3 root admin schg,uchg 102B Apr 8 2013 MyFile

schg , uchg sont ces drapeaux immuables. Un pour le système et un pour l'utilisateur. Pour les supprimer, procédez comme suit:

chflags noschg CrashPlan.app # this removes system immutable flag
chflags nouchg CrashPlan.app # this removes the user immutable flags

Ensuite, pour moi au moins, le fichier est déverrouillé et vous pouvez le supprimer!

12
ruffy

Sous OS X 10.11 (El Capitan), cela peut également être causé par la nouvelle fonctionnalité Rootless . Voir cette réponse pour une explication.

En résumé, pour certains répertoires importants, il n’ya aucun moyen de les modifier - que vous utilisiez Sudo, chown ou chmod. Cela affecte le répertoire /usr (bien que vous soyez autorisé à modifier /usr/local).

Pour modifier un répertoire protégé par Rootless, vous devez désactiver Rootless . Et bien sûr, réactivez-le après vos modifications, car il s'agit d'une amélioration importante de la sécurité.

11
Nate

J'ai eu le même problème, à propos de mon dossier personnel. À la fin, je viens d'utiliser Finder comme ceci:

Allez -> Ordinateur -> votre disque -> Utilisateurs -> votre nom d’utilisateur -> clic droit -> Obtenir des informations

J'ai trouvé que c'était verrouillé, probablement je l'ai fait dans le passé et j'ai oublié. Décochez la case verrouillée, le problème est résolu.

Je peux vous recommander d'utiliser "Obtenir des informations" à partir du Finder afin de résoudre ce type de problèmes.

(OS X 10.8.3)

4
danza

Assurez-vous que le fichier et son dossier parent sont déverrouillés

Je rencontrais un problème similaire lorsque je tentais de supprimer un fichier de signature de messagerie Mac Mail. Je ne pouvais pas le supprimer avant d'avoir déverrouillé le fichier ainsi que son dossier parent.

1
camslice