웹사이트 검색

DM-Crypt를 사용하여 Ubuntu VPS에서 암호화된 볼륨을 만드는 방법


상태: 더 이상 사용되지 않음

이 문서에서는 더 이상 지원되지 않는 Ubuntu 버전에 대해 설명합니다. 현재 Ubuntu 12.04를 실행하는 서버를 운영 중인 경우 지원되는 Ubuntu 버전으로 업그레이드하거나 마이그레이션하는 것이 좋습니다.

  • Ubuntu 14.04로 업그레이드합니다.
  • Ubuntu 14.04에서 Ubuntu 16.04로 업그레이드
  • 서버 데이터를 지원되는 버전으로 마이그레이션

이유:

대신 참조:

소개

보안은 인터넷에 액세스할 수 있는 컴퓨터에 저장되는 모든 종류의 데이터에 대한 주요 관심사여야 합니다. 모든 저장소 공급자는 데이터를 보호하기 위해 주의를 기울여야 하지만 이는 서버, 사회 공학 및 기타 여러 경로에서 서비스의 소프트웨어 결함을 통해 무단 액세스가 발생할 수 있는 경우에만 적용됩니다. 요컨대, 잘못된 손에 넘어가서는 안 되는 모든 데이터의 암호화 및 보안에 대한 소유권을 가져야 합니다.

Linux 시스템에서 콘텐츠를 암호화하는 방법에는 여러 가지가 있습니다. 이러한 옵션 중 다수는 별도의 파티션, 장치 또는 파일 시스템을 암호화하는 데 의존합니다. VPS와 같은 시스템을 다루는 경우에는 옵션이 아닐 수 있습니다. 그러나 암호화된 데이터를 저장하기 위해 장치로 작동하는 파일을 만드는 것과 같은 다른 옵션이 있습니다.

이 가이드에서는 dm-crypt 도구를 사용하여 중요한 데이터를 저장하는 데 사용할 수 있는 암호화된 대용량 파일을 생성합니다. 그런 다음 이 파일을 일반 파티션인 것처럼 마운트할 수 있습니다. Ubuntu 12.04 VPS 인스턴스에서 이를 시연할 예정이지만 유사한 절차가 다른 배포판에서도 작동해야 합니다.

기본 아이디어

dm-crypt는 투명한 디스크 암호화를 제공하는 커널 수준 암호화 메커니즘입니다. 즉, 마운트 후 추가 상호 작용 없이 파일을 즉시 사용할 수 있습니다.

대부분의 암호화 체계는 파티션 수준의 암호화에 의존하지만 장치 매핑 대상으로 마운트하는 파일을 사용하여 이 문제를 해결할 수 있습니다. 파일을 루프 장치로 마운트하여 이 작업을 수행합니다. 그런 다음 다른 파티션이나 장치와 마찬가지로 이 마운트된 "장치\에 데이터를 저장할 수 있습니다.

모든 종류의 암호화 구현을 고려할 때 몇 가지 장단점을 따져봐야 합니다. 우선, 암호화와 관련된 성능 오버헤드가 항상 있습니다. 이것은 중요할 수도 있고 중요하지 않을 수도 있으며, 이를 대규모로 구현하기 전에 먼저 테스트를 실행할 작은 파일을 만드는 것이 좋습니다.

또 다른 고려 사항은 복구입니다. 암호화는 기본 기능으로 인해 복구를 더 어렵게 만듭니다. 암호를 잊어버리면 데이터가 사실상 영원히 손실됩니다. LUKS 헤더를 덮어쓰거나 손상되면 데이터도 영원히 손실됩니다. 시스템이 부팅되지 않고 암호화된 파일의 정보에 액세스해야 하는 경우 액세스 권한을 얻기 위해 더 복잡한 프로세스를 거쳐야 합니다.

데이터를 암호화하기로 결정할 때 무언가 잘못되면 해당 데이터가 손실될 가능성을 인식해야 합니다. 모든 데이터를 확실히 백업해야 하며 dm-crypt는 여기에서 이를 수행하는 방법에 대한 많은 정보를 제공합니다.

dm-crypt 도구 설치

배포판에서 커널 수준 기능을 사용할 수 있어야 하지만 실제 프런트 엔드 도구는 기본적으로 설치되지 않을 수 있습니다. 이 가이드의 모든 명령은 루트로 수행됩니다.

로컬 패키지 색인을 업데이트하고 dm-crypt 도구를 설치하여 필요한 도구를 얻을 수 있습니다.

apt-get update
apt-get install cryptsetup

이렇게 하면 dm-crypt 볼륨으로 작업하는 데 필요한 모든 필수 종속성 및 도우미 유틸리티를 가져옵니다.

희소하지 않은 빈 파일 만들기

암호화된 데이터를 저장하려면 저장 장치 역할을 할 파일을 만들어야 합니다.

