
Se puede invocar cryptsetup con la opción --readonly
o -r
, que configurará una asignación de solo lectura:
cryptsetup --readonly luksOpen /dev/sdb1 sdb1
Una vez que he abierto un dispositivo como de solo lectura, ¿puedo reasignarlo posteriormente para lectura y escritura? Obviamente, me refiero a mapearlo de lectura y escritura sin cerrarlo primero y luego abrirlo nuevamente. ¿Puedo reasignarlo sin tener que volver a escribir mi contraseña?
Si esto no es posible, ¿es simplemente que cryptsetup no lo admite o existe algún nivel más fundamental?
Respuesta1
No parece posible con el cryptsetup
comando. Desafortunadamente cryptsetup
tiene algunas banderas inmutables... --allow-discards
también es una de ellas. Si esto no estaba configurado en el momento de abrir el contenedor, no podrá agregarlo más tarde.
Al menos, no con el cryptsetup
mando. Sin embargo, dado que cryptsetup
crea objetivos regulares de Device Mapper, puede recurrir a dmsetup
ellos para modificarlos. Por supuesto, esto no se recomienda por varias razones: es como cambiar la tabla de particiones que están en uso: estropearla y podrías perder todos tus datos.
El asignador de dispositivos permite la reasignación dinámica de todos los dispositivos en tiempo de ejecución y no le importa en absoluto la seguridad de sus datos; Es por eso que esta característica generalmente está incluida detrás de la capa LVM, que mantiene los metadatos necesarios para que sea segura.
Cree un dispositivo LUKS de solo lectura:
# truncate -s 100M foobar.img
# cryptsetup luksFormat foobar.img
# cryptsetup luksOpen --read-only foobar.img foobar
La forma dmsetup
lo ve:
# dmsetup info foobar
Name: foobar
State: ACTIVE (READ-ONLY)
Read Ahead: 256
Tables present: LIVE
[...]
# dmsetup table --showkeys foobar
0 200704 crypt aes-xts-plain64 ef434503c1874d65d33b1c23a088bdbbf52cb76c7f7771a23ce475f8823f47df 0 7:0 4096
Tenga en cuenta la clave maestra que normalmente no debería filtrarse, ya que rompe cualquier protección de fuerza bruta que ofrezca LUKS. Desafortunadamente no he encontrado una manera sin usarlo, ya que dmsetup
también falta una --make-this-read-write
opción directa. Sin embargo, dmsetup reload
permite reemplazar una asignación por completo, por lo que la reemplazaremos por sí misma en modo lectura-escritura.
# dmsetup table --showkeys foobar | dmsetup reload foobar
# dmsetup info foobar
Name: foobar
State: ACTIVE (READ-ONLY)
Read Ahead: 256
Tables present: LIVE & INACTIVE
Sigue siendo de solo lectura después de la recarga, porque la recarga pasa a la tabla inactiva.
Para activar la tabla inactiva, utilice dmsetup resume
:
# dmsetup resume foobar
# dmsetup info foobar
Name: foobar
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Y así tenemos un dispositivo LUKS de lectura y escritura.
¿Funciona con un sistema de archivos en vivo?
# cryptsetup luksOpen --readonly foobar.img foobar
# mount /dev/mapper/foobar /mnt/foobar
mount: /mnt/foobar: WARNING: device write-protected, mounted read-only.
# mount -o remount,rw /mnt/foobar
mount: /mnt/foobar: cannot remount /dev/mapper/foobar read-write, is write-protected.
Entonces es de solo lectura. Hazlo de lectura-escritura y vuelve a montarlo:
# dmsetup table --showkeys foobar | dmsetup reload foobar
# dmsetup resume foobar
# mount -o remount,rw /mnt/foobar
# echo hey it works > /mnt/foobar/amazing.txt
¿Podemos volver al modo de solo lectura?
# mount -o remount,ro /mnt/foobar
# dmsetup table --showkeys foobar | dmsetup reload foobar --readonly
# dmsetup resume foobar
# mount -o remount,rw /mnt/foobar
mount: /mnt/foobar: cannot remount /dev/mapper/foobar read-write, is write-protected.
Entonces probablemente funcione. El proceso para agregar allow_discards
una bandera a una asignación de cripta existente es similar: debe recargar con una tabla que contenga esta bandera. Sin embargo, es posible que un sistema de archivos que ya detectó la ausencia de soporte de descarte no esté convencido de volver a detectarlo sobre la marcha. Por tanto, no está claro qué tan práctico es.
Aún así, a menos que tenga muy buenas razones para no hacerlo, debe limitarse a volver a abrir usando cryptsetup
comandos regulares, incluso si eso significa desmontar y volver a proporcionar la frase de contraseña. Es más seguro en todos los aspectos y, lo que es más importante, no elude el concepto de seguridad de LUKS.
Respuesta2
No es posible cambiar de solo lectura a lectura y escritura después de abrir el volumen. No veo ninguna opción en el código fuente de cryptsetup para hacer eso.