디스크 암호화와 SSD 캐싱을 모두 사용하여 Ubuntu를 설치하는 방법


10

회사 환경에서 Ubuntu를 사용하고 있으며 보안 정책에 따라 전체 디스크 암호화를 사용해야합니다.

또한 32GB mSATA SSD와 750GB의 회전 녹을 가진 노트북이 있습니다. 현재 설치에서는 bcache를 사용하여 이를 활용 하고이 절차를 사용하여 설치 합니다 . 이것은 SSD를 채우는 것에 대해 걱정할 필요없이 매우 환영받는 성능 향상을 제공합니다.

이것은 어려운 질문이 될 것입니다. 현상금이 수여됩니다 :

  • Ubuntu를 새로 설치하는 명확하고 안정적인 방법
    • 모든 릴리스는 허용되지만 15.04 (생생) 괜찮습니다.
  • 전체 파일 시스템이 암호화됩니다
    • 여기서 기본 설정은 기본 유비 쿼티 설치 프로그램 (dm-crypt 암호화)에서 관련 확인란을 사용하는 것입니다.
  • 파일 시스템은 SSD에 캐시됩니다
    • 우선, 커널 dm-cache / lvmcache 메소드 는 Debian Jessie를 사용하여이 작업을 수행하는 방법을 참조 하십시오.
    • 캐시도 보호해야합니다 (예 : 암호화)
    • 캐시도 암호화되는 이유에 대한 명확한 설명이 있어야합니다

위의 데비안 제시 방법을 이미 시도했지만 부팅을 거부합니다. 지금까지 코멘트에 기술 된 방법을 시도하지 않은 여기를 .

게시 된 솔루션은 두 개의 빈 가상 디스크와 15.04 데스크톱 (amd64 릴리스)의 릴리스 사본이있는 VirtualBox VM에서 테스트됩니다. 바운티는 실제 하드웨어를 다시 설치하기 위해 채택한 첫 번째 솔루션으로갑니다.

커뮤니티 위키에 들어가는 것처럼 솔루션을 작성하십시오.


현상금을 수여했습니다. 한 번의 암호만으로도 승인 된 답변의 용이성과 장치 매퍼 구성 요소 만 사용하여 결합 된 "LUKS-on-LVM"솔루션의 가능성이 여전히 있다고 생각합니다.


내가 이해 한 바에 따르면, 캐시가 암호화되지 않기 때문에 LUKS 우분투 설치의 기본 LVM에서 lvmcache를 사용하고 싶지 않습니다.
solsTiCe

@ solsTiCe-dm-cache 위에 멋진 레이어 인 lvmcrypt가 LUKS와 조화를 이룰 수 있어야한다는 것을 이해했습니다 (LUKS는 다른 장치 매퍼 일 인 dm-crypt입니다). 주변에 물건을
Adrian

/ boot 파티션은 반드시 암호화되어 있어야한다는 것을 이해해야합니다. bcache는 Ubuntu 14.04의 grub과 호환되지 않으며 여전히 그렇습니다.
Adam Ryczkowski

@AdamRyczkowski 예, 이제 그 구성이 있습니다. 허용되지만 LUKS 구성을 선호합니다.
Adrian

LUKS가 bcache를 제외하는 이유를 모르겠습니다 ... 서로 의존하지 않으며 한 사람이 다른 사람 위에 행복하게 앉아있을 수 있습니다.
Adam Ryczkowski

답변:


7

bcache의 LUKS에 대한 LVM

여기에 러시아 인형의 게임은 좀 더 깊이 3 스택 / 레이어입니다 ...

이 질문에 대한 나의 초기 아이디어는 LUKS 에서 LVM 과 함께 기본 Ubuntu 설치를 사용하고 블록이 있는 bcache 백업 장치 로 변환하는 것이 었지만 LVM 테스트에서는 작동하지 않았습니다.

또한 우분투 설치 프로그램 ( ubiquity )은 사전에 준비된 bcache 장치 (적어도 LVM의 LUKS) 내부에 설치하기에는 너무 제한되어 있으므로 수동으로 작업하는 방법으로 대체됩니다.

라이브 CD / USB로 부팅하고 "Try Ubuntu"를 선택하고 터미널을 엽니 다

사전 설치