우리는 빈 파일을 만들고 싶지만 그것이 생성될 때 실제로 전체 파일 크기를 할당하지 않는 희소 파일이 될 수는 없습니다. 우리는 이것을 다양한 방법으로 할 수 있습니다.

이 작업을 수행하는 가장 쉽고 빠른 방법은 fallocate 명령을 사용하는 것입니다. 이렇게 하면 파일에 대해 원하는 디스크 양을 즉시 할당하고 지정한 파일 이름을 할당합니다.

예를 들어 루트 사용자의 홈 디렉토리에 512MB 파일을 생성하려면 다음을 입력할 수 있습니다.

fallocate -l 512M /root/test1

이것은 매우 빠르지만 0 또는 무작위 데이터가 있는 블록에서 사용했던 오래되고 삭제된 데이터를 덮어쓰지 않는다는 단점이 있습니다. 우리는 사람들이 파일의 어느 부분에 암호화된 데이터가 기록되었는지 알 수 있기를 원하지 않기 때문에 이것은 아마도 귀하의 목적에 바람직하지 않을 것입니다.

또 다른 대안은 유비쿼터스 dd 명령을 사용하는 것입니다. /dev/zero 의사 장치를 사용하여 파일에 프로비저닝하는 전체 영역에 0을 쓸 수 있습니다. 다음과 같이 입력하여 위와 유사한 파일을 만들 수 있습니다.

dd if=/dev/zero of=/root/test2 bs=1M count=512

대신 실제로 기록될 암호화된 데이터를 모방해야 하는 임의 데이터를 작성하려는 경우 대신 임의 의사 장치 중 하나를 사용할 수 있습니다. 특히 대용량 파일을 할당하는 경우 시간이 훨씬 오래 걸리지만 임의 장치를 사용하는 것이 이 목적을 위해 파일을 프로비저닝하는 가장 좋은 방법일 것입니다.

dd if=/dev/urandom of=/root/test3 bs=1M count=512

/dev/random 의사 장치를 사용하는 것은 이를 수행하는 훨씬 더 안전한 방법이지만 다시 시간을 희생해야 합니다.

dd if=/dev/random of=/root/test4 bs=1M count=512

파일에 dm-crypt LUKS 컨테이너 생성

방금 만든 파일을 포맷하기 전에 파일 내에 LUKS 파티션을 만들어야 합니다. LUKS(Linux Unified Key Setup)는 디스크 암호화의 표준입니다. 이것은 다른 모든 데이터가 위에 놓일 기본 레이어입니다.

dm-crypt 도구는 이 계층을 생성하는 매우 쉬운 방법을 제공합니다. 이 명령으로 컨테이너를 만들 수 있습니다.

cryptsetup -y luksFormat /root/test1

파일 내용을 덮어쓸 것인지 확인해야 합니다. 실수로 잘못된 파일을 덮어쓰지 않도록 참조하는 파일을 다시 확인하십시오. 확인했으면 "YES\를 입력하여 계속합니다.

그런 다음 데이터를 해독하는 데 필요한 암호를 설정하라는 메시지가 표시됩니다. 기억하세요: 이 암호를 잊어버리면 생성할 파일 시스템에 저장된 모든 데이터가 손실됩니다. 이 암호를 분실하지 않는 곳에 안전하게 보관하거나 반드시 기억하십시오. -y 옵션을 사용하면 암호를 확인하여 실수하지 않았는지 확인할 수 있습니다.

지금 파일을 확인하면 이제 LUKS 암호화 파일로 알려진 것을 볼 수 있습니다.

file /root/test1
test1: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: 1851db36-3223-4ee1-8e3e-cc65c49e05f3

이제 파일 위에 컨테이너가 빌드되었으므로 다음과 같이 컨테이너를 열 수 있습니다.

<예비>

이 경우 /root/test1 파일을 사용하고 이름을 volume1로 지정합니다.

cryptsetup luksOpen /root/test1 volume1

암호를 해독하는 데 필요한 파일에 대해 설정한 암호를 제공해야 합니다.

이렇게 하면 LUKS 장치가 열리고 우리가 제공하는 이름에 매핑됩니다. 이 경우 /dev/mapper/volume1에 파일이 생성됩니다. 이렇게 하면 기본적으로 파일이 로컬 루프백 장치로 열리므로 시스템의 나머지 부분이 파일을 실제 장치인 것처럼 처리할 수 있습니다.

파일 시스템 생성 및 마운트

이제 LUKS 컨테이너가 생성되었고 시스템에서 일반 장치로 열렸으므로 일반 장치 작업을 시작할 수 있습니다.

먼저 장치에서 파일 시스템을 포맷하고 생성해야 합니다. 원하는 파일 시스템을 선택할 수 있습니다. 표준 Ext4 파일 시스템을 사용하지만 서버가 정상적으로 처리하도록 구성된 모든 파일 시스템을 사용할 수 있습니다.

