Szyfrowana partycja /home

29 kwietnia 2007, lipiec

Zastanów się co by było gdyby z Twojego komputera zostały wykradzione ważne informacje dotyczące nowego projektu, który przygotowuje firma w której pracujesz. Przerażające prawda? Jeżeli jesteś zainteresowany, jak dodatkowo zabezpieczyć się przed kradzieżą danych, to zapraszam do lektury artykułu, w którym pokażę jak zaszyfrować katalog /home, tak aby nawet złodziej z fizycznym dostępem do maszyny nie mógł uzyskać dostępu do Twoich danych.

Na początek trochę teorii. Do szyfrowania wykorzystamy następujące programy:

  • DM-Crypt — darmowe oprogramowanie umożliwiające szyfrowanie całych partycji dyskowych, szyfruje dane jeszcze przed zapisem na partycji, wchodzi w skład kernela 2.6.4 i następnych wersji,
  • LUKS — (Linux Unified Key Setup) — standardowy system szyfrowania dysków dla Linuksa,
  • cryptsetup — narzędzie umożliwiające jednoczesne wykorzystanie LUKS i DM-Crypt.

Pobieranie potrzebnego oprogramowania

Programem, który będzie nam potrzebny, jest cryptsetup z obsługą LUKS. Jeśli nasza dystrybucja zawiera ten program w repozytoriach (jak np. Ubuntu), wystarczy wydać polecenie sudo apt-get install cryptsetup. W przeciwnym przypadku w konsoli wpisujemy:
wget http://luks.endorphin.org/source/cryptsetup-luks-1.0.4.tar.bz2

W ten sposób pobierzemy źródła programu, którego instalacja odbywa się standardowo:

./configure
make
make install

Instalacja powinna przebiec bez większych problemów.

Opis najważniejszych opcji cryptsetupa

root@host:~# cryptsetup OPTIONS action name device -- ogólna składnia
OPTIONS(opcje):
-c -- algorytm szyfrowania, domyślnie AES z 256-bitowym kluczem,
-h -- wyświetla menu pomocy,
-y -- weryfikacja użytkownika poprzez dwukrotne zapytanie o hasło,
-d -- wczytuje klucz/hasło z pliku,
ta opcja jest ignorowana, jeżeli użyjesz opcji -d:
-s -- rozmiar klucza (w bitach).

action(akcja):
create -- tworzy mapę dysku,
remove -- usuwa mapę dysku,
reload -- przeładowuje mapę dysku,
resize -- zmniejsza bądź zwiększa rozmiar mapy,
status -- pokazuje stan,
name -- nazwa mapy w  /dev/mapper/,
device -- dysk, który chcesz zaszyfrować.

.

Teraz, kiedy znamy już podstawowe opcje, możemy zabrać się do pracy. Cryptsetup jest programem pracującym w środowisku tekstowym i nie jest dostępna na niego żadna nakładka graficzna, więc jeśli nie lubisz pracy z konsolą, będziesz musiał ją polubić. :)

Inicjowanie katalogu /home

Na potrzeby artykułu zakładamy, że dysk na którym znajduje się katalog do zaszyfrowania oznaczony jest jako /dev/hdc6.
Zanim będziemy mogli utworzyć zaszyfrowaną partycję, musimy ją najpierw zainicjować:

root@host:~# cryptsetup luksFormat /dev/hdc6

WARNING!
=========
This will overwrite data on /dev/hdc6 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

Zostajemy poproszeni o hasło, podajemy je dwa razy (hasło będzie później wykorzystane do weryfikacji).

Wybór odpowiedniego algorytmu

Następnie musimy zadecydować jakim algorytmem chcemy zaszyfrować katalog /home. Algorytmy te muszą być dostępne w naszej kompilacji jądra. Aby sprawdzić dostępne algorytmy, wpisujemy: cat /proc/crypto.
Jeżeli nie masz wkompilowanych żadnych opcji kryptograficznych (algorytmy nie powinny być ładowane jako moduły), przed uruchomieniem programu skonfiguruj odpowiednio jądro (opcje kryptograficzne znajdują się w konfiguracji kernela w zakładce Cryptographics options).

