Cryptsetup – Szyfrujemy lokalny katalog na Linuxie

Szyfrowanie danych jest jednym z najważniejszych elementów zabezpieczeń w środowiskach IT, a różnorodność i mnogość technologii pozwala nam na korzystanie z tych najbardziej wygodnych. W dzisiejszym artykule na przykładzie systemu z rodziny RHEL pokażę jak można szyfrować lokalne katalogi narzędziem prosto z repozytorium. W systemie CentOS 9 Stream, bo na takim oparłem ten artykuł jednym […]

Kwi 8, 2025 - 08:47
 0
Cryptsetup – Szyfrujemy lokalny katalog na Linuxie

Szyfrowanie danych jest jednym z najważniejszych elementów zabezpieczeń w środowiskach IT, a różnorodność i mnogość technologii pozwala nam na korzystanie z tych najbardziej wygodnych. W dzisiejszym artykule na przykładzie systemu z rodziny RHEL pokażę jak można szyfrować lokalne katalogi narzędziem prosto z repozytorium. W systemie CentOS 9 Stream, bo na takim oparłem ten artykuł jednym z najpopularniejszych narzędzi do zarządzania szyfrowanymi wolumenami jest cryptsetup. To elastyczna aplikacja umożliwiająca tworzenie i zarządzanie szyfrowanymi partycjami oraz katalogami z wykorzystaniem różnych algorytmów szyfrowania. Cryptsetup obsługuje między innymi technologie takie jak LUKS (Linux Unified Key Setup), oferując algorytmy takie jak AES (Advanced Encryption Standard) z różnymi trybami, np. XTS czy CBC. Narzędzie charakteryzuje się łatwością użytkowania oraz wsparciem dla kluczy szyfrujących o wysokim poziomie zabezpieczeń, co czyni je idealnym wyborem dla użytkowników i administratorów systemów Linux.

Cryptsetup bazuje na module jądra Linuksa o nazwie dm-crypt (Device Mapper Crypt), który stanowi warstwę szyfrowania dla urządzeń blokowych. Dm-crypt jest najważniejszym elementem całego procesu szyfrowania, ponieważ działa na poziomie jądra systemu, zapewniając transparentne szyfrowanie i deszyfrowanie danych w locie. Dzięki tej architekturze dane zapisane na dysku są automatycznie szyfrowane przed ich zapisaniem i deszyfrowane podczas odczytu, co eliminuje potrzebę ręcznego zarządzania szyfrowaniem przez aplikacje użytkownika. Dm-crypt oferuje obsługę wielu algorytmów szyfrowania, jak AES, Serpent czy Twofish, i pozwala na wykorzystanie trybów operacyjnych takich jak XTS czy CBC, dostosowując się do różnych wymagań bezpieczeństwa. Ponadto, dzięki integracji z Device Mapper, dm-crypt wspiera zaawansowane funkcje, takie jak tworzenie szyfrowanych wolumenów na macierzach RAID czy urządzeniach LVM, co czyni go niezwykle elastycznym i wszechstronnym rozwiązaniem. Dzięki dm-crypt, cryptsetup umożliwia również szyfrowanie dynamicznych systemów plików oraz łatwe zarządzanie kluczami szyfrującymi, co pozwala na bezproblemową implementację nawet w skomplikowanych środowiskach.

Przygotowanie środowiska

Możemy szyfrować całe partycje, ale też pojedyncze pliki, tak zwane kontenery, które będą mogły być zamontowane jako katalog w linuxie po odszyfrowaniu. W tym artykule pokażę jak stworzyć blok (kontener) o wielkości 100 MB i zaszyfrować go.

Utworzenie katalogu

dd if=/dev/zero of=/szyfrowany_katalog bs=1M count=100

losetup /dev/loop0 /szyfrowany_katalog

Zaszyfrowanie katalogu

cryptsetup luksFormat /dev/loop0

Warto w tym miejscu wspomnieć, że hasło musi być w miarę złożone i mieć przynajmniej 8 liter.