우리의 목적을 위해 사용하려는 명령은 다음과 같습니다.

mkfs.ext4 -j /dev/mapper/volume1

이제 파일에 포함된 LUKS 컨테이너 위에 작성된 파일 시스템이 있습니다. 장치처럼 처리되므로 다음 단계는 논리적으로 장치를 마운트하는 것입니다.

이해하기 쉬운 마운트 위치를 만들어 봅시다.

mkdir /mnt/files

이제 파일 시스템을 마운트하기만 하면 됩니다.

mount /dev/mapper/volume1 /mnt/files

이제 사용 가능한 파일 시스템의 일부로 파일을 볼 수 있습니다.

df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/vda              59G  2.7G   54G   5% /
udev                 2.0G   12K  2.0G   1% /dev
tmpfs                791M  216K  791M   1% /run
none                 5.0M     0  5.0M   0% /run/lock
none                 2.0G     0  2.0G   0% /run/shm
/dev/mapper/volume1  486M  2.3M  459M   1% /mnt/files

암호화 오버헤드와 파일 시스템 오버헤드가 파일에서 사용 가능한 공간 중 일부를 차지한 것을 볼 수 있습니다. 그래도 우리는 여전히 대부분의 공간을 가지고 있습니다.

파일을 마운트한 위치를 확인하면 다른 Ext4 파일 시스템과 똑같이 프로비저닝되었음을 알 수 있습니다.

cd /mnt/files
ls
lost+found

일반 lost+found 복구 디렉터리가 생성되었습니다. 이제 이 위치에 데이터를 쓸 수 있으며 파일에 저장되고 암호화됩니다. 예를 들어 /etc 디렉토리를 가져와 마운트 위치에 복사할 수 있습니다.

cp -r /etc/* /mnt/files

파일 시스템 마운트 해제 및 LUKS 컨테이너 닫기

데이터 쓰기 또는 읽기가 완료되면 일반적인 방법을 사용하여 파일 시스템을 마운트 해제합니다.

cd
umount /mnt/files

이렇게 하면 /mnt/files의 마운트 지점에서 /dev/mapper/volume1 위치가 분리됩니다.

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  2.7G   54G   5% /
udev            2.0G   12K  2.0G   1% /dev
tmpfs           791M  216K  791M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm

그러나 파일은 여전히 열려 있고 시스템에서 /dev/mapper/volume1로 사용할 수 있습니다.

ls /dev/mapper/
control  volume1

제어 장치는 다른 매핑된 장치를 만드는 데 사용되는 장치입니다. 여기에 있어야 하므로 무시해도 됩니다.

volume1 파일을 닫고 내용을 보호하려면 기본적으로 파일에서 장치 매핑을 제거하여 파일을 닫아야 합니다. 즉, 암호를 다시 입력할 때까지 더 이상 파일 내용에 액세스할 수 없습니다.

cryptsetup luksClose volume1

장치 매핑 디렉터리를 확인하면 volume1 장치가 제거된 것을 볼 수 있습니다.

ls /dev/mapper
control

이제 볼륨이 마운트 해제되고 LUKS 컨테이너가 닫히며 데이터가 완전히 암호화되어 암호로 보호됩니다.

간단한 사용 절차

초기 생성 절차와 일일 사용을 분리하기 위해 파일을 사용하는 데 필요한 프로세스를 빠르게 실행합니다.

이제 LUKS 파일이 있으므로 사용하고 싶을 때 간단히 LUKS 파일을 열 수 있습니다.

cryptsetup luksOpen /root/test1 volume1

여기에서 처음 사용한 이름과 다른 이름을 선택할 수 있습니다. 파일이 열려 있는 동안에만 중요합니다. 볼륨의 암호를 입력합니다.

그런 다음 매핑된 장치를 마운트합니다.

mount /dev/mapper/volume1 /mnt/files

이제 파일 내용에 액세스하고 읽거나 쓸 수 있습니다.

완료되면 기기를 다시 마운트 해제해야 합니다.

umount /mnt/files

장치가 마운트 해제되면 LUKS 파일을 다시 닫아 데이터를 암호화할 수 있습니다.

cryptsetup luksClose volume1

결론

이제 중요한 데이터를 저장하기 위해 암호화된 파일을 생성할 수 있습니다. 성능과 사용 편의성 및 보안 사이에는 종종 상충 관계가 있음을 기억하십시오. 또한, 설정한 비밀번호는 절대 복구할 수 없으므로 절대 잃어버리지 않도록 유의하시기 바랍니다.

이것이 데이터를 보호하는 데 필요한 유일한 고려 사항은 아니지만 Linux 서버의 보안을 강화하기 위해 도구 상자에 이것을 추가할 수 있기를 바랍니다.

저스틴 엘링우드