lsblk
♣ 도움받은 사이트
https://sacstory.tistory.com/entry/%ED%95%98%EB%93%9C-%EC%B6%94%EA%B0%80%EC%8B%9C
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 로 설정하여
데이터 저장 시 암호화를 적용한다.
'삽질미학 > Linux' 카테고리의 다른 글
Docker Redmine 설치 및 외부 MariaDB와의 연동 (0) | 2024.01.24 |
---|---|
VirtualBox IP 설정 - NAT, 호스트 전용 어댑터 조합 (4) | 2024.01.23 |
Ubuntu Server에 HPE SSA 설치하기 (0) | 2021.11.06 |
Ubuntu 18 에 Docker 설치하기 (0) | 2020.03.28 |
팀원용 Samba 설정 및 관리하기 (0) | 2020.03.13 |