Następnie wpisujemy:

root@host:~# cryptsetup -c wybrany_przez_nas_algorytm -y luksFormat /dev/hdc6

Jeżeli nie wiemy na jaki algorytm się zdecydować, pomijamy opcję -c. Domyślnym algorytmem jest AES.

Mapowanie i tworzenie systemu plików

Następnym krokiem jest utworzenie mapowania.
Wpisujemy:

root@host:~# cryptsetup luksOpen /dev/hdc6 home

Zostajemy ponownie zapytani o podane przez nas wcześniej hasło w celu zweryfikowania naszej tożsamości. Jeżeli nie nastąpiły żadne komplikacje, w /dev/mapper powinna pojawić się mapa katalogu /home.

Następnie powinniśmy założyć system plików na naszej wirtualnej kopii katalogu:

root@host:~# mkfs.ext2 -m 0 /dev/mapper/home

W moim przykładzie wybrałem ext2, ale może to być dowolny system plików np.: ext3 czy reiserfs.

Następnie przekopiujemy aktualną zawartość katalogu /home na mapę:

root@host:~# cp -a /home /dev/mapper/home

Dodawanie dodatkowych haseł dla użytkowników

LUKS posiada również bardzo ciekawą funkcję. Mianowicie nie tylko root może mieć dostęp do katalogu. Aby umożliwić to innym użytkownikom, musimy dodać kilka nowych haseł dla osób, które będą miały dostęp do zaszyfrowanego katalogu. Aby dodać te hasła, wywołujemy cryptsetup z opcją luksAddKey:

root@host:~# cryptsetup luksAddKey /dev/hdc6

Enter any LUKS passphrase:
Verify passphrase:
key slot 0 unlocked.
Enter new passphrase for key slot:
Verify passphrase:
Command sucessful.

Zostajemy poproszeni o wpisanie hasła, które podawaliśmy na samym początku, a następnie ustalamy nowe hasło dla wybranego użytkownika. Hasła mogą być takie same jak hasła do kont użytkowników, przez co nie narażasz ich na kolejne trudne hasła do zapamiętania. Jednak przy takim rozwiązaniu system jest mniej bezpieczny, ponieważ napastnik znając hasło do konta ma możliwość dostępu do zaszyfrowanych plików.

Aby sprawdzić listę dodanych kluczy/haseł, wpisujemy:

root@host:~# cryptsetup luksDump /dev/hdc6

Z kolei, aby usunąć odpowiedni klucz wpisujemy:

root@host:~# cryptsetup luksDelKey numer_klucza

Montowanie

Teraz możemy zamontować naszą partycję tak, jak oddzielny dysk:

root@host:~# mount /dev/mapper/home /mnt/home/

I to na tyle. Od tej pory nasz katalog domowy jest szyfrowany. A co z montowaniem po restarcie?
Po restarcie komputera będziemy musieli ponownie zmapować katalog /home. W tym celu wykonujemy polecenia:

root@host:~# cryptsetup -y luksOpen /dev/hdc6
root@host:~# mount /dev/mapper/home /mnt/home

Automatyczne montowanie zaszyfrowanych plików

Wiadomo, że ciągłe ręczne montowanie może stać się bardzo uciążliwe. Jest jednak sposób, aby temu zapobiec. Do automatycznego montowania podczas logowania wykorzystamy dwa linuksowe programy:

  • PAM — pozwala on na połączenie ze sobą wielu technik kryptograficznych, dlatego użytkownik nie musi zawracać sobie głowy oddzielną implementacją każdego klucza zaszyfrowanego innym algorytmem
  • pam_mount — jest to nakładka na PAM, która umożliwia montowanie oddzielnych wolumenów dla każdego użytkownika i, co najważniejsze, obsługuje crypt

Pam_mount działa prawie niezauważalnie, ponieważ sam proces montowania jest niewidzialny dla zwykłego użytkownika.
Instalacja PAM jak i pluginu przebiega tak samo, a więc po rozpakowaniu wchodzimy do odpowiednich katalogów i wykonujemy polecenia:

./configure
make
make install

