LUKS로 주문형 암호화 볼륨 생성


13

Linux에서 필요에 따라 암호화되고 필요에 따라 파일 시스템을 만들려고합니다. LUKS와 cryptsetup에 익숙합니다.

빈 파일을 만들 수 있습니다.

fallocate -l 512M /root/image

LUKS 컨테이너를 만들 수 있습니다.

cryptsetup -y luksFormat /root/image

그런 다음 "열기":

cryptsetup luksOpen /root/image luksvolume

이 시점에서 파일 시스템을 만들 수 있습니다.

mkfs.ext4 -j /dev/mapper/luksvolume

이것은 모두 훌륭하고 멋집니다. 그러나이 질문의 "주문형 성장"부분은 다루지 않습니다.

암호화 된 파일 시스템에서 2Gb 파일을 복사하면 이미지를 "확장"하여 파일을 포함하기에 충분히 큽니다.

심지어 할 수 있습니까?


파일 시스템을 처음에 올바른 크기로 만들고 왜 어떤 문제를 해결하려고합니까?
Matthew Ife

3
때로는 파일 시스템이 얼마나 큰지 알지 못하는 경우가 있습니다. 문제는 암호화 된 파일 시스템에 하나의 파일이 있고 1) 공간 부족에 대한 걱정 2) 사용되지 않은 공간의 TONS가 없어도 파일을 추가 할 수 있다는 것입니다. 또한 암호화 된 파일 하나를 다른 곳에 복사하여 다시 마운트 할 수 있습니다.
Merc

답변:


21

예! 가능한 것 같습니다. 어떻게 달성 할 수 있는지 확인합시다. 이는 파일 시스템이 스파 스 파일의 최대 크기에 도달 할 때 더 많은 데이터를 써야하는 경우 '공간 부족'오류를보고하므로 실제 주문형 파일 시스템을 생성하지는 않습니다.

처음에는 가상화 시나리오에서 스토리지 공간을 절약하는 잘 알려진 기술인 Thin Provisioning 을 조사했습니다 . 불행히도, 일반적인 Linux 유스 케이스에서는 LVM 에서만 사용할 수있는 것 같습니다 . 이것이 귀하의 질문 범위를 벗어난 것처럼 보이므로 다른 것을 검색했습니다.

내가 조사한 두 번째 개념은 Sparse File 입니다. 이것은 귀하의 질문에 정확히 맞으며 ... 내 초기 의심은 " 좋아요. 스파 스 파일을 만들 수 있습니다. 그러나 파일을 LUKS 컨테이너로 초기화하면 어떻게됩니까? 그러한 초기화는 사용 가능한 모든 공간을 할당합니까? 이러한 컨테이너에서 파일 시스템을 초기화하면 어떻게됩니까? mkfs.ext4사용 가능한 모든 공간을 할당합니까? ". 나는 대답이 없었기 때문에 시도하기로 결정했습니다. 무슨 일이 있었는지 보자.

파일 시스템 내에 3.3G 의 여유 공간 만있는 현재 시스템에서 시작하겠습니다 /repository.

root@iMac-Chiara:~# df -h /repository
File system     Dim. Usati Dispon. Uso% Montato su
/dev/sda3       275G  258G    3,3G  99% /repository

이러한 파일 시스템 내에 10G 스파 스 파일을 작성해 봅시다 :

root@iMac-Chiara:~# dd of=/repository/file_container.img bs=1G count=0 seek=10
0+0 record dentro
0+0 record fuori
0 byte (0 B) copiati, 0,000119606 s, 0,0 kB/s

그리고 그것을 확인합시다 ... 그것은 정말로 드문 파일입니다 :

root@iMac-Chiara:~# ls -lh /repository/file_container.img 
-rw-r--r-- 1 root root 10G dic 12 19:48 /repository/file_container.img

확인. 따라서 이전에 3.3G의 여유 공간이있는 파일 시스템에 10G 파일이 있습니다. 아직 여유 공간이 얼마나됩니까?

