lsblk

♣ 도움받은 사이트

https://sacstory.tistory.com/entry/%ED%95%98%EB%93%9C-%EC%B6%94%EA%B0%80%EC%8B%9C

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/security_hardening/encrypting-block-devices-using-luks_security-hardening

https://blog.tinned-software.net/automount-a-luks-encrypted-volume-on-system-start/

https://ko.linux-console.net/?p=10366

https://ko.linux-console.net/?p=439

https://ko.linux-console.net/?p=9102

 

갑님께서 생산용 서버의 Disk or File System 에

Encryption 을 적용해 달라고 요청을 했다.

 

처음 해보는 작업이라 여분의 서버에 1TB 짜리 HDD 하나 꽂고

우분투만 6번을 설치하고 수십번의 재부팅 끝에 아래처럼 정리해 본다.

 

♣ 목적

================================================

Ubuntu Server (22.04) 의 Data 영역을  LUKS 로 암호화한다.

윈도우에서 C에는 프로그램만, D에는 데이터를 저장하는데

D 드라이브만 암호화하는 것과 같다.

================================================

(Linux 초급 영역은 아닌지라 설명이 불친절할 수 있으며 나도 헷갈리는 부분의 용어, 개념 등이 틀릴 수 있다.)

 

♣ 파티션 전체에 LUKS 적용하기

이미 설치된 Ubuntu 전체에 적용할 수도 있으나 절차가 복잡하였다.

Ubuntu 설치 시, 아래처럼 파티션에 LUKS 를 적용하는 옵션이 있었다.

위와 같이 심플하게 전체 영역에 LUKS 를 적용할 수 있다.

이 후, 하위에 생성되는 볼륨은 자동으로 LUKS 가 적용된다.

 

♣ 특정 볼륨에 LUKS 적용하기

Ubuntu 설치 시, LUKS 를 적용하지 않는 케이스이다.

단, LVM 은 적용한다. (위 이미지에서 Set up this disk as an LVM group )

 

저 항목을 선택하면 자동으로 아래처럼 파티션이 설정된다.

보면 1TB 중 100GB 만 할당된다.

프로그램 등을 설치하면 이 100GB 영역에 설치될 것이다.

나는 Ubuntu 설치 후, 나머지 900GB 를 LUKS 로 암호화하고 Data 영역으로 사용할 예정이다.

 

♣ 볼륨 생성 후, LUKS 암호화 적용

Ubuntu 설치 후,

lsblk

하면 아래처럼 100GB 파티션만 표시된다.

이에 나머지 영역에 추가로 볼륨을 생성해 준다.

sudo lvcreate -l 100%FREE -n cryptdata-lv ubuntu-vg

아래처럼 ubuntu-vg 라는 Volume Group 에 cryptdata-lv 라는 Logical Volume 이 생성되었다.

이 볼륨을 LUKS 로 포멧시킨다.

LUKS 는 모두 cryptsetup 명령어로 수행된다. Ubuntu Server 22의 경우, 기본으로 설치되어 있다.

(luksFormat 에서 대문자 주의)

sudo cryptsetup luksFormat /dev/ubuntu-vg/cryptdata-lv

정말 Format할지 물어보는데 대문자로 "YES" 를 입력한다.

이 후, 본 암호화볼륨을 사용하기 위한 패스워드를 설정해준다. (까먹으면 ㅈ된다.)

 

♣ 암호화 볼륨에 접근하기 위한 매핑네임 생성

위 cryptdata-lv 볼륨은 LUKS로 암호화되어 있으므로 바로 사용할 수 없다.

이에 매핑네임을 생성해 준다.

매핑네임은 내가 붙인 이름이다. 본명 볼륨은 아니고, man 을 봐도 그냥 name 으로 되어 있다.

 

위에서 생성한 암호화된 볼륨 cryptdata-lv 에 mesdata 란 매핑네임을 생성해 주었다.

sudo cryptsetup luksOpen /dev/ubuntu-vg/cryptdata-lv mesdata

암호화 볼륨에 접근하기 위한 패스워드를 물어보며 위에서 설정한 패스워드를 입력한다.

이렇게 생성하면 /dev/mapper/mesdata 가 생성된다.

이놈을 원하는 file format 에 맞게 포멧해 준다. 난 xfs 로 포멧하였다.

sudo mkfs.xfs /dev/mapper/mesdata

lsblk 로 확인해 보면, 하위에 뭔가 생성된 것이 보인다.

즉, LUKS 매핑네임 mesdata 는 암호화된 볼륨에 접근하기 위한 통로로 여기면 얼추 맞을 듯 하다.

 

♣ 암호화 영역 mount