sudo -i
# Define some variable to avoid confusion and error
luks_part=/dev/sda3
boot=/dev/sda2                    # boot partition
caching_bcache=/dev/sdb           # SSD or partition in SSD

# Do secure erase of encrypted backing and caching device (see Notes [1])
dd if=/dev/urandom of=$luks_part || dd if=/dev/urandom of=$caching_bcache
# Go and grab some coffe, this will take a while...

apt-get install bcache-tools
# Setup bcache caching and backing devices
make-bcache -C $caching_bcache -B $luks_part
# (Optional) Tweak bcache
echo writeback > /sys/block/bcache0/bcache/cache_mode

# Below we now create manually what ubiquity should have done for us
# Setup LUKS device on bcache device
cryptsetup --key-size 512 luksFormat /dev/bcache0
cryptsetup luksOpen /dev/bcache0 crypted

# Setup LVM on LUKS
# You can skip that part if you don't want to use a swap
# or don't want to use multiple partition. Use /dev/mapper/crypted
# as you root latter on
pvcreate  /dev/mapper/crypted
vgcreate vg /dev/mapper/crypted
lvcreate -L 1G vg -n swap
lvcreate -l 100%FREE vg -n root

설치

터미널을 열어두고 설치를 실행하십시오. 파티셔닝 할 때 "다른 방법"을 선택하고

  • 부팅 파티션 ( /dev/sda2)
  • 루트 파티션 ( /dev/mapper/vg-root)
  • 스왑 ( /dev/mapper/vg-swap)

확인란을 선택 하여 파티션 을 포맷 하십시오

설치가 끝나면 재부팅하지 말고 "우분투 계속하기"를 클릭하십시오.

설치 후

열린 터미널에서

# Install bcache-tools to add bcache module to initramfs
mount /dev/mapper/vg-root /mnt
mount $boot /mnt/boot
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
mount -o bind /dev /mnt/dev
chroot /mnt
# To get apt-get running in the chroot
echo 'nameserver 8.8.8.8' > /run/resolvconf/resolv.conf
apt-get install bcache-tools

# Create /etc/crypttab to add crypted bcached partition
echo "crypted UUID=`blkid -o value /dev/bcache0|head -1` none luks" > /etc/crypttab

exit
sync
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt/boot
umount /mnt
vgchange -an /dev/mapper/crypted
cryptsetup luksClose crypted
sync

# Reboot & enjoy

Live CD / USB의 알려진 Ubuntu 15.04 재부팅 버그가 있으므로 재부팅 / 종료를 강제해야 할 수도 있습니다

검사

부팅되면 /dev/bcache0실제로 LUKS 파티션 인지 확인할 수 있습니다.

if sudo cryptsetup isLuks /dev/bcache0; then \
    echo "crypted";\
    else echo "unencrypted";\
fi

이는 LUKS 파티션의 캐시이기 때문에 장치를 통해 데이터에 액세스 /dev/bcache0하고 원래의 백업 장치 ( /dev/sda3여기서는)를 사용 하지 않기 때문입니다.

참고 문헌

http://bcache.evilpiepirate.org/

https://wiki.archlinux.org/index.php/Bcache

https://wiki.archlinux.org/index.php/Dm-crypt

bcache-status 는 아직 공식적으로 bcache-tools로 병합되지 않았습니다. 당신은 여기에 그것을 가질 수 있습니다 : https://gist.github.com/djwong/6343451

[1] 와이 핑 을 수행하는 더 좋은 방법이있을 수 있습니다


update-initramfs -uk allcrypttab 생성 후 다음 exit명령 을 실행하십시오 .
dess

4

LUKS + LUKS / dm-cache의 LVM

Ubuntu 설치 프로그램은 전체 디스크 암호화를 위해 LUKS 구성 에서 LVM을 사용합니다 .

dm-cache / lvmcache를 사용하여 성능을 향상 시키려면 데이터의 보안을 유지하기 위해 캐시 풀을 암호화 된 볼륨에 배치해야합니다.

단계는

  • 대상 블록 장치에서 LUKS 볼륨 생성
  • 새로운 암호화 된 LUKS 볼륨으로 기본 볼륨 그룹 확장
  • 새 LUKS 볼륨에서 캐시 메타 데이터 및 데이터 볼륨을 작성하십시오.
  • 캐시 풀로 함께 바인드
  • 이 캐시 풀을 루트 볼륨에 바인딩
  • 부팅시 새 암호화 된 볼륨을 추가하여 마운트 할 수 있는지 확인하십시오. /etc/crypttab
  • 부트 환경이 dm-cache를 지원하는지 확인하십시오

