Montaje de LUKS desde la línea de comando


11

Cuando en nautiluso cajahago clic en el icono de un disco encriptado e ingreso mi contraseña, el dispositivo de bloque subyacente se asigna /dev/mapper/luks-$UUIDy se monta en /media/$USER/$DISK, no se requiere contraseña de root. ¿Hay alguna manera de invocar este proceso desde la línea de comandos, sin GUI, incluyendo obviar sudo y hacer que el punto de montaje pueda desmontarse nuevamente de la GUI?


Sin estar seguro (de ahí un comentario en lugar de una respuesta), creo que la GUI hace esto a través de udisks(o udisks2). Investigar las opciones de su utilidad CLI puede proporcionar más respuestas.
ira

Además, es posible que haya ingresado la contraseña por primera vez y haya seleccionado guardarla en su llavero de inicio de sesión. Por lo tanto, técnicamente se hace uso de una contraseña, pero su realiza de forma automática para que no lo ve.
ira

Respuestas:


12

No conozco una forma de comando único para hacer esto. Los programas de GUI están haciendo un buen interrogatorio del disco para adoptar el enfoque "correcto" y tendrá que hacer algo de ese trabajo usted mismo. Sin embargo, no necesita sudo, y creo que la secuencia de eventos resultante es relativamente indolora.

La respuesta corta

Uso udisksctldel udisks2paquete:

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

Su cuenta de usuario deberá estar debidamente autorizada para que funcione lo anterior. En Debian y Ubuntu, eso significa agregar su cuenta al plugdevgrupo.

Cuando haya terminado con el disco:

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

Cómo configurar las cosas

Así es como puede configurar las cosas (a través de la línea de comandos) para hacer que el proceso de usar el disco sea lo más sencillo posible. Asumiré que desea utilizar la totalidad de la unidad USB como un único sistema de archivos. Otras configuraciones requerirán modificaciones a las instrucciones. Advertencia sobre las variaciones: no he encontrado una manera de usar LVM en el contenedor encriptado que permita que una cuenta sin privilegios desconecte todo. (No veo una manera de desactivar un grupo de volúmenes a través de udisksctl).

Para fines de ilustración, diremos que el disco es /dev/sda. Necesitará un nombre para el sistema de archivos para que sea más fácil hacer referencia más adelante. Usaré " example".

Particionar el disco

Ejecute sudo parted /dev/sday ejecute los siguientes comandos:

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

El mkpartcomando probablemente le pedirá que ajuste los parámetros ligeramente. Debería aceptar aceptar sus números recomendados.

La partición ahora estará disponible a través de /dev/disk/by-partlabel/example-part.

Crear y montar la partición LUKS

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

Ir a través de las indicaciones.

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

El dispositivo encriptado ahora está disponible en /dev/mapper/example-unlocked. Esto no va a ser algo permanente; es solo para el proceso de configuración.

Crea tu sistema de archivos

Supongamos que el sistema de archivos que está utilizando es XFS. Casi cualquier otro sistema de archivos tradicional funcionará de la misma manera. Lo importante es agregar una etiqueta a la que pueda hacer referencia más adelante:

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

Ahora se puede acceder al dispositivo de bloqueo del sistema de archivos a través de /dev/disk/by-label/example.

Establecer permisos del sistema de archivos

Por defecto, el sistema de archivos solo será accesible por root. En la mayoría de los casos, probablemente desee que su cuenta de usuario pueda acceder a los archivos. Asumiendo que su nombre de cuenta es " user":

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

Cerrar todo abajo

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

Use su sistema de archivos

Esto es lo que harás regularmente. Después de enchufar la unidad USB,

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

Si su cuenta de usuario es " user", el sistema de archivos ahora se montará en /media/user/example.

Para desmontar el sistema de archivos:

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

Ahora puede desconectar la unidad USB.


Creé un script bash de código abierto que automatiza y simplifica su sección "Use Your Filesystem": github.com/JerichoJyant/usbkey . Está diseñado para unidades flash USB. Planeo incorporar también la configuración que describe aquí en el script.
Josh Patton

3

La respuesta de asciiphil me parece correcta y debe marcarse como tal.

Comienza: "No conozco una forma de comando único para hacer esto". Yo tampoco, y he abierto una solicitud de función correspondiente . Como solución alternativa, se puede crear una secuencia de comandos de contenedor para proporcionar una forma de comando único para desbloquear y montar una partición.

Suponiendo que use Bash, guarde el script a continuación como, por ejemplo unlock-and-mount, hágalo ejecutable y póngalo en un directorio en su PATH. Luego podrá desbloquear y montar un dispositivo en un solo paso con unlock-and-mount /dev/disk/by-id/my-device-part-X.

Advertencia: esto se basa en analizar los mensajes enviados udisksctla stdout y en la estabilidad de la udisksctlinterfaz de línea de comandos. Esto es frágil, según la udisksctl página del manual , que dice:

[Este] programa no está destinado a ser utilizado por scripts u otros programas; las opciones / comandos pueden cambiar de manera incompatible en el futuro, incluso en versiones de mantenimiento.

Mientras tanto, aquí está el script, que funciona por ahora:

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.