LUKS 전체 디스크 암호화: Linux 서버 설정 가이드

15분 소요 - 2026년 6월 5일

hero section cover
목차
  • LUKS 전체 디스크 암호화 서버 가이드
  • 왜 LUKS2인가, 그리고 가장 먼저 확인해야 할 사항
  • 디스크 레이아웃
  • LVM을 사용한 LUKS 설정
  • 키 관리 및 원격 잠금 해제
  • 보안 강화 및 잠금 방지
공유

LUKS2 설정, LVM 레이아웃, 키 관리, Tang 및 TPM을 사용한 원격 잠금 해제, 강화 등을 포함하는 Linux 서버용 LUKS 전체 디스크 암호화입니다.

LUKS 전체 디스크 암호화 서버 가이드

LUKS(Linux Unified Key Setup)는 전체 Linux 블록 장치를 암호화하여 마스터 키 없이는 내용을 읽을 수 없게 합니다. 도난당한 드라이브, 폐기된 섀시, 잊혀진 백업 디스크: LUKS가 올바르게 설정되어 있다면 이러한 상황에서도 데이터가 노출되지 않습니다. 이 게시물에서는 LVM 레이아웃, 키 관리, 원격 잠금 해제, 그리고 사용자가 자신의 데이터에 접근하지 못하게 되는 장애 모드를 포함하여 서버에 LUKS 전체 디스크 암호화를 배포하는 방법을 다룹니다.

여기서 참조하는 구현은 CPU에 AES-NI가 탑재된 리눅스 서버에서, 암호화된 컨테이너 내에 LVM을 사용하는 LUKS2입니다. 이 조합은 모든 최신 워크로드를 처리할 수 있고 성능이 우수하며, HIPAA, PCI-DSS, GDPR 및 SOC 2의 저장 중 데이터(data-at-rest) 요구 사항을 충족합니다.

왜 LUKS2인가, 그리고 가장 먼저 확인해야 할 사항

LUKS는 dm-crypt를 사용하여 블록 장치 계층에서 암호화하며, 마스터 키는 LUKS 헤더 내의 키 슬롯에 저장됩니다. 이러한 분리는 중요합니다. 디스크를 다시 암호화하지 않고도 암호 문구를 변경하거나 새 키를 추가할 수 있기 때문입니다.

LUKS2가 현재 기본값입니다. 최대 32개의 키 슬롯, JSON 형식의 메타데이터, 온라인 재암호화, 그리고 --integrity 플래그를 통한 인증된 암호화를 지원합니다. LUKS1은 8개의 키 슬롯을 지원하며 구형 시스템에서는 문제없지만, 새로운 배포 환경에서는 LUKS2로 시작해야 합니다.

최신 하드웨어에서 AES-NI 사용 시 성능 오버헤드는 보통 5% 미만입니다. 시작하기 전에 다음을 확인하십시오:

grep -o aes /proc/cpuinfo | head -1
cryptsetup benchmark

다음 명령어가 grep 아무것도 반환하지 않는다면, 해당 CPU에는 AES-NI가 없으며, I/O 부하가 높을 때 암호화가 CPU에 의존하게 됩니다. cryptsetup benchmark 명령어는 암호별 처리량을 표시하므로, 하드웨어가 지원하는 것 중 가장 빠른 것을 선택할 수 있습니다. 또한 cryptsetup이 설치되어 있는지, 그리고 dm-crypt 커널 모듈이 사용 가능한지 확인하십시오. 이 둘은 Ubuntu, Debian, RHELArch에서 기본적으로 제공됩니다.

디스크 레이아웃

두 개의 파티션은 암호화되지 않은 상태로 유지됩니다: EFI 시스템 파티션(512MB FAT32)과 /boot (1~2 GB, ext4 또는 xfs)입니다. GRUB은 암호 문구를 요청하기 전에 이 두 파티션을 모두 읽어야 합니다. 그 외 모든 것은 LUKS 컨테이너 내에 위치합니다.

권장 레이아웃은 LUKS 내부의 LVM입니다. 즉, 하나의 LUKS 컨테이너가 LVM 볼륨 그룹을 포함하고, 루트, 스왑 및 모든 데이터 파티션을 위한 논리 볼륨을 포함하는 방식입니다. 이렇게 하면 LVM 메타데이터가 암호화된 상태로 유지되며, LUKS 계층을 건드리지 않고도 볼륨의 크기를 조정하거나 스냅샷을 생성할 수 있습니다. LUKS-on-LVM도 작동하지만, 이 경우 볼륨 그룹 구조가 노출됩니다.

파티션크기파일 시스템암호화
EFI 시스템512MB ~ 1GBFAT32아니요
/boot1~2 GBext4 / xfs아니요
LUKS 컨테이너남은 공간LUKS2
LVM 루트20~100GB+ext4 / xfs예 (LUKS 내부)
LVM 스왑RAM과 동일스왑예 (LUKS 내부)

