2 분 소요

서버에 저장된 민감한 데이터를 보호하기 위해서는 운영체제 수준의 접근 제어 외에도 물리적 디스크 도난에 대비한 암호화가 필요합니다. LUKS는 리눅스 표준 디스크 암호화 기술로, cryptsetup 도구를 통해 관리합니다.

서버 하드웨어 이미지

LUKS로 암호화된 디스크가 장착된 서버

LUKS 기본 개념

LUKS는 블록 디바이스 전체를 암호화하며, 최대 8개의 키슬롯을 지원합니다. AES-256-XTS 알고리즘이 기본으로 사용되며, 패스프레이즈, 키파일, 하드웨어 토큰 등 다양한 인증 방식을 지원합니다.

cryptsetup 설치

# 대부분의 배포판에 기본 설치되어 있음
which cryptsetup

# 없다면 설치
dnf install cryptsetup -y        # RHEL 계열
apt install cryptsetup -y        # Debian 계열

새 파티션 암호화

파티션 준비 및 LUKS 초기화

# 사용할 디스크/파티션 확인
lsblk
fdisk -l /dev/sdb

# 파티션 생성 (이미 있으면 생략)
fdisk /dev/sdb
# n → p → 1 → 기본값 → 기본값 → w

# LUKS 포맷 (기존 데이터 모두 삭제됨!)
cryptsetup luksFormat /dev/sdb1

# 암호화 옵션 명시
cryptsetup luksFormat \
  --type luks2 \
  --cipher aes-xts-plain64 \
  --key-size 512 \
  --hash sha256 \
  /dev/sdb1

암호화 파티션 열기

# 암호화 파티션을 /dev/mapper/secure-data 로 매핑
cryptsetup luksOpen /dev/sdb1 secure-data

# 매핑된 디바이스 확인
ls -la /dev/mapper/secure-data

# 파일 시스템 생성
mkfs.ext4 /dev/mapper/secure-data

마운트 및 사용

# 마운트 포인트 생성
mkdir -p /mnt/secure

# 마운트
mount /dev/mapper/secure-data /mnt/secure

# 사용 후 언마운트 및 잠금
umount /mnt/secure
cryptsetup luksClose secure-data

키슬롯 관리

# 현재 키슬롯 상태 확인
cryptsetup luksDump /dev/sdb1

# 추가 패스프레이즈 등록 (백업용)
cryptsetup luksAddKey /dev/sdb1

# 키파일로 인증
dd if=/dev/urandom bs=512 count=4 of=/root/luks-keyfile
chmod 400 /root/luks-keyfile
cryptsetup luksAddKey /dev/sdb1 /root/luks-keyfile

# 특정 키슬롯 삭제
cryptsetup luksKillSlot /dev/sdb1 1

보안 코드 이미지

LUKS 암호화 설정 및 키 관리 화면

부팅 시 자동 마운트

# /etc/crypttab 설정
# 형식: 이름  장치  키파일  옵션
echo "secure-data  /dev/sdb1  none  luks" >> /etc/crypttab

# 키파일 사용 시
echo "secure-data  /dev/sdb1  /root/luks-keyfile  luks" >> /etc/crypttab

# /etc/fstab 에 마운트 설정 추가
echo "/dev/mapper/secure-data  /mnt/secure  ext4  defaults  0  2" >> /etc/fstab

# 설정 검증
systemctl daemon-reload
systemctl start systemd-cryptsetup@secure-data

LUKS 헤더 백업

LUKS 헤더가 손상되면 복호화가 불가능합니다. 반드시 백업하세요.

# 헤더 백업
cryptsetup luksHeaderBackup /dev/sdb1 \
  --header-backup-file /root/luks-header-backup.img

# 헤더 복원 (손상 시)
cryptsetup luksHeaderRestore /dev/sdb1 \
  --header-backup-file /root/luks-header-backup.img

# 백업 파일은 암호화된 안전한 위치에 보관

암호화 정보 확인

# 디바이스 상태 확인
cryptsetup status secure-data

# LUKS 상세 정보
cryptsetup luksDump /dev/sdb1

# 암호화된 파티션 여부 확인
cryptsetup isLuks /dev/sdb1 && echo "LUKS 장치" || echo "일반 장치"

전체 디스크 암호화와 데이터 디스크 암호화

구분 전체 디스크 암호화 데이터 파티션 암호화
적용 시점 OS 설치 중 운영 중 추가 가능
보호 범위 OS 포함 전체 특정 파티션만
자동 마운트 부트로더 패스프레이즈 필요 crypttab 활용
관리 복잡도 높음 낮음

LUKS 암호화는 데이터 보안의 마지막 방어선입니다. 패스프레이즈와 헤더 백업을 반드시 안전한 위치에 보관하고, 정기적으로 복호화 테스트를 수행하여 백업의 유효성을 검증하는 것을 권장합니다.

댓글남기기