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:
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.