기술 가이드

dm-crypt와 LUKS로 (X)Ubuntu Feisty에서 디스크 전체 암호화하는 방법

5 min read 보안 업데이트됨 23 Sep 2025
Xubuntu Feisty에서 dm-crypt·LUKS로 디스크 암호화
Xubuntu Feisty에서 dm-crypt·LUKS로 디스크 암호화

소개

동기

오늘날 보안은 일상에서 매우 중요한 부분입니다. 그중 하나가 컴퓨터 및 저장된 데이터의 보호입니다. 이 문서는 (X)Ubuntu Feisty 환경에서 dm-crypt와 LUKS를 사용해 전체 디스크 또는 파티션을 암호화하는 방법을 설명합니다.

이 문서는 여러 출처를 종합해 정리한 것입니다.

경고

이 튜토리얼은 대상 하드디스크의 모든 데이터를 삭제합니다. 어떤 디스크에 명령을 실행하는지 반드시 확인하세요. 시스템이 설치된 루트 디스크를 실수로 암호화하지 마십시오. 기본 목적은 데이터 저장용으로 추가 연결한 디스크를 암호화하는 것입니다.

법적 고려사항

다단계 암호화(예: TrueCrypt/Veracrypt의 숨김 볼륨)는 ‘그럴듯한 부인’을 어느 정도 제공하지만, 법적 상황과 지역에 따라 효과는 달라집니다. 유럽 인권 조약을 비준한 국가에 거주한다면 묵비권 등 기본권이 적용될 수 있지만, 각 사건과 관할권에 따라 결론이 달라질 수 있습니다. 이 문서의 법적 설명은 일반적인 이해를 돕기 위한 것이며 법률 자문을 대신하지 않습니다.

중요: 이 문서를 따라 실행하기 전 중요한 데이터는 반드시 백업하세요.

준비사항

  • (X)Ubuntu Feisty가 설치된 시스템(또는 비슷한 구형 Debian/Ubuntu 계열)
  • 암호화하려는 추가 하드디스크 또는 파티션
  • 루트 권한 또는 sudo 권한
  • 인터넷 연결(필요 시 소프트웨어 설치)

용어 1줄 정의:

  • LUKS: Linux Unified Key Setup — 블록 장치 전체를 암호화하는 표준 포맷
  • dm-crypt: Linux 디바이스 매퍼 기반의 블록 레벨 암호화 모듈

I. 필요한 소프트웨어 설치

터미널에서 다음을 실행해 cryptsetup(과 선택적으로 hashalot)을 설치합니다:

sudo aptitude install cryptsetup hashalot

cryptsetup은 LUKS 헤더 생성 및 키 관리를 담당합니다.

II. 하드디스크 준비 — 무작위 데이터 채우기

암호화할 디스크에 랜덤 데이터를 채우면, 파티션 상에 실제 데이터가 있는지 여부를 추측하기 어렵게 만들 수 있습니다. 다음은 /dev/urandom을 사용한 예시입니다. 실행 전 HARDDISK를 정확하게 확인하세요(예: /dev/sdb).

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

대체 방법: 디스크가 SSD이거나 TRIM을 사용하면 blkdiscard로 공간을 빠르게 비우는 방법이 더 적합할 수 있습니다(데이터 회수 관점에서 달라짐).

예시 출력(원문 예시 유지):

