주:

Oracle Linux에서 LUKS를 사용하여 드라이브 암호화

소개

Oracle Linux에는 블록 장치에서 암호화를 처리하는 장치 매퍼 암호화(dm-crypt) 및 LUKS(Linux Unified Key Setup)가 포함되어 있습니다.

이 실습에서는 Linux 커널에 포함된 장치 매퍼 지원에서 dm-crypt 모듈을 활용하는 LUKS를 사용하여 장치를 암호화하는 프론트엔드 도구에 초점을 맞춥니다.

목표

요구 사항

사용 가능한 디스크가 있고 Oracle Linux에 완전히 패치가 적용된 설치 시스템입니다.

랩 환경 설정

주: 무료 실습 환경을 사용하는 경우 Oracle Linux Lab Basics에서 연결 및 기타 사용 지침을 참조하십시오.

  1. 아직 연결되지 않은 경우 터미널을 열고 ssh를 통해 ol-node01 인스턴스에 연결합니다.

    ssh oracle@<ip_address_of_instance>
    
  2. 블록 볼륨이 존재하는지 확인합니다.

    lsblk -f
    

    무료 연습 환경의 출력에는 기본 OS를 포함하는 sda 블록 장치와 이 연습에서 사용하는 sdb 블록 장치가 표시됩니다. -f 옵션을 사용하면 파일 시스템 유형(FSTYPE) 및 블록 UUID(범용 고유 식별자)가 표시됩니다.

암호화 패키지 설치

  1. 시스템에서 아직 사용할 수 없는 경우 cryptsetup 도구를 설치합니다.

    cryptsetup가 설치되어 있는지 확인합니다.

    sudo dnf list --installed cryptsetup
    

    설치되지 않은 경우 cryptsetup를 설치합니다.

    sudo dnf -y install cryptsetup
    

    주: 무료 실습 환경에는 이미 cryptsetup 툴이 설치되어 있습니다.

LUKS로 볼륨 암호화

LUKS 및 dm-crypt는 블록 장치, RAID, LVM 물리적 볼륨 및 스왑에서도 작동합니다. 암호화된 후에는 적절한 자격 증명으로만 부트 또는 마운트 시 이러한 장치의 데이터에 액세스할 수 있습니다.

무료 실습 환경에서는 이 단계에 대해 미리 분할된 디스크 /dev/sdb1를 제공합니다.

  1. 디스크를 암호화합니다.

    sudo cryptsetup -y -v luksFormat /dev/sdb1
    

    YES를 입력하여 계속하고 문장암호를 두 번 제공합니다. 문장암호는 다음을 포함해야 합니다.

    • 최소 8 문자
    • 1자리
    • 대문자 1개
    • 1개의 특수 문자
    • 비딕셔너리 기반 단어

    중요: 입력한 비밀번호는 나중에 사용되므로 기억해야 합니다.

    예제 출력:

    [oracle@ol-node01 ~]$ sudo cryptsetup -y -v luksFormat /dev/sdb1
      
    WARNING!
    ========
    This will overwrite data on /dev/sdb1 irrevocably.
      
    Are you sure? (Type 'yes' in capital letters): YES
    Enter passphrase for /dev/sdb1: 
    Verify passphrase: 
    Key slot 0 created.
    Command successful.
    
  2. 암호화된 볼륨을 엽니다.

    이 단계에는 이름을 지정할 수 있는 대상이 필요합니다. mysecrets를 사용합니다.

    sudo cryptsetup -v luksOpen /dev/sdb1 mysecrets
    

    요청 시 이전 단계에서 생성한 것과 동일한 문장암호를 입력합니다.

    예제 출력:

    [oracle@ol-node01 ~]$ sudo cryptsetup -v luksOpen /dev/sdb1 mysecrets
    Enter passphrase for /dev/sdb1: 
    Key slot 0 unlocked.
    Command successful.
    
  3. 블록 장치를 다시 확인합니다.

    lsblk -f
    

    이제 장치 /dev/sdb1에 FSTYPE이 crypto_LUKS로 표시되고 암호화된 장치 볼륨의 매핑 mysecrets가 표시됩니다.

암호화된 볼륨 포맷

암호화된 볼륨에 데이터를 추가하기 전에 형식을 지정해야 합니다. xfs, ext3, ext4 등과 같은 다양한 파일 시스템을 선택할 수 있습니다.

  1. 파일 시스템을 만듭니다.

    sudo mkfs.xfs /dev/mapper/mysecrets
    