아래 스크립트는 예를 제공하며 기존 루트 파일 시스템에 암호화 된 캐시 풀을 추가합니다. 우분투 설치 프로그램에서 기본 디스크 암호화 옵션을 사용하는 시스템을 위해 설계되었습니다. 전체 디스크 파티션 및 암호화, 사용자 정의 파티션 없음

이 스크립트에는 유효성 검사 또는 방어 프로그래밍이 거의 없습니다. 그것이 당신의 작업 시스템을 파괴한다면, 그것은 당신의 책임입니다.

따라서 전화 :

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. 작동하려면 루트가 필요합니다
  2. bash에서 스크립트를 실행하십시오.
  3. 스크립트 이름
  4. 사용하려는 블록 장치 (전체 디스크로만 테스트)
  5. 메타 데이터 크기
  6. 캐시 데이터 크기

크기 매개 변수는 기본적으로 MB 단위입니다. 캐시 공간에 1 : 1000 메타 데이터 공간 비율이 필요합니다 (예 : 캐시 디스크가 180GB 인 경우 180MB의 메타 데이터 공간 및 179820MB의 데이터 공간이 필요함). 메타 데이터는 약간 조심해야합니다. 메타 데이터에는 8M의 하한이 있습니다.)

당신은 당신의 캐시 볼륨에 대한 암호를 입력하라는 메시지가 표시됩니다 - 당신의 암호를 입력하라는 메시지가 표시됩니다 BOTH 부팅 중에 디스크.

참고 문헌


#! / bin / bash
#
# lvmcryptocache
#
# LVM 캐시 풀을 추가하고 루트 볼륨에 연결
# LUKS 암호화 포함
# "all on root"설정을 사용한다고 가정
# 그렇지 않은 경우 원하는 경우 적용
#
# 스크립트 라이센스 GPL3 이상
# © Adrian Wilkins 2015 년 5 월
#
# 캐시로 사용중인 디스크 장치의 이름을 전달하십시오
# 이것은 완전히 비워 두어야합니다.
#
# dd if = / dev / zero of = / dev / $ {DISK}
#
# 파티션 테이블을 압축하는 동안 잠시 동안

CACHE_DISK = $ 1
META_SIZE = $ 2
DATA_SIZE = $ 3

DISK_NAME = $ (기본 이름 $ CACHE_DISK)

CRYPT_VOLUME = $ {DISK_NAME} _crypt
CACHE_PV = / dev / mapper / $ {CRYPT_VOLUME}

# 원시 디스크에 LUKS 볼륨 생성

cryptsetup luksFormat $ CACHE_DISK
cryptsetup open --type luks $ CACHE_DISK $ CRYPT_VOLUME

# 디스크 크기 문제를 해결하기 시작했지만 복잡합니다.
# 당신이 좋아하면 가자, 나는 범위가 계속 부족
#
# DISK_SIZE = $ (fdisk -l | grep "디스크 $ {CACHE_DISK}"| awk '{print $ 5}')
# 
# META_SIZE = $ ((DISK_SIZE / 1000))
# META_SIZE = $ ((META_SIZE + 512))
# MOD = $ ((META_SIZE % 512))
# MOD_OFFSET = $ ((512-MOD))
# META_SIZE = $ ((META_SIZE + 512)) 
# META_SIZE = $ ((META_SIZE + MOD_OFFSET))
# 
# DATA_SIZE = $ ((DISK_SIZE-META_SIZE))
# 

# 암호화 된 볼륨 내에 새로운 PV 생성

pvcreate $ CACHE_PV
vgextend 우분투 -vg $ CACHE_PV
lvcreate -L $ {META_SIZE} -n 캐시 메타 우분투 -vg $ CACHE_PV
lvcreate -L $ {DATA_SIZE} -n cachedata ubuntu-vg $ CACHE_PV
lvconvert-유형 캐시 풀 --poolmetadata ubuntu-vg / cachemeta --cachemode writethrough ubuntu-vg / cachedata --yes
lvconvert-유형 캐시 --cachepool ubuntu-vg / cachedata ubuntu-vg / root

