Knowledge base
Jak zaszyfrować dysk?
Posted by on 02.09.2013 11:56

Dziś pokażemy Ci, jak stworzyć w chmurze Oktawave zaszyfrowany dysk i jak z niego korzystać.

 

  1. To musisz wiedzieć na początku
  2. Stworzenie wolumenu OVS i partycjonowanie
  3. Zaszyfrowanie partycji
  4. Podłączenie zaszyfrowanej partycji do systemu
  5. Automatyzacja podłączania szyfrowanej partycji
  6. Przesyłanie informacji na szyfrowaną partycję

 

1. To musisz wiedzieć na początku

Zanim przystąpisz do tworzenia szyfrowanych dysków, zastanów się nad kilkoma kwestiami. Pierwszą z nich jest zarządzanie kluczami szyfrującymi i ich przechowywaniem. Jedno jest pewne: swojego klucza nie powinieneś trzymać w chmurze – powinien on być trzymany tak daleko od danych, jak to jest tylko możliwe. Dobrym rozwiązaniem jest nauczenie się na pamięć frazy odszyfrowującej - polecamy do tego techniki opisane tutaj: http://drfugazi.eu.org/pl/bezpieczenstwo/diceware.

Warto też zaznaczyć, że powinieneś zmienić domyślne hasło roota oraz wyłączyć konto supportowe Oktawave. Wiąże się to z pewnym ryzykiem - jeśli coś pójdzie nie tak, nikt nie będzie mógł Ci pomóc w konfiguracji Twoich usług, ale o to przecież chodzi, prawda?

Druga kwestia to system szyfrowania. Ze względu na wyższe koszty utrzymania instancji Windows, trudności w zabezpieczeniu tego systemu i słabości jego systemu szyfrowania EFS (dane z oryginalnego niezaszyfrowanego pliku pozostają na dysku po stworzeniu nowej, zaszyfrowanej wersji), będziemy korzystać z Linuksa. Tutaj najprościej zastosować działający w przestrzeni użytkownika system EncFS, ale jest on ograniczony w możliwościach, nie chroni przed ciekawskim administratorem z dostępem root. Dlatego o wiele lepiej wykorzystać dobrze zintegrowany z jądrem system dm-crypt/LUKS, pozwalający na szyfrowanie całych partycji w sposób „przezroczysty” dla systemu plików.

A jaki szyfr wybrać? Domyślnie najczęściej obecnie wybiera się dziś AES. W jądrze Linuksa są też inne szyfry blokowe o wysokim poziomie bezpieczeństwa, np. Serpent, Twofish i Camellia - sugerujemy zaznajomienie się z tematem i wybranie dla siebie najlepszej opcji. W rozważaniach należy uwzględnić okres, przez jaki zaszyfrowane dane mają pozostać bezpieczne, czyli po prostu długość klucza.