암호화된 볼륨 마운트

  1. 마운트 지점을 만듭니다.

    sudo mkdir -p /u01/my_secret_storage
    
  2. 볼륨을 마운트합니다.

    sudo mount -v /dev/mapper/mysecrets /u01/my_secret_storage
    

    출력에는 SELinux 경고가 표시됩니다.

    예제 출력:

    [oracle@ol-node01 ~]$ sudo mount -v /dev/mapper/mysecrets /u01/my_secret_storage/
    mount: /u01/my_secret_storage does not contain SELinux labels.
           You just mounted an file system that supports labels which does not
           contain labels, onto an SELinux box. It is likely that confined
           applications will generate AVC messages and not be allowed access to
           this file system.  For more details see restorecon(8) and mount(8).
    mount: /dev/mapper/mysecrets mounted on /u01/my_secret_storage.
    

    이를 위해서는 마운트 지점의 SELinux 보안 컨텍스트에 대한 레이블을 재지정해야 합니다.

    sudo restorecon -vvRF /u01/my_secret_storage
    

    mount 명령을 다시 실행합니다.

    sudo mount -v -o remount /u01/my_secret_storage
    
  3. 마운트된 볼륨을 표시합니다.

    lsblk
    

    예제 출력:

    [oracle@ol-node01 ~]$ lsblk
    NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
    sda                  8:0    0 46.6G  0 disk  
    |-sda1               8:1    0  100M  0 part  /boot/efi
    |-sda2               8:2    0    1G  0 part  /boot
    `-sda3               8:3    0 45.5G  0 part  
      |-ocivolume-root 252:0    0 35.5G  0 lvm   /
      `-ocivolume-oled 252:1    0   10G  0 lvm   /var/oled
    sdb                  8:16   0   50G  0 disk  
    `-sdb1               8:17   0    2G  0 part  
      `-mysecrets      252:2    0    2G  0 crypt /u01/my_secret_storage
    

LUKS 볼륨 세부정보 표시

LUKS 헤더, 데이터 세그먼트, 키 슬롯 및 버전 정보를 봅니다.

  1. LUKS 세부정보를 덤프합니다.

    sudo cryptsetup luksDump /dev/sdb1
    

    예제 출력:

    LUKS header information
    Version:       	2
    Epoch:         	3
    Metadata area: 	16384 [bytes]
    Keyslots area: 	16744448 [bytes]
    UUID:          	4ccea398-5864-45a9-b274-173c8ebc3356
    Label:         	(no label)
    Subsystem:     	(no subsystem)
    Flags:       	(no flags)
      
    Data segments:
      0: crypt
    	offset: 16777216 [bytes]
    	length: (whole device)
    	cipher: aes-xts-plain64
    	sector: 512 [bytes]
      
    Keyslots:
      0: luks2
    	Key:        512 bits
    	Priority:   normal
    	Cipher:     aes-xts-plain64
    	Cipher key: 512 bits
    	PBKDF:      argon2i
    	Time cost:  10
    	Memory:     1048576
    	Threads:    4
    	Salt:       ee d2 c7 5b 05 43 0f 0a 12 60 da b5 87 19 4a 6f 
    	            06 57 a2 31 b1 dd bb 60 74 53 95 b2 ca 2f ad 4b 
    	AF stripes: 4000
    	AF hash:    sha256
    	Area offset:32768 [bytes]
    	Area length:258048 [bytes]
    	Digest ID:  0
    Tokens:
    Digests:
      0: pbkdf2
    	Hash:       sha256
    	Iterations: 243628
    	Salt:       89 6c 8b aa 37 af 58 e9 26 49 c5 e5 db 2d 54 ea 
    	            f8 7a c2 89 0e ab ed 48 74 a5 23 d7 b0 e6 9c 87 
    	Digest:     4a 2b 25 76 c5 85 1a 6c a9 28 0c ee d0 c7 76 eb 
    	            e1 4c ee 9c 5b 9a e2 d0 95 6e 1f 6e bb 1b 03 d1 
    

자세한 내용은 cryptsetup(8) 설명서 페이지, Oracle 설명서 또는 업스트림 FAQ를 참조하십시오.

추가 정보

기타 관련 리소스 참조:

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 보다 무료 학습 컨텐츠에 접근할 수 있습니다. 또한 education.oracle.com/learning-explorer을 방문하여 Oracle Learning Explorer가 됩니다.

제품 설명서는 Oracle Help Center를 참조하십시오.