Otwarcie i formatowanie

Samo utworzenie kontenera jeszcze nie pozwala na umieszczenie w nim plików. Należy go „otworzyć” oraz sformatować tak jak to robimy przy zwykłej partycji.

cryptsetup open /dev/loop0 szyfrowany_katalog

mkfs.ext4 /dev/mapper/szyfrowany_katalog

Po sformatowaniu naszego kontenera jest on dostępny do zamontowania w podobny sposób jak robi się to ze zwykłymi dyskami.

Montowanie kontenera

mkdir /mnt/szyfrowany

mount /dev/mapper/szyfrowany_katalog /mnt/szyfrowany

Uwaga:

Po zamontowaniu szyfrowanego katalogu o rozmiarze 100 MB widoczne jest tylko 74 MB, ponieważ część dostępnego miejsca jest wykorzystywana przez system plików i metadane.

Zwiększenie rozmiaru

Załóżmy, że chcielibyśmy dorzucić dodatkowe 100 MB do katalogu szyfrowanego.

dd if=/dev/zero bs=1M count=100 >> /szyfrowany_katalog

losetup -c /dev/loop0

cryptsetup resize szyfrowany_katalog

resize2fs /dev/mapper/szyfrowany_katalog

Musimy zauważyć, że linijka dd if=/dev/zero bs=1M count=100 >> /szyfrowany_katalog

Dorzuci do istniejącego kontenera 100 MB, nie ustawi go na konkretny rozmiar. Jeśli zatem mieliśmy wcześniej 100 MB i dodamy 100 MB to będziemy mieć 200 MB razem.

Benchmark

Jak już wspomniałem cryptsetup obsługuje różne algorytmy. Narzędzie dostarcza natywne rozwiązanie do przetestowania, która z kombinacji będzie najszybsza w naszym systemie. Możemy przetestować czy algorytm, który chcemy wybrać, nie będzie zbyt wolny.

cryptsetup benchmark

Przełączniki

Jak każda aplikacja w systemie Linux tak i cryptsetup ma różne przełączniki, a najważniejsze z nich omówię poniżej.

luksFormat – inicjalizuje wolumen LUKS na danym urządzeniu. Wymaga podania hasła i algorytmu.

cryptsetup luksFormat /dev/sdX

open – otwiera szyfrowany wolumen, czyniąc go dostępnym pod /dev/mapper/nazwa.

cryptsetup open /dev/sdX nazwa

close – zamyka otwarty szyfrowany wolumen.

cryptsetup close nazwa

luksAddKey – dodaje nowy klucz do istniejącego wolumenu.

cryptsetup luksAddKey /dev/sdX

luksRemoveKey – usuwa klucz z wolumenu

cryptsetup luksRemoveKey /dev/sdX

status – wyświetla szczegółowe informacje o otwartym wolumenie.

cryptsetup status nazwa

luksDump – wyświetla informacje o nagłówku LUKS, takie jak algorytm szyfrowania czy liczba kluczy.

cryptsetup luksDump /dev/sdX

benchmark – uruchamia testy wydajności algorytmów szyfrowania, co pozwala dobrać najlepszy dla danego systemu.

cryptsetup benchmark

Podsumowanie

Cryptsetup to potężne narzędzie w świecie Linuksa, służące do zarządzania szyfrowaniem wolumenów. Wykorzystywane jest głównie w połączeniu z LUKS (Linux Unified Key Setup) i umożliwia użytkownikom szyfrowanie zarówno całych partycji, jak i pojedynczych plików pełniących rolę wirtualnych urządzeń blokowych (kontenerów). Dzięki zaawansowanej architekturze cryptsetup obsługuje szeroki zakres algorytmów szyfrowania, które oferują wysokie bezpieczeństwo danych. Dodatkowo fakt, że samo narzędzie dostępne jest w standardowym repozytorium systemu sprawia, że jest to przydatne i łatwe w implementacji rozwiązanie, którym warto się zainteresować jeśli myślimy o szybkim i skutecznym szyfrowaniu.