Posso montare un'immagine crittografata PRIMA che il Finder venga caricato?

1

Ho la maggior parte della mia ~ cartella su un'immagine di un disco spaccato crittografato. Ho impostato l'automount tramite Prefs > Users, ma carica AFTER Finder, quindi il mio desktop è vuoto a meno che non forzino il riavvio del Finder.

C'è un modo (tramite la linea di comando, sto indovinando) per ottenere il sistema operativo per montare questa immagine del disco prima al momento del login, prima che venga avviato qualsiasi altro oggetto, incluso il Finder?

    
posta Ze'ev 09.10.2013 - 19:22
fonte

1 risposta

5

Il montaggio dello sparsebundle può essere eseguito tramite la riga di comando usando il comando 'hdiutil'. Puoi anche creare uno script di shell che eseguirà questa azione. Questo script presuppone che l'immagine si trovi in /Users/somebody/Image.sparsebundle e che la passphrase utilizzata per crittografare l'immagine sia "testpass"):

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

Dopo aver creato quello script in un editor di testo, è possibile modificare le autorizzazioni del file per consentirne l'esecuzione. Supponendo che questo script sia stato creato in / Users / somebody / MountSparsebundle, puoi usare Terminal per renderlo eseguibile:

chmod 755 /Users/somebody/MountSparsebundle

Una volta che hai reso eseguibile il file, dovresti essere in grado di eseguire il comando usando il Terminale. In Terminale, digita il percorso completo dello script per eseguirlo:

/Users/somebody/MountSparsebundle

Lo script dovrebbe essere eseguito e causare il montaggio dello sparsebundle. Nota che dovrai smontare lo sparsebundle prima di eseguire lo script (per confermare che si sta montando quando usi lo script).

Dopo aver verificato che lo script funzioni, puoi creare un LaunchDaemon che sarà responsabile del montaggio di questo sparsebundle all'avvio. Il file di configurazione LaunchDaemon deve essere installato in / Library / LaunchDaemons, che verrà caricato prima della finestra di login. Ecco un esempio di un file di configurazione launchd che esegue uno script situato in / Users / qualcuno chiamato "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>

L'ultimo passo che dovresti fare sarebbe configurare il sistema launchd per caricare quel demone di avvio all'avvio. Questo può essere realizzato usando launchctl (Supponendo che il file nel passaggio precedente sia stato salvato in "/Library/LaunchDaemons/com.example.mountsparsebundle.plist"):

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

In alternativa, puoi utilizzare un LoginHook, che sospenderà l'avvio del Finder fino allo spegnimento dello script di accesso. Sebbene Apple non raccomandi LoginHooks, possono essere utilizzati per realizzare ciò che stai cercando di fare. Puoi configurare lo script sopra menzionato come un hook di accesso usando il comando defaults:

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

Nota: LoginHooks viene eseguito come root, che è un po 'un rischio per la sicurezza ... Tuttavia, questo ti permetterà anche di esaminare l'utente corrente che sta effettuando l'accesso (come parte dello script) ed eseguire azioni basate sul credenziali dell'utente. Ecco uno script modificato che mostra un esempio di come analizzare il nome utente che sta effettuando l'accesso (che viene passato allo script come argomento $ 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
    
risposta data 09.10.2013 - 20:28
fonte

Leggi altre domande sui tag