root@iMac-Chiara:~# df -h /repository
File system     Dim. Usati Dispon. Uso% Montato su
/dev/sda3       275G  258G    3,3G  99% /repository

여전히 3.3G. 좋은. 스파 스 파일은 실제로 ... sparse-file ;-) 10G 파일 내에 LUKS 컨테이너를 만들어서 단계적으로 진행해 봅시다. 공간이 부족한지 봅시다 :

 root@iMac-Chiara:~# losetup /dev/loop0 /repository/file_container.img
 root@iMac-Chiara:~# cryptsetup -y luksFormat /dev/loop0

 WARNING!
 ========
 Ciò sovrascriverà i dati in /dev/loop0 in modo irreversibile.

 Are you sure? (Type uppercase yes): YES
 Inserire la passphrase LUKS: 
 Verify passphrase: 
 root@iMac-Chiara:~# cryptsetup luksOpen /dev/loop0 secretfs
 Inserire la passphrase per /dev/loop0: 
 root@iMac-Chiara:~#

이제 secrets여유 공간이 3.3G 인 파일 시스템에 저장된 10G 스파 스 파일 위에 정의 된 열린 컨테이너가 있습니다.

아직 여유 공간이 얼마나됩니까?

 root@iMac-Chiara:~# df -h /repository
 File system     Dim. Usati Dispon. Uso% Montato su
 /dev/sda3       275G  258G    3,3G  99% /repository

훌륭한! 여전히 3.3GB입니다. 우리의 암호화 된 컨테이너는 공간이 거의 필요하지 않았습니다!

모든 것이 정상인지 또는 설정에 이상한 것이 있는지 확인합시다.

root@iMac-Chiara:~# cryptsetup status secretfs
/dev/mapper/secretfs is active.
  type:    LUKS1
  cipher:  aes-cbc-essiv:sha256
  keysize: 256 bits
  device:  /dev/loop0
  loop:    /repository/file_container.img
  offset:  4096 sectors
  size:    20967424 sectors
  mode:    read/write

모든 것이 정상인 것 같으므로 컨테이너를 사용하여 무언가를 저장해 봅시다. 그 안에 EXT4 파일 시스템을 만들어 봅시다 :

root@iMac-Chiara:~# mkfs.ext4 /dev/mapper/secretfs 
mke2fs 1.42.5 (29-Jul-2012)
Etichetta del filesystem=
OS type: Linux
Dimensione blocco=4096 (log=2)
Dimensione frammento=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2620928 blocks
131046 blocks (5.00%) reserved for the super user
Primo blocco dati=0
Maximum filesystem blocks=2684354560
80 gruppi di blocchi
32768 blocchi per gruppo, 32768 frammenti per gruppo
8192 inode per gruppo
Backup del superblocco salvati nei blocchi: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: fatto                           
Scrittura delle tavole degli inode: fatto                           
Creating journal (32768 blocks): fatto
Scrittura delle informazioni dei superblocchi e dell'accounting del filesystem: fatto

root@iMac-Chiara:~#

"공간 부족"에 대한 추적이 없기 때문에 작동 한 것 같습니다. 점검 해보자:

root@iMac-Chiara:~# df -h /repository
File system     Dim. Usati Dispon. Uso% Montato su
/dev/sda3       275G  258G    3,2G  99% /repository

음 .. 뭔가가 일어났다. 우리는 100M의 공간을 잃었지만 .... 예상되는 동작입니다. EXT4 파일 시스템 DO을 만들 려면 많은 메타 데이터를 작성해야합니다. 따라서 생성 프로세스에서 일부 공간이 사용 된 것은 정상입니다.

"작동하는"EXT4 파일 시스템입니까?

