Montaggio di LUKS dalla riga di comando


11

Quando nautiluso cajafaccio clic sull'icona di un disco crittografato e immetto la mia password, il dispositivo a blocchi sottostante viene mappato /dev/mapper/luks-$UUIDe viene montato su /media/$USER/$DISK, non è richiesta la password di root. C'è un modo per invocare questo processo dalla riga di comando, senza GUI, incluso l'ovvio di sudo e la possibilità che il mountpoint sia nuovamente smontato dalla GUI.


Senza essere certo (quindi un commento piuttosto che una risposta) credo che la GUI lo faccia attraverso udisks(o udisks2). L'analisi delle opzioni dalla sua utilità CLI può fornire ulteriori risposte.
termina il

Inoltre, è possibile che tu abbia inserito la password per la prima volta e selezionato per salvarla nel tuo portachiavi di accesso. Quindi, tecnicamente non utilizzare una password, ma la sua eseguita automaticamente in modo da non lo vedi.
termina il

Risposte:


12

Non conosco un modo a comando singolo per farlo. I programmi della GUI stanno facendo un bel po 'di interrogatorio sul disco per adottare l'approccio "giusto" e dovrai fare un po' di quel lavoro da solo. Non hai bisogno di sudo, però, e penso che la sequenza di eventi risultante sia relativamente indolore.

La risposta breve

Utilizzare udisksctldal udisks2pacchetto:

udisksctl unlock -b /path/to/disk/partition
udisksctl mount -b /path/to/unlocked/device

Il tuo account utente dovrà essere debitamente autorizzato per far funzionare quanto sopra. Su Debian e Ubuntu, ciò significa aggiungere il tuo account al plugdevgruppo.

Quando hai finito con il disco:

udisksctl unmount -b /path/to/unlocked/device
udisksctl lock -b /path/to/disk/partition
udisksctl power-off -b /path/to/disk/or/partition

Come impostare le cose

Ecco come è possibile impostare le cose (tramite la riga di comando) per rendere il processo di utilizzo del disco il più indolore possibile. Presumo che tu voglia utilizzare l'intera unità USB come un singolo file system. Altre configurazioni richiederanno modifiche alle istruzioni. Avvertenza sulle variazioni: non ho trovato un modo per utilizzare LVM nel contenitore crittografato che consentirà a un account senza privilegi di disconnettere tutto. (Non vedo un modo per disattivare un gruppo di volumi tramite udisksctl.)

A scopo illustrativo, diremo che il disco è /dev/sda. Avrai bisogno di un nome per il filesystem per facilitare il riferimento in un secondo momento. Userò " example".

Partiziona il disco

Esegui sudo parted /dev/sdaed esegui i seguenti comandi:

mklabel gpt
mkpart example-part 1MiB -1s
quit

Il mkpartcomando probabilmente ti chiederà di modificare leggermente i parametri. Dovresti accettare i numeri consigliati.

La partizione sarà ora disponibile tramite /dev/disk/by-partlabel/example-part.

Creare e montare la partizione LUKS

sudo cryptsetup luksFormat /dev/disk/by-partlabel/example-part

Segui le istruzioni.

sudo cryptsetup luksOpen /dev/disk/by-partlabel/example-part example-unlocked

Il dispositivo crittografato è ora disponibile all'indirizzo /dev/mapper/example-unlocked. Questa non sarà una cosa permanente; è solo per il processo di installazione.

Crea il tuo filesystem

Supponiamo che il filesystem che stai usando sia XFS. Praticamente qualsiasi altro filesystem tradizionale funzionerà allo stesso modo. L'importante è aggiungere un'etichetta a cui puoi fare riferimento in seguito:

sudo mkfs -t xfs -L example /dev/mapper/example-unlocked

È ora possibile accedere al dispositivo di blocco del filesystem tramite /dev/disk/by-label/example.

Imposta le autorizzazioni del filesystem

Per impostazione predefinita, il filesystem sarà accessibile solo da root. Nella maggior parte dei casi, probabilmente desideri che i file siano accessibili dal tuo account utente. Supponendo che il nome del tuo account sia " user":

udisksctl mount -b /dev/disk/by-label/example
sudo chown user:user /media/user/example

Chiudi tutto

udisksctl unmount -b /dev/disks/by-label/example
sudo cryptsetup luksClose example-unlocked

Usa il tuo filesystem

Questo è ciò che farai regolarmente. Dopo aver collegato l'unità USB,

udisksctl unlock -b /dev/disks/by-partlabel/example-part
udisksctl mount -b /dev/disks/by-label/example

Se il tuo account utente è " user", il filesystem verrà ora montato su /media/user/example.

Per smontare il filesystem:

udisksctl unmount -b /dev/disks/by-label/example
udisksctl lock -b /dev/disks/by-partlabel/example-part
udisksctl power-off -b /dev/disks/by-partlabel/example-part

Ora puoi scollegare l'unità USB.


Ho creato uno script bash open source che automatizza e semplifica la sezione "Usa il tuo filesystem": github.com/JerichoJyant/usbkey . È progettato per le unità flash USB. Ho intenzione di incorporare anche l'installazione descritta qui nello script.
Josh Patton,

3

La risposta di asciiphil mi sembra corretta e dovrebbe essere contrassegnata come tale.

Inizia: "Non conosco un modo a comando singolo per farlo." Nemmeno io, e ho aperto una richiesta di funzione corrispondente . Come soluzione alternativa, è possibile creare uno script wrapper per fornire un modo a comando singolo per sbloccare e montare una partizione.

Supponendo di usare Bash, salvare lo script di seguito come, ad esempio unlock-and-mount, renderlo eseguibile e inserirlo in una directory nella propria PATH. Sarai quindi in grado di sbloccare e montare un dispositivo in un solo passaggio unlock-and-mount /dev/disk/by-id/my-device-part-X.

Attenzione: questo si basa sull'analisi dei messaggi inviati udisksctla stdout e sulla stabilità dell'interfaccia della udisksctlriga di comando. Questo è fragile, secondo la udisksctl pagina man , che dice:

[Questo] programma non è destinato ad essere utilizzato da script o altri programmi: opzioni / comandi potrebbero cambiare in modo incompatibile in futuro anche nelle versioni di manutenzione.

Nel frattempo, ecco lo script, che funziona per ora:

#!/usr/bin/env bash
# A convenience wrapper around `udisksctl`.

# Trace execution 
set -x

# Abort on errors. (I find this helpful, despite the cautions given in
# http://mywiki.wooledge.org/BashFAQ/105 and
# http://mywiki.wooledge.org/BashFAQ/112 .)
set -e
set -u

# Define functions
die () {
    echo >&2 "$@"
    exit 1
}

# Validate input argument(s) 
[[ "$#" -eq 1 ]] || die "Exactly 1 argument required: path to partition ID. $# given"
[[ -b "$1" ]]    || die "$1 is not a block device"
[[ "$1" == /dev/disk/by-id/* ]] || die "$1 does not begin '/dev/disk/by-id/'"

# Unlock partition
unlockedpart="$(udisksctl unlock -b "$1" |\
 tail -n1 |\
 sed -e 's/^Unlocked \/dev\/[[:print:]]\+ as \([[:print:]]\+\).$/\1/' \
)"

# Mount unlocked partition
udisksctl mount -b "$unlockedpart"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.