11 votes

"ls" fonctionne, mais "ls -l" me donne "Opération non autorisée".

Il y a plusieurs dossiers sur mon système (Monterey 12.2.1) sur lesquels je peux exécuter avec succès ls mais si j'exécute ls -l sur le même dossier, j'obtiens "Operation not permitted".

J'exécute ces commandes en tant que Root, et le Terminal a un accès complet au disque.

J'ai découvert cela parce que timemachine ne peut pas sauvegarder ces fichiers, et je n'ai aucune explication quant à la raison pour laquelle cela se produirait.

Voici un exemple :

 # ls /private/var/folders/44/26mm0l190mn7sf9xj5gmn3wh0000gp/0/com.apple.routined
dv
# ls -l /private/var/folders/44/26mm0l190mn7sf9xj5gmn3wh0000gp/0/com.apple.routined
ls: dv: Operation not permitted
total 0

Les permissions et les attributs étendus sur le répertoire parent semblent normaux :

# ls -ld@ /private/var/folders/44/26mm0l190mn7sf9xj5gmn3wh0000gp/0/com.apple.routined
drwxr-xr-x  3 aaroni  staff  96 Jun 24  2020 /private/var/folders/44/26mm0l190mn7sf9xj5gmn3wh0000gp/0/com.apple.routined

Des idées ?

12voto

jaume Points 13186

Je peux exécuter ls avec succès, mais si je lance ls -l sur le même dossier, j'obtiens "Operation not permitted".

Différence entre ls et ls -l

ls affiche le nom des fichiers/répertoires contenus dans un répertoire, alors que ls -l affiche beaucoup plus d'informations (extrait de man ls ) :

If the -l option is given, the following information is displayed for each
file: file mode, number of links, owner name, group name, number of bytes
in the file, abbreviated month, day-of-month file was last modified, hour
file last modified, minute file last modified, and the pathname.

Normalement, l'accès en lecture au répertoire parent devrait suffire pour obtenir cette information, mais dans ce cas particulier (SIP activé et datavault activé, voir ci-dessous), ce n'est pas le cas.

Par exemple, pour obtenir le nombre de liens, vous devez connaître le numéro d'inode. Vous pouvez obtenir cette information avec ls -i et vous verrez qu'il échoue pour un certain nombre de fichiers et de répertoires (et par conséquent ls -l échouera également pour ces fichiers/répertoires) :

ls -i  /private/var/folders/51/y66nwk4x1b700xgy1fs5d_9w0000gq/0/

ls: com.apple.LaunchServices.dv: Operation not permitted
ls: com.apple.SharedWebCredentials: Operation not permitted
ls: com.apple.lockoutagent: Operation not permitted
ls: com.apple.nsurlsessiond: Operation not permitted
ls: dmd: Operation not permitted
18693497 com.apple.ScreenTimeAgent  18701711 com.apple.corespeechd      18688786 com.apple.icloud.searchpartyd  18687284 com.apple.progressd
18693950 com.apple.Spotlight        18687828 com.apple.dmd          18687147 com.apple.notificationcenter   18691540 com.apple.routined
18688254 com.apple.bird         18702008 com.apple.dock.launchpad   11150084 com.apple.pluginkit

D'un autre côté, ls affiche simplement les noms de fichiers, et cette information peut être récupérée pour tous les fichiers.

Pourquoi est-ce que sudo ls -l travail ?

sudo vous permet d'exécuter des commandes en tant que root :

$ sudo whoami
root

mais root n'est plus un utilisateur tout-puissant : depuis OS X 10.11 "El Capitan", ses pouvoirs sont limités par Protection de l'intégrité du système (SIP) :

La protection de l'intégrité du système restreint le compte de l'utilisateur root et limite les actions que ce dernier peut effectuer sur les parties protégées du système d'exploitation Mac.

Avant la protection de l'intégrité du système, l'utilisateur racine n'avait aucune restriction d'autorisation, il pouvait donc accéder à n'importe quel dossier système ou application de votre Mac. Un logiciel obtenait un accès de niveau Racine lorsque vous entriez votre nom d'administrateur et votre mot de passe pour installer le logiciel. Cela permettait au logiciel de modifier ou d'écraser n'importe quel fichier système ou application.

La protection de l'intégrité du système comprend protection pour ces parties du système :

  • (...)
  • /var

donc /var est l'un des dossiers protégés que root n'a plus un accès illimité.

Mais ce n'est pas tout : la désactivation de SIP rend ces fichiers accessibles à root et au propriétaire. Tous les fichiers qui n'ont pas pu être lus ont l'attribut étendu com.apple.rootless ce qui les marque comme étant protégé par SIP mais ils ont aussi le datavault activé, par exemple :

ls -ledD@ com.apple.LaunchServices.dv

drwx------@ 4 jaume  staff  datavault 128 Jan 17 10:35 com.apple.LaunchServices.dv
    com.apple.rootless   27 

ce qui les rend illisible sauf pour les applications ayant le droit correspondant (lorsque le SIP est désactivé, l'accès est à nouveau régi par le mode et la propriété, comme dans un système de fichiers traditionnel de type UNIX).

J'ai trouvé ça parce que Timemachine ne peut pas sauvegarder ces fichiers.

/private/var/folders stocke des données transitoires et son contenu n'est pas sauvegardé par Time Machine.

6voto

computergorl Points 61

Le "dv" que vous voyez ici est, si je me souviens bien, "datavault". Apple s'est généralement éloigné des conventions Unix standard pour adopter un système plus "sans racine" basé sur les droits au lieu des permissions utilisateur. Je pense que les fichiers que vous regardez appartiennent à routined (un démon qui essaie de comprendre les choses que vous faites souvent) et vous auriez besoin d'un droit pour y accéder. Il existe un certain nombre d'autres répertoires protégés de cette manière, par exemple tout ce qui se trouve dans le répertoire /System ainsi que, par exemple, les fichiers de la base de données iMessage.

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