ext4는 루트 볼륨에 대한 안전한 기본 설정입니다. xfs는 대용량 파일과 병렬 쓰기를 더 잘 처리하므로, 미디어, 머신 러닝 및 데이터베이스 서버에 적합합니다. SSD 및 NVMe의 경우 discard 옵션을 추가하여 /etc/crypttab TRIM을 활성화하십시오. TRIM은 사용 중인 섹터를 노출시키므로, 이는 사소한 정보 유출에 해당합니다. 대부분의 워크로드에서는 웨어 레벨링의 이점이 이를 상쇄할 만큼 가치가 있습니다. 위협 모델에 장치에 대한 포렌식 분석이 포함된다면, 이 기능을 비활성화하십시오.

LVM을 사용한 LUKS 설정

다음 명령어로 대상 디스크를 식별하고 lsblk 명령어로 대상 디스크를 식별하고 기존 메타데이터를 지웁니다:

wipefs -a /dev/sdX

선택적으로 임의의 데이터로 덮어쓰기하여 암호화된 블록이 빈 공간과 구별되지 않도록 하십시오:

dd if=/dev/urandom of=/dev/sdX bs=1M status=progress

LUKS2 컨테이너를 초기화합니다. --sector-size 4096 명령어를 사용하십시오:

cryptsetup luksFormat --type luks2 --sector-size 4096 /dev/sdX
cryptsetup luksOpen /dev/sdX cryptdata

디스크에 데이터를 저장하기 전에 즉시 헤더를 백업하십시오:

cryptsetup luksHeaderBackup /dev/sdX --header-backup-file luks-header-backup.img

잠금 해제된 컨테이너 위에 LVM을 생성한 후, 논리 볼륨을 포맷하십시오:

pvcreate /dev/mapper/cryptdata
vgcreate vg_secure /dev/mapper/cryptdata
lvcreate -L 50G -n lv_root vg_secure
lvcreate -L 8G -n lv_swap vg_secure
 
mkfs.xfs /dev/vg_secure/lv_root
mkswap /dev/vg_secure/lv_swap

다음에 항목을 추가하십시오 /etc/crypttab 재부팅 시 변경될 수 있는 /dev/sdX재부팅 시 변경될 수 있으므로, UUID를 사용하여 항목을 추가하십시오. UUID는 blkid /dev/sdX:

cryptdata UUID=<your-uuid> none luks,discard

다음 명령어로 UUID를 확인하십시오: /etc/fstab:

/dev/vg_secure/lv_root  /  xfs  defaults,noatime  0 1

부팅 시 암호화 훅이 로드되도록 initramfs를 재생성하십시오:

# Debian/Ubuntu
update-initramfs -u -k all
 
# RHEL/Fedora
dracut -f --regenerate-all

재부팅 후 암호를 입력하고 다음 명령어로 설정을 확인하십시오 cryptsetup status cryptdatalsblk -f. 후자의 경우 crypto_LUKS 가 표시되어야 합니다.

키 관리 및 원격 잠금 해제

LUKS2는 32개의 키 슬롯을 지원합니다. 처음부터 최소 세 가지를 사용하십시오: 관리자 암호, 오프라인에 저장된 복구 키(인쇄하여 잠금 장치에 보관하거나, 금고에 보관된 암호화된 USB에 저장), 그리고 보조 데이터 볼륨을 자동으로 잠금 해제하기 위한 키 파일입니다. 95개의 인쇄 가능한 ASCII 문자를 고수하십시오. 비 ASCII 문자는 부팅 프롬프트에서 키보드 레이아웃 문제를 일으키며, 이 문제를 디버그하는 것은 매우 번거롭습니다. 접근 권한이 있는 사람이 팀을 떠날 때마다 관리자 암호를 변경하십시오.

다음 명령어로 활성 슬롯을 확인하십시오: cryptsetup luksDump /dev/sdX를 사용하여 활성 슬롯을 확인하고, cryptsetup luksAddKey를 사용하여 키를 추가하고, cryptsetup luksKillSlot를 사용하여 키를 취소하십시오. 모든 키 파일은 엄격한 권한으로 보호하십시오:

chmod 0400 /etc/luks/keyfile.bin

원격 데이터 센터의 헤드리스 서버의 경우, 암호 프롬프트가 문제가 됩니다. 이를 처리하는 세 가지 방법은 다음과 같습니다:

방법가장 적합한 경우장단점
initramfs 내 DropbearSSH를 통한 수동 잠금 해제재부팅 시 여전히 사람의 개입 필요
Clevis + Tang (NBDE)신뢰할 수 있는 네트워크에서 자동 잠금 해제부팅하려면 서버가 Tang 서버에 연결되어야 함
systemd-cryptenroll을 통한 TPM2하드웨어에 종속된 자동화펌웨어 업데이트로 인해 PCR 값이 변경되어 접속이 차단될 수 있음

