
cryptsetup pode ser invocado com a opção --readonly
ou -r
, que configurará um mapeamento somente leitura:
cryptsetup --readonly luksOpen /dev/sdb1 sdb1
Depois de abrir um dispositivo como somente leitura, posso mapeá-lo novamente para leitura e gravação posteriormente? Obviamente, quero dizer mapeá-lo para leitura e gravação sem fechá-lo primeiro e depois abri-lo novamente. Posso remapear sem precisar digitar minha senha novamente?
Se isso não for possível, será que o cryptsetup não suporta isso ou existe algum nível mais fundamental?
Responder1
Não parece ser possível com o cryptsetup
comando. Infelizmente cryptsetup
tem algumas dessas bandeiras imutáveis... --allow-discards
também é uma delas. Se isso não tiver sido definido no momento em que você abriu o contêiner, não será possível adicioná-lo mais tarde.
Pelo menos, não com o cryptsetup
comando. No entanto, como cryptsetup
cria alvos regulares do Device Mapper, você pode recorrer dmsetup
a modificá-los. Claro, isso não é recomendado por vários motivos: é como alterar a tabela de partições que estão em uso - bagunce tudo e você poderá perder todos os seus dados.
O mapeador de dispositivos permite o remapeamento dinâmico de todos os dispositivos em tempo de execução e não se preocupa com a segurança dos seus dados; é por isso que esse recurso geralmente é agrupado atrás da camada LVM, que mantém os metadados necessários para torná-lo seguro.
Crie um dispositivo LUKS somente leitura:
# truncate -s 100M foobar.img
# cryptsetup luksFormat foobar.img
# cryptsetup luksOpen --read-only foobar.img foobar
A maneira como dmsetup
vê:
# 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
Observe a chave mestra que normalmente não deveria ser vazada, pois ela quebra qualquer proteção de força bruta que o LUKS oferece. Infelizmente não encontrei uma maneira sem usá-lo, pois dmsetup
também falta uma --make-this-read-write
opção direta. No entanto, dmsetup reload
permite substituir totalmente um mapeamento, portanto, iremos substituí-lo por ele mesmo no modo leitura-gravação.
# dmsetup table --showkeys foobar | dmsetup reload foobar
# dmsetup info foobar
Name: foobar
State: ACTIVE (READ-ONLY)
Read Ahead: 256
Tables present: LIVE & INACTIVE
Ainda é somente leitura após a recarga, porque a recarga vai para a tabela inativa.
Para tornar a tabela inativa ativa, use dmsetup resume
:
# dmsetup resume foobar
# dmsetup info foobar
Name: foobar
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
E assim temos um dispositivo LUKS de leitura e gravação.
Funciona com um sistema de arquivos ativo?
# 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.
Portanto, é somente leitura. Faça-o ler-escrever e remontar:
# 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 voltar ao modo somente leitura?
# 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.
Então provavelmente funciona. O processo para adicionar allow_discards
sinalizador a um mapeamento de criptografia existente é semelhante - você precisa recarregar com uma tabela que contenha esse sinalizador. No entanto, um sistema de arquivos que já detectou a ausência de suporte para descarte pode não ser convencido a detectar novamente isso imediatamente. Portanto, não está claro quão prático é.
Ainda assim, a menos que você tenha um bom motivo para não fazê-lo, você deve reabrir usando cryptsetup
comandos regulares, mesmo que isso signifique desmontar e fornecer novamente a senha. É mais seguro e, mais importante, não contorna o conceito de segurança LUKS.
Responder2
Não é possível mudar de somente leitura para leitura-gravação após a abertura do volume. Não vejo nenhuma opção no código-fonte do cryptsetup para fazer isso.