Montage de LUKS à partir de la ligne de commande

11

Lorsqu'en nautilusou cajaje clique sur l'icône d'un disque crypté et entrer mon mot de passe, le dispositif de bloc sous - jacent correspond au point /dev/mapper/luks-$UUIDet il se monté à /media/$USER/$DISK, aucun mot de passe root requis. Existe-t-il un moyen d'invoquer ce processus à partir de la ligne de commande, sans interface graphique, notamment en évitant sudo et en permettant au point de montage de se démonter à nouveau de l'interface graphique.

PSkocik
la source
Sans être certain (d'où un commentaire plutôt qu'une réponse), je crois que l'interface graphique le fait via udisks(ou udisks2). L'étude des options de son utilitaire CLI peut fournir d'autres réponses.
passe
En outre, il est possible que vous ayez entré le mot de passe la première fois et choisi de l'enregistrer dans votre trousseau de connexion. , Techniquement il a donc fait d' utiliser un mot de passe, mais le fait automatiquement si vous ne le voyez pas.
passe

Réponses:

12

Je ne connais pas de méthode à commande unique pour le faire. Les programmes GUI font un peu d'interrogation du disque pour adopter la "bonne" approche et vous devrez faire une partie de ce travail vous-même. Vous n'avez pas besoin de sudo, cependant, et je pense que la séquence d'événements qui en résulte est relativement indolore.

La réponse courte

Utilisation udisksctldu udisks2package:

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

Votre compte d'utilisateur devra être dûment autorisé pour que les éléments ci-dessus fonctionnent. Sur Debian et Ubuntu, cela signifie ajouter votre compte au plugdevgroupe.

Lorsque vous avez terminé avec le disque:

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

Comment configurer les choses

Voici comment vous pouvez configurer les choses (via la ligne de commande) pour rendre le processus d'utilisation du disque aussi indolore que possible. Je suppose que vous souhaitez utiliser l'intégralité de la clé USB comme un seul système de fichiers. D'autres configurations nécessiteront des modifications des instructions. Attention aux variations: je n'ai pas trouvé de moyen d'utiliser LVM dans le conteneur crypté qui permettra à un compte non privilégié de tout déconnecter. (Je ne vois pas de moyen de désactiver un groupe de volumes via udisksctl.)

À des fins d'illustration, nous dirons que le disque l'est /dev/sda. Vous aurez besoin d'un nom pour le système de fichiers pour le rendre plus facile à référencer plus tard. Je vais utiliser " example".

Partitionnez le disque

Exécutez sudo parted /dev/sdaet exécutez les commandes suivantes:

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

La mkpartcommande vous demandera probablement d'ajuster légèrement les paramètres. Vous devriez être d'accord d'accepter ses numéros recommandés.

La partition sera désormais disponible via /dev/disk/by-partlabel/example-part.

Créer et monter la partition LUKS

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

Parcourez les invites.

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

Le périphérique crypté est désormais disponible sur /dev/mapper/example-unlocked. Ce ne sera pas une chose permanente; c'est juste pour le processus d'installation.

Créez votre système de fichiers

Supposons que le système de fichiers que vous utilisez est XFS. À peu près tout autre système de fichiers traditionnel fonctionnera de la même manière. L'important est d'ajouter une étiquette que vous pourrez référencer plus tard:

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

Le périphérique de blocage du système de fichiers est désormais accessible via /dev/disk/by-label/example.

Définir les autorisations du système de fichiers

Par défaut, le système de fichiers ne sera accessible que par root. Dans la plupart des cas, vous souhaiterez probablement que les fichiers soient accessibles par votre compte d'utilisateur. En supposant que votre nom de compte est " user":

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

Tout fermer

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

Utilisez votre système de fichiers

C'est ce que vous ferez régulièrement. Après avoir branché la clé USB,

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

Si votre compte utilisateur est " user", le système de fichiers sera maintenant monté à /media/user/example.

Pour démonter le système de fichiers:

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

Vous pouvez maintenant déconnecter la clé USB.

asciiphil
la source
J'ai créé un script bash open source qui automatise et simplifie votre section "Utilisez votre système de fichiers": github.com/JerichoJyant/usbkey . Il est conçu pour les lecteurs flash USB. Je prévois également d'intégrer la configuration que vous décrivez ici dans le script.
Josh Patton
3

La réponse d' asciiphil me semble correcte et doit être marquée comme telle.

Il commence: "Je ne connais pas de méthode à commande unique pour le faire." Moi non plus, et j'ai ouvert une demande de fonctionnalité correspondante . Comme solution de contournement, on peut créer un script wrapper pour fournir un moyen à commande unique pour déverrouiller et monter une partition.

En supposant que vous utilisez Bash, enregistrez le script ci-dessous comme, par exemple unlock-and-mount, rendez-le exécutable et placez-le dans un répertoire de votre PATH. Vous pourrez ensuite déverrouiller et monter un appareil en une seule étape avec unlock-and-mount /dev/disk/by-id/my-device-part-X.

Attention: cela repose sur l'analyse des messages envoyés udisksctlà stdout et sur la stabilité de l' udisksctlinterface de ligne de commande. C'est fragile, selon la udisksctl page de manuel , qui dit:

[Ce] programme n'est pas destiné à être utilisé par des scripts ou d'autres programmes - les options / commandes peuvent changer de manière incompatible à l'avenir, même dans les versions de maintenance.

En attendant, voici le script, qui fonctionne pour l'instant:

#!/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"
sampablokuper
la source