root@iMac-Chiara:~# tune2fs -l /dev/mapper/secretfs
tune2fs 1.42.5 (29-Jul-2012)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          e63321c3-cee7-478d-a6af-cbdcaf1be1f7
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              655360
Block count:              2620928
Reserved block count:     131046
Free blocks:              2541265
Free inodes:              655349
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      639
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Sat Dec 12 19:58:05 2015
Last mount time:          n/a
Last write time:          Sat Dec 12 19:58:05 2015
Mount count:              0
Maximum mount count:      -1
Last checked:             Sat Dec 12 19:58:05 2015
Check interval:           0 (<none>)
Lifetime writes:          131 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      c8b3bf1b-9f05-4267-85d3-2ecfdbaa6dc3
Journal backup:           inode blocks

예! 괜찮아 보인다.

이제 우리는 3.3G 파일 시스템 내에 저장된 10G 스파 스 파일 위에 정의 된 열린 LUKS 컨테이너 안에 EXT4 파일 시스템을 작성했습니다.

공간을 "주문형"으로 할당하여 모든 것이 올바르게 작동하는지 봅시다.

500M의 더미 데이터를 암호화 된 FS에 쓰는 것으로 시작하겠습니다

root@iMac-Chiara:~# mkdir /mnt/temp
root@iMac-Chiara:~# mount /dev/mapper/secretfs /mnt/temp
root@iMac-Chiara:~# dd if=/dev/zero of=/mnt/temp/random_data.bin bs=1M count=512
512+0 record dentro
512+0 record fuori
536870912 byte (537 MB) copiati, 2,35214 s, 228 MB/s
root@iMac-Chiara:~#

파일 작성에 성공 했습니까?

root@iMac-Chiara:~# ls -lh /mnt/temp/random_data.bin 
-rw-r--r-- 1 root root 512M dic 12 20:09 /mnt/temp/random_data.bin

그렇게 보입니다.

실제 파일 시스템은 어떻게 되었습니까?

root@iMac-Chiara:~# df -h /repository
File system     Dim. Usati Dispon. Uso% Montato su
/dev/sda3       275G  259G    2,5G 100% /repository

우아! 우리는 엄청나게 500M 이상을 잃어 버렸습니다. 물리적 공간이 실제로 필요할 때 할당되므로 BTW가 좋습니다!

다른 2GB 파일을 저장합시다 :

root@iMac-Chiara:~# dd if=/dev/zero of=/mnt/temp/another_random_data.bin bs=1G count=2
2+0 record dentro
2+0 record fuori
2147483648 byte (2,1 GB) copiati, 25,6539 s, 83,7 MB/s
root@iMac-Chiara:~#

어떻게 된 거예요?

root@iMac-Chiara:~# ls -arlh /mnt/temp
totale 2,6G
-rw-r--r-- 1 root root 512M dic 12 20:09 random_data.bin
drwx------ 2 root root  16K dic 12 19:58 lost+found
-rw-r--r-- 1 root root 2,0G dic 12 20:13 another_random_data.bin
drwxr-xr-x 8 root root 4,0K mag 29  2015 ..
drwxr-xr-x 3 root root 4,0K dic 12 20:12 .
root@iMac-Chiara:~# df -h /repository
File system     Dim. Usati Dispon. Uso% Montato su
/dev/sda3       275G  261G    484M 100% /repository
root@iMac-Chiara:~#

정말 좋아요 파일을 삭제하면 어떻게됩니까?

root@iMac-Chiara:~# rm /mnt/temp/random_data.bin 
root@iMac-Chiara:~# sync
root@iMac-Chiara:~# ls -arlh /mnt/temp
totale 2,1G
drwx------ 2 root root  16K dic 12 19:58 lost+found
-rw-r--r-- 1 root root 2,0G dic 12 20:13 another_random_data.bin
drwxr-xr-x 8 root root 4,0K mag 29  2015 ..
drwxr-xr-x 3 root root 4,0K dic 12 20:14 .
root@iMac-Chiara:~# df -h /repository
File system     Dim. Usati Dispon. Uso% Montato su
/dev/sda3       275G  261G    484M 100% /repository
root@iMac-Chiara:~#