Gdy mamy już zainstalowane oba programy, musimy pogrzebać trochę w pliku /etc/security/pam_mount.conf. Nie będę tutaj przedstawiał całego wyglądu tego pliku, ponieważ jest w nim wszystko świetnie opisane. Na końcu tego pliku dodajemy wiersz:
volume * crypt - /dev/hdc6/home /mnt/home fstype=ext2,async,nodev,fsck - -

Ogólna składnia wygląda tak: volume użytkownik system_plików serwer wolumen punkt_montowania opcje_montowania algorytm_szyfrowania ścieżka_do_klucza

Na koniec musimy jeszcze edytować plik /etc/pam.d/pam_mount. Sprawdzamy czy są w nim następujące wpisy (jeżeli nie, to dodajemy je):

auth       required   pam_mount.so use_first_pass
session    required   pam_mount.so use_first_pass

Otwieramy plik /etc/pam.d/login i zaraz za wpisem @include common-session dodajemy wpis @include common-pammount

Tak właśnie dobrnęliśmy do końca.

Podsumowanie

Wykorzystanie szyfrowania plików nie jest łatwe. Dlatego, jeśli nie jesteś zmuszony tego robić, lepiej sobie odpuścić. Pamiętaj, że jeżeli podczas szyfrowania wyłączą prąd a Ty nie masz w UPS-a, sytuacja może być nieciekawa. Otóż szyfrowanie odbywa się “w locie”, czyli pliki zostają szyfrowane zanim jeszcze zostaną zapisane na dysku twardym, tak więc grozi Ci całkowita utrata danych. Oczywiście są pewne plusy. Na przykład kiedy Twój komputer zostanie skradziony, złodzieje nie będą mieli dostępu do wybranego przez Ciebie katalogu, a nawet całej partycji lub jeżeli dla kaprysu chciałbyś odseparować od innych katalogów swój prywatny katalog.

Bibliografia:

Korekta: t_ziel

Znalazłeś literówkę? Zgłoś ją używając formularza!

Wpisz wynik działania: sześć + 0:

Komentarze (RSS) | Trackback (URI)

Liczba komentarzy: 22

zwiń wątek wk  29 kwietnia 2007 o godz. 10:28 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Świetny tekst - przydałoby się jeszcze jakieś porównanie z rozwiązaniem True Crypt - ja się przymierzam do szyfrowania partycji i nie wiem które z tych rozwiazań wybrać.

W tekście przydałaby się też informacja, czy operację tą musimy zrobić na czystym dysku - czy nie usunie nam wszystkich naszych plików podczas operacji inicjowania szyfrowania.

 
zwiń wątek lipiec  29 kwietnia 2007 o godz. 11:06 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]

Osobiście polecam (jeżeli jesteś początkujący w szyfrowaniu) użycie TrueCrypt, ponieważ jest dużo łatwiejszy w użyciu i jest tak samo funkcjonalny jak cryptsetup. Kończę właśnie pisanie tekstu o TrueCrypt, więc możesz trochę poczekać. :) Jeżeli chodzi o sposób szyfrowania opisany w tym tekście to nie usuwa on istniejących danych.

 
zwiń wątek Huk  29 kwietnia 2007 o godz. 16:41 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Czy w Ubuntu 7.04 w podstawowym jaju (2.6.20-15-generic) sa dostepne jakies algorytmy - czy należy rekompilować jądro? Jak wpisuje “cat /proc/crypto” to wyskakuje mi :

name : md5
driver : md5-generic
module : kernel
priority : 0
refcnt : 1
type : digest
blocksize : 64
digestsize : 16

i nie za bardzo wiem jak to odczytać :)

 
zwiń wątek 2M1R  29 kwietnia 2007 o godz. 17:43 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

@Huk: Masz wkompilowany algorytm MD5

 
zwiń wątek ktoś  30 kwietnia 2007 o godz. 10:35 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

tyle że danych “Zaszyfrowanych” w ten sposób (md5) nie da się odzyskać.

A czy jest jakiś sposób, aby zaszyfrowana partycja wydawałą się czysta? Tj. żeby można było rozpoznać system plików, ale nie można było odczytać ani danych, ani informacji o tym, że w ogole są na partycji oraz ich polożeniu?

