Pourquoi chown indique-t-il «Opération non autorisée» sur OS X?

65

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". Quand je ls -lashle fichier coupable, il ressemble à ceci:

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

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

J'essaie de chmodfichiers que j'ai copiés à partir de mon ancien ordinateur Ubuntu. La plupart des fichiers ont été chmodédités avec succès de manière récursive. juste celui-ci est bloqué et je ne comprends pas pourquoi.

josef.van.niekerk
la source
1
Avez-vous essayé sudo chgrp wheel ./entries?
squircle
1
Faites une vérification du système de fichiers. Ouvrez Utilitaire de disque, sélectionnez votre volume, cliquez sur Vérifier le disque , puis, si nécessaire, réparez le disque .
Daniel Beck
Assurez-vous que le fichier n'est pas verrouillé dans le Finder (aucun badge de verrouillage sur l'icône). Pour le changer, ouvrez la boîte de dialogue Obtenir des informations et décochez Verrouillé .
Daniel Beck
S'il s'agit d'un volume "externe" (c'est-à-dire pas du volume système), vous devrez peut-être supprimer l'option "Ignorer la propriété de ce volume". (Voir au bas de la fenêtre Obtenir des informations pour le volume lui-même).
mardi

Réponses:

86

Oui, Mac apporte de nombreuses améliorations à Unix dans le domaine des fichiers. En ignorant la totalité de la fourchette de ressources qui n’est plus très utilisée, il existe:

  • les autorisations Unix standard ugo rwx et ainsi de suite. Les outils Unix normaux s'appliquent.
  • ACL , visualisable avec ls -leet modifiable avec chmod [ -a | +a | =a ].
  • drapeaux de fichiers visibles avec ls -lO(Capital oh, pas zéro) et modifiables avec chflags.
  • attributs étendus , visibles avec ls -l@(clés d'attribut uniquement) et visibles et modifiables avec xattr. (Utilisez xattr -hde l'aide si man xattrne vous donne rien.)
  • À partir de OS X 10.11 "El Capitan", la protection de l’intégrité du système (SIP) protège davantage certains fichiers des modifications apportées par les processus ordinaires, même lors sudode l’exécution en tant que root. Les fichiers protégés par SIP seront listés par ls -lOayant le restricteddrapeau et / ou par ls -l@l' com.apple.rootlessattribut.

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é, sudo chflags norestrictedet sudo xattr -d com.apple.rootlességalement renvoyer une erreur « Opération non autorisée ». Pour effacer l'indicateur et / ou l'attribut, vous devez démarrer 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, puis rappelez-vous que vos fichiers seront sous /Volumes/Macintosh HDou quel que soit votre démarrage. lecteur est nommé) ou désactivez SIP complètement puis redémarrez et les commandes devraient alors fonctionner. Sachez toutefois que les futures mises à jour du système d'exploitation restaureront probablement l' restrictedindicateur et les com.apple.rootlessattributs des fichiers que vous avez supprimés.

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

Notez que si ls -lOaffiche l' schgindicateur est défini, vous devez passer 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.

Vieux pro
la source
7
En ajoutant à cela, d'autres indicateurs peuvent vous empêcher de modifier vos fichiers. Dans mon script je metssudo chflags -R nouchg,noschg,nouappnd,nosappnd,noopaque,dump .
djjeck
1
Remarque: si quelque chose a le drapeau "non modifiable", la case à cocher Verrouillé dans Obtenir des informations sera cochée et grisée. "sudo chflags nouchg" le corrige.
Foo Bar
1
Je ne pouvais pas faire le -Net les ugo+rwdeux à la fois (je les ai Failed to clear ACL on file ugo+rw: No such file or directory) mais les exécuter individuellement a bien fonctionné. Si récursif est souhaité, il -Rdoit être le premier argument.
Owenfi
3
Notez que la protection de l'intégrité du système (sans racine) peut également en être la cause sur El Capitan et plus tard. Pour résoudre ce problème, démarrez en mode de récupération ( Cmd-R), ouvrez Terminal et exécutez-le csrutil disable, puis redémarrez-le (pour le réactiver, utilisez-le csrutil enable).
Erwin Wessels
Merci ... Je n'avais aucune idée des drapeaux de fichiers. Maintenant, je comprends pourquoi il est ditoverride rwxrwxrwx huttarl/staff uchg for green.html?
LarsH
18

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 rmcommande ait changé dans Tiger, de sorte que si vous utilisez rm -Rfdes 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/

En outre, même après OS X 10.4, il peut exister des indicateurs de métadonnées de fichier tels que uchget uappndqui empêchent toute modification des autorisations ou de la propriété des fichiers. chflagspeut enlever les drapeaux. Certains attributs / métadonnées de fichier et leur traitement par différents outils de copie se trouvent ici .

Bendalton
la source
sudo rm -Rf foldername/fonctionne parfaitement sur OSX Mountain Lion
Aryo
5
@Aryo: rmsupprime le répertoire. Y at-il un moyen de tout déverrouiller sans le supprimer? Lorsque je regarde uchgn'est pas défini, et que je peux l'activer et le désactiver comme prévu (avec chflags [no]uchg), mais cela n'a aucun effet sur l'icône de verrou dans le Finder, ni sur ma capacité à chown.
orome
12

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!

louche
la source
Génial, je devais chflagsutiliser sudo, mais c'est logique
Felipe
Avait le même problème avec CrashPlan.app (j'avais drwxrwxr-x@ 3 _BGMXPCHelper admin schg 96B 9 Jan 2018 CrashPlan.app), et celui-ci était la seule solution qui m'a permis de le supprimer, merci!
webeno
12

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

Bref, pour certains répertoires importants, il n'y a aucun moyen de les modifier - si vous utilisez sudo, chownou chmod. Cela affecte le /usrrépertoire (bien que vous soyez autorisé à le 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é.

Nate
la source
1
Sensationnel. Cela m'a rendu fou. D'une manière ou d'une autre, j'avais besoin de copier quelque chose dans / usr / lib qui ne se trouvait pas autrement dans / usr / local / lib (ne me demandez pas pourquoi). Et ça a fait l'affaire.
qwerty_so
4
En fait, vous n'avez pas besoin de désactiver complètement Rootless, vous pouvez simplement démarrer en mode de récupération (ce que vous devriez faire de toute façon pour désactiver Rootless) et y apporter les modifications souhaitées depuis le Terminal.
Vieux Pro
6

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
josef.van.niekerk
la source
4

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 recommander d'utiliser "Get Info" dans Finder pour résoudre ce type de problèmes.

(OS X 10.8.3)

Danza
la source
Cela m'a aidé à débloquer à .isopartir de Virtual Box glitchy.
Nakilon
1

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.

camslice
la source