hyper@xubi:/dev$ sudo dd if=/dev/urandom of=/dev/hda
dd: writing to `/dev/hda': No space left on device
312581809+0 records in
312581808+0 records out
160041885696 bytes (160 GB) copied, 90679.8 seconds, 1.8 MB/s

주의: 전체 디스크를 덮어쓰는 작업은 매우 오래 걸립니다. 파티션 단위로 암호화하려면 먼저 파티션을 생성한 뒤 해당 파티션을 암호화하세요.

III. 커널 모듈 로드

dm-crypt를 사용하려면 관련 커널 모듈을 로드해야 합니다.

sudo modprobe aes
sudo modprobe dm-crypt
sudo modprobe dm_mod

부팅 시 자동으로 로드하려면 /etc/modules에 항목을 추가합니다:

sudo nano /etc/modules

파일 끝에 다음을 추가하세요:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
fuse
lp
aes
dm-crypt
dm_mod

fuse와 lp는 시스템에 따라 기본으로 있을 수 있습니다. 변경 후 Ctrl+X로 저장합니다.

IV. 암호화 파티션 생성

이제 LUKS 헤더를 생성합니다. HARDDISK를 대상 디스크 또는 파티션으로 바꿔 실행하세요(예: /dev/sdb1).

sudo cryptsetup luksFormat /dev/HARDDISK

명령은 경고를 출력하고, 암호를 묻습니다. 강력한 암호를 설정하세요. 나중에 추가 키를 더 등록할 수 있습니다.

팁: LUKS 헤더는 매우 중요합니다. 헤더가 손상되면 복구가 불가능할 수 있으니 백업(예: luksHeaderBackup)을 고려하세요.

V. 암호화 파티션 매핑

LUKS 컨테이너를 열어 장치 매핑을 만듭니다.

sudo cryptsetup luksOpen /dev/HARDDISK DEVICENAME

이제 장치는 /dev/mapper/DEVICENAME으로 접근할 수 있습니다.

VI. 암호화된 장치에 파일시스템 생성

매핑된 장치에 파일시스템을 만듭니다. 예시는 ext3입니다. 필요에 따라 ext4 또는 xfs를 사용하세요.

sudo mkfs.ext3 /dev/mapper/DEVICENAME

파일시스템 옵션과 마운트 성능, 저널링 특성 등을 고려해 적절한 타입을 선택하세요.

VII. 파티션 마운트

마운트 지점을 생성하고 장치를 마운트합니다.

sudo mkdir /media/DEVICENAME
sudo mount /dev/mapper/DEVICENAME /media/DEVICENAME

나중에 수동으로 다시 마운트하려면 먼저 luksOpen으로 매핑을 열고 mount를 실행하면 됩니다.

sudo cryptsetup luksOpen /dev/HARDDISK DEVICENAME
sudo mount /dev/mapper/DEVICENAME /media/DEVICENAME

VIII. 부팅 시 자동 마운트 설정

부팅 시 LUKS 컨테이너를 열려면 /etc/crypttab에 항목을 추가하세요. 예:

DEVICENAME  /dev/HARDDISK   none    luks,check=ext2,retry=5

그리고 /etc/fstab에 매핑된 디바이스를 추가합니다. 장치명 대신 UUID를 사용하는 것이 안전합니다. 예:

# CryptoDevices
/dev/mapper/DEVICENAME  /media/DEVICENAME   auto    defaults    0   0

부팅 중 암호를 묻는 프롬프트가 나타나며 retry=5는 최대 5회 입력을 허용합니다. 암호 입력 실패 시 해당 드라이브는 마운트되지 않고 시스템은 계속 부팅됩니다.

권장: /etc/crypttab에 디스크를 UUID로 지정하려면 lsblk -f 또는 blkid로 UUID를 확인하세요.

IX. 키 추가/삭제

LUKS는 여러 키 슬롯을 지원하므로 추가 암호(또는 키 파일)를 등록할 수 있습니다.

키 추가:

sudo cryptsetup luksAddKey /dev/HARDDISK

키 삭제(기존 키를 입력해야 할 수 있음):

sudo cryptsetup luksDelKey /dev/HARDDISK

키 슬롯 수: LUKS(특히 LUKS1)는 일반적으로 8개의 키 슬롯을 제공합니다.

X. 언마운트 및 매핑 닫기

단순히 파일시스템을 언마운트하는 것만으로는 매핑이 제거되지 않을 수 있습니다. 매핑이 남아있으면 해당 블록 장치에 접근 가능한 권한을 가진 사용자는 디바이스 접근이 가능합니다. 안전하게 닫으려면:

sudo umount /media/DEVICENAME && sudo cryptsetup luksClose DEVICENAME

스크립트 예제:

#!/bin/bash
sudo umount /media/DEVICENAME && sudo cryptsetup luksClose DEVICENAME

스크립트에 실행 권한 부여:

sudo chmod a+x ~/umount.sh

런처 아이콘(데스크탑 환경용)으로 연결하면 편리합니다.

Xfce에서 언마운트 스크립트 실행기 아이콘

XI. 문제 해결 및 체크리스트

  • 디스크 장치 식별 오류: lsblk, fdisk -l, blkid로 정확한 장치를 확인하세요.
  • cryptsetup 실패: LUKS 헤더가 이미 존재하거나 권한 문제일 수 있습니다. sudo로 실행하세요.
  • 부팅 시 암호 프롬프트가 보이지 않음: initramfs나 부트로더 설정에 따라 인터랙티브 입력이 불가능할 수 있습니다. 시스템 콘솔 또는 복구 모드로 확인하세요.
  • 언마운트 안 되는 경우: lsof 또는 fuser로 어떤 프로세스가 파일시스템을 사용 중인지 확인하고 종료합니다.

간단한 점검 순서:

  1. 장치 확인: lsblk
  2. 매핑 확인: sudo dmsetup ls
  3. 마운트 확인: mount | grep DEVICENAME
  4. 로그 확인: sudo dmesg | tail

XII. 보안 강화를 위한 권장 사항

  • 강력한 암호 사용과 키 파일은 안전한 장소에 보관하세요.
  • LUKS 헤더 백업: luksHeaderBackup으로 헤더를 외부 안전 매체에 저장하면 헤더 손상 시 복구 가능.
sudo cryptsetup luksHeaderBackup /dev/HARDDISK --header-backup-file /root/HARDDISK-header.img
  • LUKS 버전 선택: LUKS2는 Argon2 같은 현대적 KDF를 지원하므로 가능하면 최신 도구/배포판에서 사용하세요. Feisty 시절의 cryptsetup은 LUKS1이 기본일 가능성이 높습니다.
  • 키 슬롯 관리: 사용하지 않는 키는 제거하고 정기적으로 키를 교환(rotating)하세요.
  • 파일시스템 암호화만으로는 메타데이터(예: 파티션 크기, 사용 패턴)가 드러날 수 있습니다. 민감한 사용자는 전체 디스크 덮어쓰기와 함께 크기 관리를 고려하세요.
  • SSD와 TRIM: TRIM이 활성화된 SSD에선 블록 수준의 완전한 삭제가 보장되지 않으므로 주의하세요.

XIII. 대안과 고려할 점

대안:

  • VeraCrypt(또는 TrueCrypt 계열): 숨김 볼륨을 제공해 그럴듯한 부인을 일부 지원.
  • 파일 레벨 암호화: eCryptfs, fscrypt — 홈 디렉터리 등 특정 경로만 암호화하는 경우 적합.
  • LUKS + LVM: LVM 위에 암호화 계층이나 암호화된 볼륨 위에 LVM을 구성해 유연한 볼륨 관리 가능.

언제 이 방법이 적합하지 않은가:

  • 단일 파일만 암호화하려는 경우 블록 장치 암호화는 과도한 선택일 수 있음.
  • 법적 환경에서 키 공개 의무가 있는 경우 암호화가 법적 방어에 도움이 되지 않을 수 있음.

XIV. 언제 실패하는가(한계)

  • LUKS 헤더 손상: 헤더를 백업해 두지 않으면 데이터 복구가 매우 어려움.
  • 물리적 접근을 통해 하드웨어 수준에서 장치를 제거해 공격자가 전문 장비로 데이터 복구를 시도할 수 있음(특히 암호화 이전 데이터가 남아있다면 더 위험).
  • 시스템 취약점이나 루트 권한을 이미 탈취한 공격자는 메모리에 남아있는 암호나 이미 열린 매핑을 통해 접근할 수 있음.

XV. 역할 기반 체크리스트

시스템 관리자 체크리스트:

  • 대상 디스크 정확히 식별(예: /dev/sdb)
  • 중요한 데이터 별도 백업
  • cryptsetup 설치 및 버전 확인
  • LUKS 헤더 백업 계획 수립
  • 부팅 시 암호 프롬프트 작동 확인

일반 사용자 체크리스트:

  • 암호 안전하게 보관(관리자에 전달 금지)
  • 자동 마운트 설정 여부 확인
  • 언마운트/닫기 절차 숙지

XVI. 간단 테스트 케이스(수용 기준)

  • 암호화된 파티션을 생성한 뒤 올바른 암호로 매핑 열기 가능
  • /dev/mapper/DEVICENAME에 파일시스템 생성 및 파일 읽기/쓰기 가능
  • 언마운트 후 dmsetup ls에 매핑이 없는지 확인
  • 부팅 시 암호 입력으로 자동 마운트되는지 확인

XVII. 용어집(한 줄)

  • LUKS: 블록 장치 전체 암호화를 위한 표준 컨테이너 포맷.
  • dm-crypt: Linux 디바이스 매퍼의 암호화 백엔드.
  • cryptsetup: LUKS 헤더 생성과 키 관리를 수행하는 도구.
  • keyslot: LUKS가 키(암호)를 저장하는 슬롯(일반적으로 8개).

XVIII. 요약

  • dm-crypt와 LUKS로 디스크를 암호화하면 블록 단위로 데이터를 보호할 수 있습니다.
  • 전체 절차: 준비 → 모듈 로드 → LUKS 초기화 → 매핑 → 파일시스템 생성 → 마운트 → 자동 마운트 설정 → 키 관리 → 안전한 언마운트.
  • 주의: 작업 전 백업, LUKS 헤더 백업, 키 관리, 부팅 시 암호 프롬프트 확인을 반드시 수행하세요.

중요: 이 문서는 실무 환경에서의 일반적 가이드를 제공하지만, 각 환경의 특성(하드웨어, 배포판 버전, 법적 요건)에 따라 조정이 필요합니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Steam이 열리지 않을 때 해결 방법 가이드
트러블슈팅

Steam이 열리지 않을 때 해결 방법 가이드

Windows에서 페이지파일 크기와 위치 안전하게 변경하기
Windows 설정

Windows에서 페이지파일 크기와 위치 안전하게 변경하기

Mac에서 삭제된 이메일 복구하는 7가지 방법
데이터 복구

Mac에서 삭제된 이메일 복구하는 7가지 방법

Xubuntu Feisty에서 dm-crypt·LUKS로 디스크 암호화
보안

Xubuntu Feisty에서 dm-crypt·LUKS로 디스크 암호화

YouTube 검색 기록 확인 및 삭제 방법
프라이버시

YouTube 검색 기록 확인 및 삭제 방법

엑셀 INDEX + XMATCH로 2차원 조회하기
엑셀

엑셀 INDEX + XMATCH로 2차원 조회하기