¿Puedo montar una imagen cifrada ANTES de que se cargue el Finder?

1

Tengo la mayoría de mi carpeta ~ en una imagen de disco de paquete disperso encriptado. Lo tengo configurado para realizar el montaje automático a través de Prefs > Usuarios, pero carga DESPUÉS del Buscador, por lo que mi escritorio está en blanco a menos que lo fuerce a relanzar.

¿Hay alguna forma (a través de la línea de comandos, supongo) de obtener el sistema operativo para montar esta imagen de disco PRIMERO al iniciar sesión, antes de que se inicie otra cosa, incluido el Finder?

    
pregunta Ze'ev 09.10.2013 - 19:22

1 respuesta

5

El montaje del sparsebundle se puede realizar a través de la línea de comando usando el comando 'hdiutil'. También puede crear un script de shell que realizará esta acción. Este script asume que la imagen se encuentra en /Users/somebody/Image.sparsebundle, y que la frase de contraseña utilizada para cifrar la imagen es "testpass"):

#!/bin/bash
#
# This script mounts the disk image at /Users/somebody/Image.sparsebundle
#
echo -n testpass | hdiutil mount /Users/somebody/Image.sparsebundle

Después de crear ese script en algún editor de texto, puedes cambiar los permisos del archivo para permitir que se ejecute. Suponiendo que este script se haya creado en / Users / alguien / MountSparsebundle, puede usar Terminal para hacerlo ejecutable:

chmod 755 /Users/somebody/MountSparsebundle

Una vez que haya hecho el archivo ejecutable, debería poder ejecutar el comando usando la Terminal. En la Terminal, escriba la ruta completa del script para ejecutarlo:

/Users/somebody/MountSparsebundle

La secuencia de comandos debería ejecutarse y hacer que el sparsebundle se monte. Tenga en cuenta que deseará desmontar ese sparsebundle antes de ejecutar el script (para confirmar que se está montando cuando usa el script).

Después de verificar que la secuencia de comandos está funcionando, puede crear un LaunchDaemon que será responsable de montar este sparsebundle en el arranque. El archivo de configuración de LaunchDaemon se debe instalar en / Library / LaunchDaemons, lo que hará que se cargue antes de la ventana de inicio de sesión. Aquí hay un ejemplo de un archivo de configuración de launchd que ejecuta un script ubicado en / Users / alguien llamado "MountSparsebundle":

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
    <key>Label</key>
    <string>com.example.mountsparsebundle</string>
    <key>Program</key>
    <string>/Users/somebody/MountSparsebundle</string>
</dict>
</plist>

El último paso que deberías tomar sería configurar el sistema launchd para cargar ese daemon de inicio en el arranque. Esto se puede lograr usando launchctl (asumiendo que el archivo en el paso anterior se guardó en "/Library/LaunchDaemons/com.example.mountsparsebundle.plist"):

sudo launchctl load -w /Library/LaunchDaemons/com.example.mountsparsebundle.plist

Alternativamente, puede usar un LoginHook, que suspenderá el lanzamiento del Finder hasta que se cierre la secuencia de comandos de inicio de sesión. Aunque Apple no recomienda LoginHooks, se pueden usar para lograr lo que estás tratando de hacer. Puede configurar la secuencia de comandos mencionada anteriormente como un enlace de inicio de sesión usando el comando predeterminado:

sudo defaults write com.apple.loginwindow LoginHook /Users/somebody/MountSparsebundle

Nota: Los LoginHooks se ejecutan como root, lo cual es un riesgo para la seguridad ... Sin embargo, esto también le permitirá examinar al usuario actual que está iniciando sesión (como parte del script) y realizar acciones basadas en el credenciales de usuario. Aquí hay una secuencia de comandos modificada que muestra un ejemplo de cómo analizar el nombre de usuario que está ingresando (que se pasa a la secuencia de comandos como argumento $ 1):

#!/bin/bash
#
# This script mounts the disk image at /Users/somebody/Image.sparsebundle
#
if [ "$1" == "somebody" ]; then
    echo -n testpass | hdiutil mount /Users/somebody/Image.sparsebundle
fi
    
respondido por el Eddie Kelley 09.10.2013 - 20:28

Lea otras preguntas en las etiquetas