remapear partição LUKS somente leitura para leitura-gravação

remapear partição LUKS somente leitura para leitura-gravação

cryptsetup pode ser invocado com a opção --readonlyou -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 cryptsetupcomando. Infelizmente cryptsetuptem algumas dessas bandeiras imutáveis... --allow-discardstambé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 cryptsetupcomando. No entanto, como cryptsetupcria alvos regulares do Device Mapper, você pode recorrer dmsetupa 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 dmsetupvê:

# 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 dmsetuptambém falta uma --make-this-read-writeopção direta. No entanto, dmsetup reloadpermite 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_discardssinalizador 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 cryptsetupcomandos 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.

informação relacionada