예상대로 스파 스 파일의 동작은 씬 프로비저닝과 동일합니다. 일단 할당되면 파일을 삭제할 때 스토리지 공간을 다시 요청할 수 없습니다. 그러나 이것은 일반적으로 괜찮습니다. 그렇지 않습니까?

따라서이 시점에서 귀하의 질문에 대한 답변이 완료되어야합니다. 권리?


부가:

밑줄 스토리지가 가득 차면 어떻게되는지 봅시다 :

root@iMac-Chiara:~# dd if=/dev/zero of=/mnt/temp/a_third_random_data.bin bs=1G count=2
2+0 record dentro
2+0 record fuori
2147483648 byte (2,1 GB) copiati, 26,7142 s, 80,4 MB/s
root@iMac-Chiara:~#

뭐? 성공한 것 같습니다! 이것이 어떻게 가능 했습니까? 점검 해보자!

root@iMac-Chiara:~# ls -arlh /mnt/temp
totale 4,1G
drwx------ 2 root root  16K dic 12 19:58 lost+found
-rw-r--r-- 1 root root 2,0G dic 12 20:17 a_third_random_data.bin
-rw-r--r-- 1 root root 2,0G dic 12 20:13 another_random_data.bin
drwxr-xr-x 8 root root 4,0K mag 29  2015 ..
drwxr-xr-x 3 root root 4,0K dic 12 20:17 .
root@iMac-Chiara:~#

음 ... 괜찮아 보인다. 확실합니까?

root@iMac-Chiara:~# df /repository
File system    1K-blocchi     Usati Disponib. Uso% Montato su
/dev/sda3       288110208 275070448         0 100% /repository

우리는 공간이 부족합니다! 오류없이!

실제로 일어난 일을 조사하는 것이 좋을지라도 ... 다른 ServerFault 회원의 호기심 및 / 또는 문제 해결 기술에 맡길 것입니다. ;-)

즐기세요!


BTW : 위의 모든 것을 여기에서 테스트했습니다.

root@iMac-Chiara:~# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.04
DISTRIB_CODENAME=raring
DISTRIB_DESCRIPTION="Ubuntu 13.04"
root@iMac-Chiara:~# uname -r
3.8.0-31-generic
root@iMac-Chiara:~# dpkg -l cryptsetup-bin
[...]
ii  cryptsetup-bin             2:1.4.3-4ubuntu2   amd64              disk encryption support - command line tools
root@iMac-Chiara:~#

이러한 명령이 작동하려면 루트 여야합니다. 항상 스파 스 파일의 경우입니까?
Merc

죄송합니다. 기본 폴더에 대한 적절한 쓰기 권한이 주어지면 일반 사용자로도 작동해야합니다.
Damiano Verzulli

이 위대한 답변에 감사드립니다. 질문과 걱정을 남겨주세요. 걱정 : 실제로 공간이 없을 때 두 번째 2GB 파일을 성공적으로 작성한 척합니까? 끔찍한 ... 당신이 그것을 (sha1sum 또는 다른 것으로) 다시 읽으려고하면 어떻게됩니까? 질문 : 네트워크를 통해 스파 스 파일을 스파 스 상태로 백업하는 방법이 있습니까 (즉, 실제로 사용되는 부분 만 복사)?
Thilo

나는 추가 조사를 원했지만 불행히도 나는 시간이 짧았으며 실제로 다른 SF 질문에 유효한 공간입니다. 어쨌든 전체 스토리지를 초과 예약하지 않으면 쉽게 피할 수 있습니다. 즉, 스파 스 파일을 만들 수는 있지만 ... 파이 시스 디스크에 할당 가능한 최대 공간을 최대한 확보 할 수 있습니다. 그렇지 않습니까? 대신 "overbooking"솔루션을 찾고 있다면 ... 다른 무엇인가 조사해야 할 것 (LVM?)
Damiano Verzulli

@Thilo 조용히 넘친 파일을 읽으려고하면 어떻게 될지 궁금합니다. 대상 디스크에 스파 스 파일을 만들어야 rsync하는 --sparse옵션이 있습니다.
localhost
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.