Jak skonfigurować LVM i LUKS do automatycznego szyfrowania partycji?


21

Niedawno zainstalowałem serwer Ubuntu 11.04 z pełnym szyfrowaniem lvm (instalowanym z instalacji). Chcę teraz użyć pliku klucza do automatycznego odblokowania. Próbowałem postępować zgodnie z tym przewodnikiem http://ubuntuforums.org/showthread.php?t=837416

Wygenerowałem klucz za pomocą tego polecenia: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

Włożyłem go, /boot/grubponieważ myślę, że nie jest szyfrowany. Kiedy próbuję dodać klucz w tym poleceniu sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile , prosi mnie o hasło, a kiedy go wkładam, nic się nie dzieje, nic nie jest drukowane na ekranie! Ignoruję to i kontynuuję pozostałe kroki i restartuję się, ale nic się nie wydarzyło i prosi o hasło.

Dzięki za pomoc .


Masz na myśli deszyfrowanie bez wprowadzania hasła? Jeśli proces rozruchu mógłby to zrobić, klucze niezbędne do odszyfrowania woluminu musiałyby znajdować się w systemie w miejscu dostępnym podczas rozruchu. Jak można oczekiwać, że ochroni Cię przed kradzieżą danych?
James Henstridge

tak, myślę, że włożę klucz do ukrytej partycji lub dysku flash USB. Czy to jest możliwe ?
isoman

Problem polega na tym, że jeśli moduł ładujący może zlokalizować klucz, to osoba sprawdzająca (niezaszyfrowany) kod rozruchowy również będzie w stanie go zlokalizować. Jeśli przechowujesz klucz na pamięci USB, chciałbyś mieć całkowitą pewność, że pamięć nie zostanie skradziona z komputerem. Jeśli zamierzasz podłączyć pamięć tylko podczas rozruchu, nie jest to wygodniejsze niż wprowadzenie hasła.
James Henstridge

Odpowiedzi:


27

Właśnie przeszedłem przez to na moim nowym serwerze domowym, zajęło mi to dużo googlingu i zgadywania, ale mam to działa. Spróbuję odtworzyć te kroki tutaj. Używam Ubuntu Server 11.10 i zacząłem od prawie standardowej instalacji przy użyciu zaszyfrowanego LVM, więc po prostu powiem zmiany, które tam wprowadziłem.

Ustawiać:

  • / dev / sda1 to moja nieszyfrowana partycja / boot
  • / dev / sda5 to moja partycja lvm, która zawiera wszystko inne - root, swap i home
  • / dev / sdc1 to partycja na moim dysku flash USB, na której będę przechowywać plik klucza

Najpierw utworzyłem plik klucza, tylko w moim katalogu domowym:

dd if=/dev/urandom of=keyfile bs=512 count=4

(możesz użyć większego rozmiaru bloku lub liczyć na większy klucz)

Powiedz cryptsetup nowemu kluczowi (ważna jest zawartość, a nie nazwa pliku):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

Następnie sformatowałem dysk flash USB za pomocą ext2 i nadałem mu etykietę. Użyłem etykiety, aby później zamontować ją według etykiety i wymienić dysk flash USB, na wypadek, gdyby coś poszło nie tak.

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(oczywiście Twoje urządzenie będzie się różnić)

Teraz skopiuj plik klucza na dysk flash USB, którego właścicielem jest tryb root 400:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

Zmodyfikuj / etc / crypttab. Mój pierwotnie zawarty

sd5_crypt UUID=(...) none luks

które zmieniłem na

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

Na koniec zaktualizuj initramfs:

sudo update-initramfs -uv

Teraz uruchamia się przy użyciu pliku klucza na dysku flash USB. Jeśli wyjmę dysk flash (powiedzmy, kiedy wyjeżdżam na wakacje), nie uruchomi się, a moje dane będą bezpieczne.

Jeśli ktoś wie, jak go poprosić o hasło, jeśli brakuje dysku flash USB, byłoby to przydatne jako awaryjne. Mam nadzieję, że to pomoże, wszelkie uzupełnienia lub poprawki będą mile widziane!


3
Jeśli nie masz pewności, jak uzyskać monit o hasło, możesz użyć partycji rozruchowej na dysku flash, aby załadować za pomocą alternatywnego pliku initramfs, który szuka pliku klucza, a domyślny rozruch na dysku twardym załaduje zwykły plik initramfs z monitem o podanie hasło.
Przywróć Monikę - ζ--

1
@ 3pic Nie jestem w 100% pewien, ponieważ zrobiłem to kilka miesięcy temu. Ale Ubuntu uruchamia się w wirtualnym systemie plików. keyscript=/lib/cryptsetup/scripts/passdevdodaje passdevdo niego skrypt. A następnie update-initramfs -uvodbudowuje archiwum systemu plików.
VarunAgw

1
@RandyOrrison to naprawdę świetne. To działa. Ale ... po przejściu przez initram siedzi przez minutę lub dwie minuty A start job is running for dev-sda8:-keyfile.device (1min 18s...)itd. Mija, wszystko jest zamontowane, ale przez chwilę się zawiesza. Dziennik mówi: „Przekroczono limit czasu oczekiwania na urządzenie dev-sda8: -sda7keyfile.device; Zależność nie powiodła się dla instalacji Crypto dla sda7crypt”. Oczywiście został już zamontowany przez initram, ale ... Co robię źle?
roszenie

1
Z jakiegoś powodu wydaje się, że nie lubi / działa z systemd; po prostu keyscriptcałkowicie zignoruje to pole.
Etienne Bruines