# 이제 캐시 풀 물리 드라이브 (/ dev / sdb)의 UUID를 / etc / crypttab에 추가하십시오.
DISK_UUID = $ (ls -al / dev / disk / by-uuid / | grep $ DISK_NAME | awk '{print $ 9}')
echo "$ {CRYPT_VOLUME} UUID = $ {DISK_UUID} 없음 루크, 폐기">> / etc / crypttab

apt-get install --yes 씬 프로비저닝 도구

후크 = $ (tempfile)
# initramfs에 훅 스크립트를 추가하여 올바른 툴과 모듈을 추가하십시오

echo "#! / bin / sh"> $ HOOK
echo "PREREQ ="lvm2 "">> $ HOOK
echo "prereqs ()">> $ HOOK
에코 "{">> $ HOOK
echo "echo \"$ PREREQ \ "">> $ HOOK
에코 "}">> $ HOOK
echo "case $ 1 in">> $ HOOK
echo "prereqs)">> $ HOOK
echo "prereqs">> $ HOOK
echo "exit 0">> $ HOOK
에코 ";;" >> $ 후크
에코 "esac">> $ HOOK
echo "if [! -x / usr / sbin / cache_check]; 그때">> $ HOOK
echo "exit 0">> $ HOOK
에코 "fi">> $ HOOK
echo ". / usr / share / initramfs-tools / hook-functions">> $ HOOK
echo "copy_exec / usr / sbin / cache_check">> $ HOOK
echo "manual_add_modules dm_cache dm_cache_mq dm_persistent_data dm_bufio">> $ HOOK

cp $ HOOK / etc / initramfs-tools / hooks / lvmcache
chmod + x / etc / initramfs-tools / hooks / lvmcache

echo "dm_cache">> / etc / initramfs-tools / modules
echo "dm_cache_mq">> / etc / initramfs-tools / modules
echo "dm_persistent_data">> / etc / initramfs-tools / modules
echo "dm_bufio">> / etc / initramfs-tools / modules

# initramfs 업데이트

update-initramfs -u

echo 지금 재부팅하십시오!

1. 캐시 디스크를 0으로 비우는 것이 아니라 암호화 된 LUKS를 배치하려면 임의의 데이터로 안전하게 지워야합니다. 2. 설정에 2 개의 LUKS 파티션이 있으므로 동일한 암호를 사용하더라도 두 번 입력해야합니다.
solsTiCe

1. 임의의 디스크 지우기는 최신 하드웨어에서 약간 구식입니다. 대부분의 비 학술적 수준 조치를 넘어 디스크를 상업용 디스크 복구 연구소를 넘어 설 정도로 충분합니다. 이전에 보유한 중요한 데이터를 사용하는 볼륨이 아니라면, 기록 된 모든 블록이 암호화되므로 불필요합니다. 웨어 레벨링 알고리즘으로 인해 평문에 민감한 데이터가있는 SSD를 사용해서는 안됩니다. 2. 예, 텍스트에서 말했듯이 2 개의 LUKS 파티션이 있습니다. 부팅하는 동안 두 암호 문구를 입력하라는 메시지가 표시됩니다.
Adrian

무작위 삭제는 SSD에서 데이터를 안전하게 삭제하는 것이 아니라 정밀한 조사를 피하고 00000000zerazer000000000000과 같이 빈 데이터와 암호화 된 데이터를 구별 할 수 있도록하는 것입니다. 여기서 당신은 중간에 암호화 된 데이터를 볼 수 있습니다. 이것은 임의의 수프 중간에 숨겨지는 대신 암호화를 약화시킵니다.
solsTiCe

나는 bcache 설정을 멈추고 나서이 경로로 갔다. 꽤 잘 작동하는 것 같습니다 | cache_utilization_pct | 79.096846147 |. 그러나 top나는 iowait 상태가 20-50 % 지속적으로보고 있습니다. 이것이 버퍼링의 부작용 일 수 있습니까?
Jean Jordaan

나는 확실히 알 수는 없지만 SSD에 대한 쓰기를 최소화하는 데 관련된 최적화의 부작용 일 수 있다고 생각합니다. IOWait 관련 기사 : thattommyhall.com/2011/02/18/iops-linux-iostat
Adrian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.