zwiń wątek zactasa  13 marca 2008 o godz. 19:03 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Można zaszyfrować partycję (przynajmniej w Ubuntu) tak, żeby ukryć informacje nie tylko o danych, ale nawet o tym, czy coś na niej jest.

 
 
zwiń wątek rorio  30 kwietnia 2007 o godz. 11:27 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

To tworzy zaszyfrowany obraz dysku, czy robi jakiś własny system plików na partycji?

I jak z wydajnością? To chyba dość poważnie obciąża procesor, mam rację?

 
zwiń wątek michuk  30 kwietnia 2007 o godz. 12:46 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

To tworzy zaszyfrowany obraz dysku, czy robi jakiś własny system plików na partycji?

I jak z wydajnością? To chyba dość poważnie obciąża procesor, mam rację?

W skrócie: tworzysz partycję z jakimkolwiek systemem plików, a potem montujesz ją przez “mapę” (/dev/mapper) z odpowiednim sposobem szyfrowania. Wszystkie dane zapisywane na dysku są szyfrowane wybranym algorytmem, a przed odczytem, deszyfrowane. Jak się uprzesz to zamontujesz tę partycję normalnie, ale wtedy dostaniesz “krzaki” zamiast danych.

Co do wydajności — korzystałem na laptopie Intel Centrino 1.7Mhz z podobnej konfiguracji i nie zauważyłem różnicy wydajności.

 
zwiń wątek aposmyk  1 maja 2007 o godz. 1:40 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]

Dobrym pomyslem byloby wypelnienie partycji przypadkowymi danymi.

np:
cat /dev/urandom > /dev/da0

a pozniej:

cat /dev/urandom > /dev/mapper/home

a na samym koncu dopiero

newfs /dev/mapper/home

 
zwiń wątek Zear  1 maja 2007 o godz. 10:01 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Skorzystałem z tych samych narzędzi przy HOWTO: http://www.saout.de/tikiwiki/tiki-index.php?page=looptutorial

Mam 900 MHz i nie widzę różnicy w wydajności szyfrowanej partycji :)

 
zwiń wątek lipiec  1 maja 2007 o godz. 17:14 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

aposmyk1 maja 2007 o godz. 1:40
Dobrym pomyslem byloby wypelnienie partycji przypadkowymi danymi.

np:
cat /dev/urandom > /dev/da0
a pozniej:
cat /dev/urandom > /dev/mapper/home
a na samym koncu dopiero:
newfs /dev/mapper/home

Tak, masz rację, ale jest pewien problem. Jeżeli użytkownik ma słabszy komputer wypełnianie dość pojemnej partycji jak /home będzie nieco czasochłonne.

zwiń wątek ap  25 lipca 2007 o godz. 22:26 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Lepiej zrobic raz a dobrze nic pozniej sie zastanawiac czy biegly znajdzie jakis memory-leak w sektorach…

 
 
zwiń wątek psla  1 maja 2007 o godz. 18:43 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Nie wiem jak działa dokładnie cryptsetup, ale miłym zwyczajem jest wrzucenie losowych danych na partycję przed stawianiem szyfrowanego systemu plików. (jakiś cat /dev/urandom >> /dev/partycja)

 
zwiń wątek Hrw  2 maja 2007 o godz. 9:21 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Debian Etch pozwala zestawić CryptoLVM w trakcie instalacji. Zrobiłem tak na swoim laptopie i muszę przyznać, że nie sądziłem wcześniej, że to jest aż tak łatwe.

 
zwiń wątek lipiec  2 maja 2007 o godz. 14:09 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Hrw2 maja 2007 o godz. 9:21

Debian Etch pozwala zestawić CryptoLVM w trakcie instalacji. Zrobiłem tak na swoim laptopie i muszę przyznać, że nie sądziłem wcześniej, że to jest aż tak łatwe.