1
W Ubuntu 17.10+ narzędzie update-initramfs nie wygeneruje obrazu initramfs zdolnego do uruchomienia woluminu Luks, jeśli główny system plików znajduje się na woluminie Luks i ma plik klucza. Możesz sprawić, by działał, pozostawiając „none” jako wartość pliku klucza i ustawiając opcje, aby mieć keycript = / etc / my-keyscript, gdzie / etc / my-keyscript to skrypt powłoki, który wypisuje klucz.
Macil

6

Te instrukcje z howtoforge.com uruchomiły mnie z automatycznie odszyfrowującym woluminem.

Instrukcje: automatyczne odblokowywanie zaszyfrowanych dysków LUKS za pomocą pliku klucza

Krok 1: Utwórz losowy plik klucza

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

Krok 2: Zrób plik klucza tylko do odczytu, aby zrootować

sudo chmod 0400 /root/keyfile

Dzięki temu plik klucza będzie czytelny tylko przez root. Jeśli ktoś uzyska dostęp do tego pliku kluczy, to i tak masz większy problem na swoim komputerze.

Alternatywnie zmień pożądany plik klucza na root: root i przenieś go do folderu / root

Krok 3: Dodaj plik klucza do LUKS

Urządzenia obsługujące LUKS / dm_crypt mogą przechowywać do 10 różnych plików kluczy / haseł. Tak więc, oprócz już skonfigurowanego hasła, dodamy ten plik klucza jako dodatkową metodę autoryzacji.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

SDX to oczywiście twoje urządzenie LUKS.

Najpierw zostaniesz poproszony o podanie (istniejącego) hasła, aby odblokować dysk. Jeśli wszystko działa dobrze, powinieneś otrzymać taki wynik:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

Krok 4: Utwórz program mapujący

Urządzenia LUKS muszą utworzyć program odwzorowujący, do którego można będzie się odwoływać w fstab. Otwórz / etc / crypttab

sudo nano /etc/crypttab

i dodaj następującą linię:

sdX_crypt      /dev/sdX  /root/keyfile  luks

lub możesz użyć UUID urządzenia:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt to nazwa tworzonego mapera. Możesz użyć tutaj dowolnej nazwy, np. „Muzyka”, „filmy” lub „sfdsfawe” ....

Zapisz i zamknij plik, wydając ctrl-x, enter, enter. Ctrl-x zamyka nano, ale najpierw prosi o zapisanie pliku [tak = enter] i jaka będzie nazwa [ta sama nazwa = enter].

To, co tam zrobiliśmy, mówi, że do odblokowania dysku należy użyć / root / keyfile zamiast hasła.

Krok 5: Zamontuj urządzenie w fstab

Teraz mamy odblokowane urządzenie (cóż, jeszcze nie, ale podczas uruchamiania systemu) i wystarczy je teraz zamontować. Otwórz / etc / fstab:

sudo nano /etc/fstab

i dodaj nowy wpis, taki jak:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

Upewnij się, że masz poprawną nazwę mapowania dodaną w kroku 4. Upewnij się także, że punkt / folder instalacji istnieje. Po dodaniu zapisz ponownie plik i zamknij go (ctrl-x, enter, enter).

Krok 6: Uruchom ponownie lub podłącz ponownie

to jest to! Teraz możesz zrestartować komputer, a dodatkowe urządzenia powinny zostać automatycznie odblokowane i zamontowane. Możesz to również przetestować, ponownie instalując wszystkie urządzenia:

sudo mount -a

1
zapomniałeś zaktualizować initramfs, potrzebne 100%
3pic

6

Ulepszając odpowiedź Randy'ego Orrisona , oto mały skrypt, który stworzyłem, który sprawi, że system wróci do pytania użytkownika o hasło, jeśli nie uda mu się znaleźć pliku klucza.

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

Zapisz go i zastąpić keyscript=/lib/cryptsetup/scripts/passdevw /etc/crypttabze ścieżką do tego pliku i metę sudo update-initramfs -uvi gotowe.


Myślę, że twoje rozwiązanie nie działa na dysku USB dla więcej niż jednego pliku klucza. Mam na myśli, jeśli mam więcej niż jedną zaszyfrowaną partycję (home, swap, root). Wygląda na to, że nie odłącza sterownika USB po komendzie kota. Czy masz pomysł, jak to naprawić?
Khamidulla,

Działa to dla mnie (Xubuntu 17.10), ale musiałem edytować grub i usunąć „splash”. Musiałem też zapisać plik w odpowiednim miejscu (/ lib / cryptsetup / scripts / unlock_custom) i chmod go 755. Nie jestem pewien, czy powitanie lub kopiowanie w określonym miejscu sprawiło, że działał dla mnie, ale wcześniej nie działał. W każdym razie działa, ale przy starcie, Startet AppArmor initialization.kiedy dostaję: Uruchomione jest zadanie startowe dla pliku-kluczy-dysku-dev. Po rozpoczęciu lat 90. X mogę korzystać z mojego systemu ... nie mam pojęcia, jak naprawić to zadanie początkowe ...
firepol

1

@deitch Miałem taką samą konfigurację jak @Randy Orrison i napotkałem ten sam problem co ty i okazuje się, że to błąd systemd, który próbuje ponownie zamontować system plików /, gdy znajdzie odpowiedni wpis w / etc / crypttab.

Aby rozwiązać ten problem, właśnie usunąłem wpis sda5_crypt z / etc / crypttab po uruchomieniu komendy update-initramfs -uv.

Uruchom ponownie i wszystko działa zgodnie z przeznaczeniem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.