Trzecia sprawa to przemyślenie, co chcesz szyfrować. Tworząc szyfrowane obrazy maszyn wirtualnych, należy pamiętać o partycji swap, a konkretnie o tym, żepowinniśmy ją szyfrować, ze względu na rolę, jaką pełni w systemie. Nie można zapomnieć o szyfrowaniu katalogów domowych (/home/*) i katalogów tymczasowych (/tmp). Zaszyfrowanie całego dysku nie jest możliwe – trzeba przynajmniej mieć odszyfrowaną partycję /boot, by mogła ona wystartować.

Ostatnia wreszcie kwestia to problem restartów instancji. Jeśli używasz obrazów starszych wersji Linuksa z bootloaderemgrub v1 (np. Debian 6), wówczas bootloader ten będzie próbował podłączyć szyfrowaną partycję automatycznie podczas startu. Wówczas Twoja instancja nie "wstanie" automatycznie: będzie czekała na hasło do podłączenia zaszyfrowanej partycji. Dlatego musisz wcześniej przeedytować konfigurację bootloadera i wyłączyć automatyczne montowanie systemów plików LUKS. Po restarcie instancji zalogujesz się przez SSH do maszyny wirtualnej i ręcznie podłączysz szyfrowaną partycję. Jak to zrobić – dowiesz się z dokumentacji grub.

Lepiej jednak skorzystać z nowszych dystrybucji, korzystających z bootloaderagrub v2 (np. Debian 7). Problemu tego nie ma – system wystartuje bez podłączonej szyfrowanej partycji.

 

2. Stworzenie wolumenu OVS i partycjonowanie

Zakładamy, że posiadasz już wirtualną maszynę OCI w Oktawave. Jeśli nie, możesz ją założyć wg wskazówek zawartych w naszej dokumentacji (https://kb.oktawave.com/Knowledgebase/Article/View/48/85/jak-dodawac-instancje-oci-i-jak-nimi-poniej-zarzdzac). W poniższym przykładzie będziemy wykorzystywali Debiana 7, ale z niewielkimi zmianami wszystkie opisane poniżej operacje można przeprowadzić w dystrybucjach takich jak Ubuntu, CentOS, OpenSUSE czy Gentoo.

Jeśli masz już uruchomioną instancję, dodajmy do niej dysk. W panelu OKTAWAVE | SERVICES | Oktawave Volume Storage kliknij przycisk ADDSTORAGE, podając kolejno jego nazwę (np. crypto_1), wydajność (od Tier-1 do Tier-5), rozmiar w GB i nazwę maszyny wirtualnej, do której szyfrowana partycja będzie podłączona.

Uwaga: ze względu na narzut generowany przez mechanizm szyfrujący dane „w locie”, warto wybrać o jeden poziom wyższą wydajność, niż ta, który planowałbyś dla nieszyfrowanej partycji.

Po kliknięciu przycisku ADD, wolumen OVS zostanie dodany do maszyny wirtualnej. Jak się do niego dostać z poziomu systemu operacyjnego? Zaloguj się jako administrator (root) przez SSH, a po znaku zachęty wpisz, co następuje.

# dmesg |tail

Poznasz w ten sposób nazwę dysku w systemie urządzeń – komunikat informujący o podłączeniu dysku /dev/sdb będzie wyglądał np. tak:

 [ 388.402436] sd 2:0:2:0: [sdb] Write Protectis off
[ 388.402439] sd 2:0:2:0: [sdb] ModeSense: 61 00 0000
[ 388.402515] sd 2:0:2:0: [sdb] Cache data unavailable
[ 388.402518] sd 2:0:2:0: [sdb] Assumingdrive cache: writethrough
[ 388.403602] sd 2:0:2:0: [sdb] Cache data unavailable
[ 388.403605] sd 2:0:2:0: [sdb] Assumingdrive cache: writethrough
[ 388.407639] sdb: unknownpartitiontable
[ 388.407879] sd 2:0:2:0: [sdb] Cache data unavailable
[ 388.407881] sd 2:0:2:0: [sdb] Assumingdrive cache: writethrough
[ 388.407965] sd 2:0:2:0: [sdb] Attached SCSI disk

Stwórz partycję na dysku, za pomocą następującego polecenia.

# cfdisk /dev/sdb

W narzędziu cfdisk utwórz partycję wybierając z menu New, ustalając typ na Primary (główna) i wpisując rozmiar – w naszym wypadku wystarczy wybrać domyślny rozmiar, obejmujący całe 5 GB wolumenu. Z menu wybierz teraz Type, by wybrać typ systemu plików i wybierz z listy 83 – oznaczający partycję Linuksa. Finalnie zapisz wprowadzone zmiany, wybierając z menu Write, potwierdź wszystkie operacje wpisując yes, i wyjdź z cfdiska wybierając Quit.

Stworzyłeś w ten sposób partycję /dev/sdb1.

 

3. Zaszyfrowanie partycji

Gdy masz już dysk OVS podłączony do wirtualnej maszyny, zainstaluj pakiety mechanizmu szyfrowania dm-crypt, wpisując w powłoce następujące polecenie.

# apt-getinstallcryptsetup

Teraz należy sformatować zaszyfrowany dysk.

# cryptsetup -y luksFormat /dev/sdb1

Podczas formatowania zostaniesz zapytany o frazę szyfrującą (passphrase). Podaj ciąg o odpowiednim poziomie złożoności, składającą się przynajmniej z kilkunastu liter, w tym znaków specjalnych (np. „Marysia-miala-owieczke-bial0”). Zapamiętaj ją dobrze, nie zapisuj jej nigdzie. Jeśli ją zapomnisz, nie odzyskasz zaszyfrowanych informacji z dysku.

Sprawdź teraz, czy wszystko odbyło się poprawnie.

# cryptsetupluksDump /dev/sdb1

Powinieneś otrzymać w rezultacie komunikat analogiczny do następującego.

LUKS headerinformation for /dev/sdb1
Version: 1
Ciphername: aes
Ciphermode: cbc-essiv:sha256
Hash spec: sha1
Payload offset: 4096
MK bits: 256
MK digest: 67 33 2d 9c a3 84 8a 91 98 46 2a 0d ca d2 6c 24 70 4d 87 9c
MK salt: 83 19 eedbcb 7a e1 d0 fe 4f c7 d2 ba 3c 30 5f
43 44 5c 20 80 4c 95 f7 b4 10 29 ff 5b 8f c6 ab
[...]

4. Podłączenie zaszyfrowanej partycji do systemu

Aby móc wykorzystywać zaszyfrowaną partycję, musisz stworzyć odwzorowanie urządzenia, pozwalające na jego zamontowanie w systemie plików. W tym celu wpisz w konsoli, co następuje.

# cryptsetupluksOpen /dev/sdb1 krypto_part

Zostaniesz zapytany o frazę szyfrującą („Marysia-miala...”), więc wprowadź ją.

Teraz pozostaje sformatować odwzorowaną partycję w jednym z obsługiwanych przez Linuksa systemów plików. Tutaj wybraliśmy popularny ext4.

# mkfs.ext4 -m 0 /dev/mapper/krypto_part

Teraz, gdy wszystko zostało już skonfigurowane, pozostaje podłączyć szyfrowaną partycję do linuksowego systemu.

# mkdir /krypto1
# mount /dev/mapper/krypto_part /krypto1

Możesz też sprawdzić status podłączonej partycji.

cryptsetup status krypto_part

Jeśli teraz chcesz przenieść któryś z systemowych katalogów na szyfrowaną partycję (np. /tmp), można to zrobić następująco.

# mkdir /krypto1/tmp
# rsync -va /tmp /krypto1/tmp
# mv /tmp /tmp.old(później możesz skasować tmp.old, by uzyskać więcej wolnego miejsca)
# mount -o bind /krypto1/tmp /tmp

Powinieneś sprawdzić w dokumentacji aplikacji, których używasz na serwerze, gdzie przechowują one swoje pliki. Najczęściej będą to katalogi takie jak /tmp/aplikacjaczy /var/log/aplikacja.

Po powiązaniu systemowych katalogów do szyfrowanej partycji przeedytuj plik /etc/fstab, tak aby wprowadzone zmiany pozostawały na stałe. Poniższa linijka wprowadza takie powiązanie dla /tmp.

/krypto1/tmp /tmpnone bind 0 0

5. Automatyzacja podłączania szyfrowanej partycji

Przy starcie instancji w chmurze szyfrowana partycja nie będzie automatycznie uruchamiana. Aby uprościć proces jej podłączania, warto przygotować sobie odpowiedni skrypt.

#!/bin/bash
## konfiguracja ##
_part="/dev/sdb1"
_name="krypto_part"
_source="/dev/mapper/krypto_part"
_dest="/krypto1/"
echo 
/sbin/cryptsetupluksOpen ${_part} $_name
echo 
/bin/mount/ ${_source} ${_dest}
df -H

Po zapisaniu go (z nazwą np. /usr/local/sbin/mount_luks.sh) i nadaniu mu praw uruchamiania przez administratora (chmod 700 /usr/local/sbin/mount_luks.sh), skrypt ten pozwoli na podłączenie szyfrowanej partycji do systemu po restarcie – wystarczy wydać polecenie mount_luks.sh.

Oczywiście skrypt taki może robić znacznie więcej – np. uruchamiać serwer WWW, obsługujący aplikację webową, której dane przechowywane są na zaszyfrowanej partycji. Szczegółowe informacje o uruchamianiu w ten sposób usług czy serwerów znajdziesz w ich dokumentacji.

 

6. Przesyłanie informacji na szyfrowaną partycję

Na nic szyfrowanie, jeśli dane, które mają znaleźć się na zaszyfrowanej partycji nie będą przesyłane tam w sposób bezpieczny. Nie możesz do tego używać zwykłego FTP, polecamy wykorzystanie SFTP, czyli SSH File Transfer Protocol. Jeśli masz zainstalowany pakiet openssh-server w swojej wirtualnej maszynie, to masz wszystko, czego potrzebujesz od strony serwera. Dostęp od strony swojego komputera możesz uzyskać przez programy takie jak Filezilla czy WinSCP, których opis wykracza poza zakres tego poradnika. Wystarczy pamiętać, że do zalogowania się wystarczy wykorzystać login i hasło, jakie wykorzystujesz do logowania się po SSH.

To oczywiście wierzchołek góry lodowej, związanej z zabezpieczaniem zdalnych zasobów w chmurze. Aby zwiększyć bezpieczeństwo dostępu, warto całkowicie zrezygnować z haseł logowania i wykorzystać uwierzytelnianie za pomocą kryptografii klucza publicznego. Można też założyć własną sieć prywatną, by łączyć się z maszyną wirtualną w sposób znacznie utrudniający przechwycenie naszej komunikacji. Jak to zrobić, pokażemy w kolejnych poradnikach.

(2 vote(s))
This article was helpful
This article was not helpful

Comments (0)
Post a new comment
 
 
Full Name:
Email:
Comments:
CAPTCHA Verification 
 
Please enter the text you see in the image into the textbox below. This is required to prevent automated registrations and form submissions.