11 votos

"ls" funciona, pero "ls -l" me da "Operación no permitida"

Hay varias carpetas en mi sistema (Monterey 12.2.1) en las que puedo ejecutar con éxito ls , pero si ejecuto ls -l en la misma carpeta obtengo "Operación no permitida".

Estoy ejecutando estos comandos como Root, y el Terminal tiene acceso total al disco.

He encontrado esto porque timemachine no puede hacer una copia de seguridad de estos archivos, y no tengo ninguna explicación de por qué esto podría suceder.

He aquí un ejemplo:

 # 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

Los permisos y atributos extendidos en el directorio principal parecen normales:

# 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

¿Alguna idea?

12voto

Phill Puntos 126

Puedo ejecutar ls con éxito, pero si ejecuto ls -l en la misma carpeta obtengo "Operación no permitida".

Diferencia entre ls y ls -l

ls muestra el nombre de los archivos/directorios contenidos en un directorio, mientras que ls -l muestra mucha más información (extracto 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.

Normalmente, el acceso de lectura al directorio principal debería ser suficiente para obtener esta información, pero en este caso particular (SIP habilitado y datavault (ver más abajo), no lo es.

Por ejemplo, para obtener el número de enlaces, es necesario conocer el número de inodo. Puedes obtener esa información con ls -i y verás que falla para una serie de archivos y directorios (y por consiguiente ls -l fallará también para esos archivos/directorios):

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

Por otro lado, ls simplemente muestra los nombres de los archivos, y esa información puede ser recuperada para todos los archivos.

¿Por qué no sudo ls -l ¿trabajo?

sudo le permite ejecutar comandos como root :

$ sudo whoami
root

pero root ya no es un usuario todopoderoso: desde OS X 10.11 "El Capitan", sus poderes están restringidos por Protección de la integridad del sistema (SIP):

La protección de la integridad del sistema restringe la cuenta de usuario Root y limita las acciones que el usuario Root puede realizar en las partes protegidas del sistema operativo del Mac.

Antes de la Protección de la Integridad del Sistema, el usuario Root no tenía ninguna restricción de permisos, por lo que podía acceder a cualquier carpeta del sistema o aplicación de su Mac. El software obtenía acceso a nivel Root cuando usted introducía su nombre y contraseña de administrador para instalar el software. Esto permitía al software modificar o sobrescribir cualquier archivo o aplicación del sistema.

La protección de la integridad del sistema incluye protección para estas partes del sistema:

  • (...)
  • /var

así que /var es una de las carpetas protegidas que root ya no tiene acceso irrestricto.

Pero aún hay más: desactivar el SIP hace que estos archivos sean accesibles para root y al propietario. Todos los archivos que no pudieron ser leídos tienen el atributo extendido com.apple.rootless que los marca como protegido por SIP pero también tienen la datavault activado, por ejemplo:

ls -ledD@ com.apple.LaunchServices.dv

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

lo que los convierte en ilegible excepto para las aplicaciones con el derecho correspondiente (cuando el SIP está desactivado, el acceso se rige de nuevo por el modo y la propiedad, como en un sistema de archivos tradicional tipo UNIX).

Encontré esto porque timemachine no puede respaldar estos archivos

/private/var/folders almacena datos transitorios y su contenido no es respaldado por Time Machine.

6voto

computergorl Puntos 1

El "dv" que ves aquí es, según recuerdo, "datavault". En general, Apple se ha alejado de las convenciones estándar de Unix para adoptar un sistema más "sin root" basado en derechos en lugar de permisos de usuario. Mi opinión es que los archivos que estás viendo pertenecen a routined (un demonio que intenta averiguar las cosas que haces a menudo) y necesitarías un derecho para poder acceder a ellos. Hay una serie de otros directorios protegidos de esta manera, por ejemplo todo lo que hay en /System así como, por ejemplo, los archivos de la base de datos de iMessage.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X