Tak, odnośnie do nowej wersji Debian’a właśnie została dodana taka funkcja przez co cały proces następuje praktycznie automatycznie.

 
zwiń wątek Spajdi  4 maja 2007 o godz. 19:45 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Nie rozumiem…
Złodzieje sie nie dostaną do katalogu /home na skradzionym komputerze, przecież ten katalog będzie automatycznie montowany.

 
zwiń wątek MAcks  6 maja 2007 o godz. 16:06 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

@ktoś
Poczytaj o plausible deniability (http://www.freeotfe.org/docs/plausible_deniability.htm). W TrueCrypt i FreeOTFE można robić takie rzeczy ‘out of the box’. Zazwyczaj robi się to poprzez umieszczenie na zaszyfrowanej partycji ‘pustej’ danych innego wolumenu zaszyfrowanych innym kluczem (hasłem), przesuwając trochę początek danych, aby nie nadpisać metadanych partycji niby-pustego kontenera. We FreeOTFE i TrueCrypcie za partycję podstawową robi FAT (ale pewnie można poeksperymentować z innymi FS-ami i ręcznym offsetem).
Warto zauważyć, że FreeOTFE potrafi montować woluminy utworzone pod linuksem: “Linux compatibility (Cryptoloop “losetup”, dm-crypt and LUKS supported)” w Windows.
Jest też darmowy gadżet (http://www.ce-infosys.com/english/products/free_compusec.html), który potrafi zaszyfrować cały dysk (nie partycję!) z bootującym Windows, ale to już niestety nie jest free software.

 
zwiń wątek mlody  7 maja 2007 o godz. 14:07 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]
 
zwiń wątek worm441@onet.eu  22 grudnia 2007 o godz. 18:03 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: -2 [Pokaż komentarz]

JAKI jest klucz dostępu do endorphin 2.7.1?????????????????????????????????????

 
zwiń wątek szarak  27 kwietnia 2008 o godz. 20:29 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

w artykule jest drobny blad (lepiej pozno zauwazyc niz wcale;p)

zamiast:

cryptsetup luksOpen /dev/hdc6

powinno byc

cryptsetup luksOpen /dev/hdc6 home

by zgadzalo sie z reszta artykulu. bez tego ostatniego parametru nie przejdzie ;)

zwiń wątek michuk  27 kwietnia 2008 o godz. 21:33 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Dzięki za wyłapanie, poprawione.

zwiń wątek szarak  19 maja 2008 o godz. 15:36 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

jeszcze dokladnie to samo w przykladzie montowania:

root@host:~# cryptsetup -y luksOpen /dev/hdc6
root@host:~# mount /dev/mapper/home /mnt/home

;)

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
 
 
 
Identyfikator (wymagane)
Adres e-mail (wymagany - nie pokażemy go publicznie)
Adres URI
Rozmiar pola: zmniejsz rozmiar | zwiększ rozmiar

Literówki najlepiej zgłaszać jabberem: michuk@jakilinux.org lub kocio@jabber.org!

W komentarzach możesz używać prostych znaczników HTML. Przykłady:
  • Link: <a href="jaklinux.org">Linux dla każdego</a>,
  • Wytłuszczenie: <strong>tekst pogrubiony</strong>,
  • Kursywa: <em>tekst pochylony</em>,
  • Przekreślenie: <strike>tekst przekreślony</strike>,
  • Kod: <code>printf("blok kodu");</code>,
  • Cytat: <blockquote>cytat</blockquote>
Uwaga: jeśli dodasz nieznany znacznik, będzie on niewidoczny, gdyż system filtruje takie znaczniki.

O Autorze

Marcin Lipiec

RSS

Możesz śledzić komentarze do tego artykułu poprzez specjalny kanał; RSS 2.0 .

Porównaj dystrybucje!

vs

Dołącz do nas!

Piszesz teksty o Linuksie? Nie pisz do poduszki! Publikuj na jakilinux.org!
Więcej o współpracy na blogu Grupy Jakilinux.

Butik JL

jakilinux butik
Obejrzyj więcej produktów i wybierz coś dla siebie.

Subskrybuj Biuletyn!

Biuletyn Grupy Jakilinux to okresowy subiektywny przegląd najważniejszych informacji o których piszemy w naszych serwisach, który wysyłamy e-mailem. Subskrybuj biuletyn!