이제 위에서 생성한 암호화 영역을 사용하기 위해 특정 디렉토리로 마운트한다.

나는 임의로 루트에 mesData 란 디렉토리를 생성했다.

sudo mkdir /mesData

그리고 위 mesdata 매핑네임을 마운트한다.

sudo mount /dev/mapper/mesdata /mesData

이상없으면 아래처럼 매핑네임이 /mesData 디렉토리로 성공적으로 마운트됐음을 확인할 수 있다.

이제 마운트된 /mesData 에 데이터를 저장하면 데이터는 암호화되어 하드디스크에 저장된다.

누군가 악의를 품고 하드디스크를 훔쳐서 읽으려 해도 암호화되어 있으므로 읽을 수 없다.

 

이 상태에서 재부팅하면, 아래 상태로 돌아간다.

그러면 다시 매핑 네임 생성해주고 -> 비밀번호 입력하고 -> 마운트 후, 사용하면 된다.

 

♣ 부팅 시, 자동 매핑네임 생성 (패스워드 입력모드)

재부팅할 때마다 위와 같이 매번 매핑네임을 생성하는 것은 비효율적이다.

/etc/crypttab 파일을 수정하여 부팅 시, 매핑네임을 생성할 수 있다.

 

1. 우선, 암호화된 볼륨의 UUID 를 얻는다.

cryptdata-lv 에 본인이 생성한 볼륨명을 적어준다.

sudo cryptsetup luksUUID /dev/ubuntu-vg/cryptdata-lv

 

2. /etc/crypttab 파일을 수정한다.

아마도 위 절차를 거쳤으면 /etc/crypttab 파일이 있을 것이다.

여기에, 본인이 생성할 매핑네임, 위 1번에서 얻은 UUID, none, luks 를 적어준다.

아래는 예시이다. UUID= 부분에 주의한다.

mesdata UUID=6c2a7380-9214-4245-a946-29275f58e5d4 none luks

3. 위와 같이 저장하고 재부팅하면 부팅할 때 암호화 볼륨의 패스워드를 물어본다.

입력 후, lsblk 하면 매핑네임이 생성된 것을 확인할 수 있다.

 

4. 이 후, 디렉토리에 마운트하여 사용한다. (자동 마운트는 저 아래에서~ )

 

♣ 부팅 시, 자동 매핑네임 생성 (키 파일 등록모드)

위와 같이 부팅 시, 패스워드를 입력하는 것이 좀 더 강력한 보안이 될 수 있다.

그러나 주어진 환경이 여의치 않을 수 있다.

 

필자는 서버가 베트남 공장에 설치되어 원격으로 작업을 진행한다.

그런데 공장 사정으로 서버를 재부팅할 일이 생기면, 그 때마다 서버 관리자는

원격으로 접속하여 암호화 볼륨의 패스워드를 입력해야 한다.

만약 입력할 수 없는 상황이면, 최악의 경우 생산 라인이 스톱된다.

 

이에 패스워드 입력 없이 매핑네임을 생성하는 방법을 기술한다.

 

1. 키 생성

특정 양식이 있는 것이 아니라 아무 파일이나 된다.

다른 사이트를 살펴봐도 랜덤하게 키를 생성하는 것을 볼 수 있다.

아래는 4k 짜리 랜덤한 파일을 생성하는 명령어이다.

dd if=/dev/urandom of=./keyfile bs=1024 count=4

 

2. 파일을 /etc 밑으로 옮긴다. (꼭 etc 아니어도 상관 없다.)

sudo mv keyfile /etc

 

3. 해당 키를 암호화 블록에 등록한다. (패스워드 입력 필요)

sudo cryptsetup luksAddKey /dev/ubuntu-vg/cryptdata-lv /etc/keyfile

 

아래처럼 키 등록이 됐는지 체크할 수 있다.

sudo cryptsetup luksDump /dev/ubuntu-vg/cryptdata-lv

 

4. crypttab 파일에 키를 기재한다.

/etc/crypttab 파일의 none 위치에 키 위치를 적어준다.

5. 재부팅 후, lsblk 로 매핑네임이 생성됐는지 확인한다.

 

♣ 디렉토리에 자동 마운트

서브 주제이기에 간단히 다룬다. /etc/fstab 을 열어 아래처럼 추가해주고 재부팅하면

매핑네임 mesdata 가 디렉토리 mesData 에 마운트된다.

/dev/mapper/mesdata /mesData xfs defaults 0 0

 

♣ 데이터 저장위치 변경

이 후, 주요 데이터가 저장되는 위치를 /mesData 로 설정하여

데이터 저장 시 암호화를 적용한다.

 

 

 

 

+ Recent posts