Dropbear는 initramfs 내에서 소형 SSH 서버를 실행합니다. 부팅 후 SSH로 접속하여 패스프레이즈를 수동으로 입력합니다. Clevis와 Tang은 네트워크 기반 디스크 암호화를 사용합니다: 서버는 신뢰할 수 있는 네트워크상의 Tang 서버에 연결될 수 있는 한 스스로 잠금을 해제합니다. Tang은 사용자의 키를 저장하지 않으며, McCallum-Relyea 교환의 절반을 제공합니다. sss pin을 통해 여러 Tang 서버를 사용하면, 한 대가 오프라인 상태여도 잠금 해제가 여전히 작동합니다. TPM 2.0 바인딩을 통해 systemd-cryptenroll 키를 PCR 7(보안 부팅 상태)에 바인딩하므로, 펌웨어와 부트로더가 변조되지 않은 경우에만 서버가 자동으로 잠금을 해제합니다. 펌웨어 업데이트 시 PCR 값이 변경될 수 있으므로, TPM을 사용할 때는 항상 패스프레이즈 키 슬롯을 대체 수단으로 유지하십시오.

보안 강화 및 잠금 방지

최소 20자 이상의 암호 구문을 사용하십시오. --integrityluksFormat 를 사용하여 인증된 암호화를 활성화하십시오. 이는 쓰기 증폭(write amplification) 비용을 수반하므로 먼저 벤치마킹을 수행하십시오.

LUKS 컨테이너를 다른 컴퓨터에 복제하지 마십시오. 볼륨 키가 함께 복사되므로, 한 호스트에서 암호를 변경해도 다른 호스트는 보호되지 않습니다. 각 디스크를 개별적으로 다시 포맷하십시오.

안전한 폐기 시, cryptsetup erase /dev/sdX 모든 키 슬롯을 밀리초 단위로 지워, 물리적으로 파기하지 않고서는 디스크를 복구할 수 없게 만듭니다. 이 사실만으로도 모든 데이터를 기본적으로 암호화해야 할 강력한 근거가 됩니다.

일반적인 오류 유형:

증상가능한 원인해결 방법
부팅 중 암호 입력 화면에서 멈춤키보드 레이아웃 불일치레이아웃을 변경하거나 복구 키를 사용하십시오
"장치가 유효한 LUKS 장치가 아닙니다"잘못된 장치 경로파티션인지 전체 디스크인지 확인하십시오 lsblk 파티션인지 전체 디스크인지 확인
부팅 시 키보드 반응 없음Initramfs 후크 순서위치 keyboard 앞에 encrypt in mkinitcpio.conf
GRUB에서 암호 입력 프롬프트가 생략됨GRUB_ENABLE_CRYPTODISK 설정되지 않음설정 GRUB_ENABLE_CRYPTODISK=y 에서 /etc/default/grub, GRUB 재설치
"루트 장치를 찾을 수 없음"누락됨 lvm2 또는 encrypt훅을 추가하고 실행 mkinitcpio -P

가장 중요한 오류 유형은 헤더 손상입니다. LUKS 헤더가 손실되거나 손상되면 데이터는 영구적으로 사라집니다. 헤더 백업에서 복원하는 것 외에는 복구 방법이 없습니다. 별도의 저장 매체에 사본을 보관하십시오. 가급적이면 두 곳에 분산하여 보관하고, 절대로 암호화된 디스크 자체에는 저장하지 마십시오. 중요도가 낮은 보조 볼륨의 경우 nofail/etc/crypttab 를 추가하여 마운트 실패 시 부팅이 중단되지 않도록 하십시오.

FDC 전용 서버는 기본적으로 AES-NI 및 전체 디스크 암호화를 지원하는 하드웨어와 함께 제공됩니다. 배포 준비가 되면 전용 서버를 구성하십시오.

background image
서버가 성장의 발목을 잡고 있나요?

느린 배포나 대역폭 제한에 지치셨나요? FDC 서버는 즉각적인 전용 성능, 글로벌 범위, 모든 규모에 맞게 구축된 유연한 요금제를 제공합니다. 업그레이드할 준비가 되셨나요?

지금 성능 활용하기

블로그

이번 주 추천

더 많은 기사
Linux 트래픽 제어(tc): 실무 가이드

Linux 트래픽 제어(tc): 실무 가이드

Tc로 Linux에서 대역폭을 제어하고, 트래픽 우선 순위를 지정하고, 수신 및 발신 형식을 지정하세요. 실제 서버에 대한 HTB, IFB, DSCP 및 fq_codel 구성 작업.

12분 소요 - 2026년 6월 5일

강력하고 계량되지 않는 VPS가 중요한 이유

7분 소요 - 2025년 5월 9일

더 많은 기사
background image

질문이 있거나 맞춤형 솔루션이 필요하신가요?

icon

유연한 옵션

icon

글로벌 도달 범위

icon

즉시 배포

icon

유연한 옵션

icon

글로벌 도달 범위

icon

즉시 배포