Linux lemezkezelése 8. rész – Titkosított kötetek

A Linux számos lehetőséget ad kötetek titkosítására. Ilyenek a LUKS , dm-crypt, EncFS, CryFS, VeraCrypt vagy az eCryptfs. Mi most a LUKS és a VeraCrypt használatát fogjuk megismerni.


LUKS

A LUKS (Linux Unified Key Setup) a Linux rendszerbe integrált nyílt forráskódú lemeztitkosítási program. Széleskörűen támogatott, híres Könnyű kezelhetőségéről. Hátrányaként talán az hozható fel, hogy nem platformfüggetlen, így ha különböző operációs rendszerek között szeretnénk titkosított köteteket hordozni (pl. USB meghajtókon), akkor nem Linux rendszereken gondot okozhat az adatok elérése, mivel a Windows nem támogatja natívan. (De harmadik féltől származó programokkal megoldható a titkosított adatok elérése, ilyen például a FreeOTFE.)

A LUKS telepítése

Használatához a cryptsetup programra van szükségünk, mely ha nincs a rendszeren, installáljuk fel:

root@server:~# apt install cryptsetup

Titkosított kötet létrehozása

Válasszuk ki azt a partíciót, amelyet titkosítani szeretnénk. Legyen ez most az sdb1. Adjuk ki cryptsetup luksFormat /dev/sdb1 parancsot, amely miután figyelmeztet, hogy minden adat el fog veszni a partícióról, valamint egy megerősítés kérése után (Nagybetűvel kell írni a YES-t!), kétszer bekéri a titkosított lemez eléréséhez szükséges jelszót, majd kialakítja a titkosított partíciót:

root@server:~# cryptsetup luksFormat /dev/sdb1

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

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sdb1:
Verify passphrase:

Titkosított kötet megnyitása

A titkosított partíciót először meg kell nyitnunk a cryptsetup open paranccsal, ahol el is nevezzük. Később ezzel a névvel hivatkozhatunk rá. Legyen ez most securedata. Ehhez meg kell adni a korábbi jelszót.

root@server:~# cryptsetup open /dev/sdb1 securedata
Enter passphrase for /dev/sdb1:

Fájlrendszer létrehozása titkosított köteten

Ezután létre kell rajta hozni a fájlrendszert:

root@server:~# mkfs.ext4 /dev/mapper/securedata
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 10481408 4k blocks and 2621440 inodes
Filesystem UUID: 3de7b534-7054-4882-9955-690e3054db13
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done

Titkosított kötet lezárása

Ezután zárjuk le a titkosított kötetet:

root@server:~# cryptsetup close /dev/mapper/securedata

Titkosított kötet használata

Innentől kezdve van egy titkosított kötetünk, amelyet bármikor megnyithatunk a jelszó ismeretében, és felcsatolhatunk a fájlrendszerbe. Ha nincsen rá már szükségünk, akkor lecsatoljuk és lezárjuk. Nézzük meg hogyan látjuk a blokkos eszközök között a titkosított partíciót:

root@server:~# lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0  40G  0 disk
└─sdb1   8:17   0  40G  0 part

Egy normál partíciót látunk. Próbáljuk felcsatolni. Nem fog sikerülni, ismeretlen típusú a partíció.

root@server:~# mount /dev/sdb1 /mnt/adatok1
mount: /mnt/adatok1: unknown filesystem type 'crypto_LUKS'.

Bárhogy is próbáljuk a rajta lévő adatokat elérni, ha nem rendelkezünk a jelszóval, csak értelmetlen zagyvaságot találunk. Nyissuk meg most a kötetet a cryptsetup programmal. A jelszó ismeretében ezt meg is tudjuk tenni:

root@server:~# cryptsetup open /dev/sdb1 securedata
Enter passphrase for /dev/sdb1:

Most már megjelenik a blokkos eszközök között is:

root@server:~# lsblk /dev/sdb
NAME           MAJ:MIN RM SIZE RO TYPE  MOUNTPOINTS
sdb              8:16   0  40G  0 disk
└─sdb1           8:17   0  40G  0 part
  └─securedata 253:1    0  40G  0 crypt

Fel is tudjuk csatolni, és használhatjuk is:

root@server:~# mount /dev/mapper/securedata /mnt/adatok1

Ha nincsen rá szükségünk, akkor lecsatoljuk és lezárjuk:

root@server:~# umount /dev/mapper/securedata
root@server:~# cryptsetup close /dev/mapper/securedata

Titkosított kötet automatikus felcsatolása

Lehetőségünk van a titkosított partíció automatikus felcsatolására is az fstab fájlon keresztül. Ehhez helyezzünk el a következő sort a /etc/crypttab fájlban: (A none azt jelenti, hogy nem használunk kulcsfájlt, így induláskor kéri majd a jelszót.)

securedata /dev/sdb1 none

Az fstab-ban pedig a szokásos módon helyezzük el a becsatolandó kötetet:

/dev/mapper/securedata /mnt/adatok1/ ext4 defaults 0 0

A rendszerbetöltés folyamata ilyenkor megszakad a titkosított kötet becsatolásánál, hiszen meg kell adnunk a jelszót.

LUKS kulcsfájl használata

Lehetőségünk van egy kulcsfájlt is létrehozni, melynek segítségével interaktív beavatkozás nélkül is megnyitható és bacsatolható a kötet. A kulcsfájl lényegében egy véletlenszerű adatokat tartalmazó fájl, amelyet a LUKS a titkosításhoz és kivonatkészítéshez használt kulcsok generálásához használ fel. Hozzunk létre egy ilyen véletlen adatokkal feltöltött fájlt. Erre két eszközt használhatunk, a /dev/urandom, és a /dev/random eszközöket. A /dev/urandom gyorsabban adja a véletlen adatokat, és általában elegendő biztonságot nyújt, míg az /dev/random erősebb véletlen adatokat generál, de kisebb sebességgel.

root@server:~# dd if=/dev/urandom of=/root/securedata_key bs=512 count=4

Módosítsuk úgy a kulcsfájl jogosultságát, hogy csak a tulajdonos tudja és csak olvasásra elérni:

root@server:~# chmod 0400 /root/securedata_key

Ezt a kulcsfájlt most a titkosított kötethez rendeljük (meg kell adni a jelszót):

root@server:~# cryptsetup luksAddKey /dev/sdb1 /root/securedata_key
Enter any existing passphrase:

Innentől kezdve a titkosított kötethez kétféle módon tudunk hozzáférni: vagy a jelszóval, vagy a kulcsfájl segítségével. Ha például a kulcsfájllal akarjuk megnyitni a kötetet (vagyis ne kérje be a jelszót), így kell kiadnunk a korábbi parancsot:

root@server:~# cryptsetup open /dev/sdb1 securedata --key-file /root/securedata_key

Ha pedig az fstab-ból automatikusan akarjuk megvalósítani a felcsatolást, akkor a korábbinak megfelelően módosítsuk az fstab állományt, a /etc/crypttab fájlba pedig ezt a sort illesszük:

securedata /dev/sdb1 /root/securedata_key

VeraCrypt

A VeraCrypt telepítése

A VeraCrypt nagy előnye, hogy platformfüggetlen vagyis Linux, Windows és OSX alatt is támogatott, tehát ha például titkosított USB-meghajtót szeretnénk létrehozni, amelyet több operációs rendszeren is el akarunk érni, akkor érdemes használni. Ahhoz, hogy használni tudjuk, fel kell installálni. Mivel a csomag nem része a hivatalos Ubuntu csomagtárolónak, hozzá kell adnunk a tárolóját, és innen tudjuk telepíteni:

root@server:~# add-apt-repository ppa:unit193/encryption
root@server:~# apt update
root@server:~# apt install veracrypt

Ellenőrizzük le, hogy megfelelő verziót futtatunk-e:

root@server:~# veracrypt --version
VeraCrypt 1.25.9

VeraCrypt konténer típusok

A VeraCrypt-tel akár a lemezeken lévő partíciókat, akár saját magunk által létrehozott egy fájlban szimulált köteteket tudunk titkosítani. Ez utóbbit hívjuk konténernek. Partíciók titkosításához inkább a LUKS-ot használjuk, itt most mi a konténerek titkosítását nézzük meg. Kétféle konténert különböztet meg, ezek a normál és a rejtett konténer.

  • normál (normal): Ez az általánosan, leggyakrabban használt titkosított konténer. A kötet tartalma és a titkosítási adatok együtt vannak a konténerben tárolva.
  • rejtett (hidden): Egy titkosított konténerben tárolt újabb titkosított konténer. Ennek az az értelme, hogy ha valakinek meg kell adnunk a külső konténer használatához szükséges jelszót, akkor a belső konténer még ezzel nem tudja elérni. (Egy VeraCrypt konténerben a szabad hely is véletlenszerű adatokkal van teleírva, így semmilyen módszerrel nem mutatható ki, hogy egy konténerben van-e elrejtett másik konténer.) A külső konténer foglalt byte-jainak számába nem számít bele a rejtett konténer mérete.

Normál konténer létrehozása

Hozzunk létre egy normál konténert a secdata.vc fájlban:

root@server:~# veracrypt -t --create /root/secdata.vc

Kiadva a parancsot, számos kérdést kell megválaszolnunk. Így meg kell adnunk, hogy normál vagy rejtett konténert akarunk létrehozni, be kell állítanunk a konténer méretét, a kívánt titkosítási és Hash algoritmust, a kötet fájlrendszerének formátumát, a jelszót, a PIM értékét, valamint amennyiben szükséges a kulcsfájlt. A PIM (Personal Iterations Multiplier) értéke befolyásolja a titkosítás feltörésének bonyolultságát. (Egy iteráció számát határozza meg az algoritmusban.) Minél nagyobb a PIM, annál nehezebb feltörni. Ha gyenge jelszót adunk meg, akkor kötelező PIM értéket is beállítani, erős jelszónál csak ajánlott. Ügyeljünk arra, hogy ahogyan a jelszót, a PIM értékét is titokban kell tartanunk, és ha kéri a rendszer, meg kell adnunk. A végén még vagy 320 véletlenszerű karaktert is le kell nyomnunk a billentyűzeten véletlenszerűen. (A -t kapcsoló a –text rövidítése, amivel jelezzük a veracrypt-nek, hogy szöveges módban használjuk, és nem a GUI-n keersztül.)

Titkosított konténer létrehozható úgy is, hogy a korábban feltett interaktív kérdésekra adott válaszokat parancssorosan adjuk át. Ez a parancs például egy 100 MB méretű VeraCrypt konténert hoz létre (“secdata.vc” névvel), AES titkosítással, SHA-512 jelszó hash-eléssel, exFAT fájlrendszerrel, 0 PIM értékkel és egy véletlen adatforrás segítségével a kulcsok generálásához. A konténer jelszavát a megadott erős jelszóval védve hozza létre.

root@server:~# veracrypt --text --create secdata.vc --size 100M --password TitkosJelszo! --volume-type normal --encryption AES --hash sha-512 --filesystem exfat --pim 0 --keyfiles "" --random-source randomdata.txt

A kulcsok generáláshoz szükséges randomdata.txt állományt például így állíthatjuk elő:

root@server:~# dd if=/dev/urandom of=randomdata.txt bs=1M count=10

Normál konténer felcsatolása

Ahhoz, hogy a konténerben adatokat tudjunk tárolni, fel kell csatolnunk a következő módon. A felcsatoláshoz meg kell adnunk a jelszót és a PIM értékét. (Kulcsfájlt most nem használtunk, így azt nem kell megadni.)

root@server:~# veracrypt -t /root/secdata.vc /mnt/adatok1

A VeraCrypt konténer is felcsatolható úgy, hogy minden szükséges információt a parancssorból adunk meg:

root@server:~# veracrypt --text --mount secdata.vc /mnt/adatok1 --password TitkosJelszo! --pim 0 --keyfiles "" --protect-hidden no

A felcsatolt VeraCrypt kötetek listája lekérdezhető:

root@server:~# veracrypt -t -l
1: /root/secdata.vc /dev/mapper/veracrypt1 /mnt/adatok1

Konténer lecsatolása

Ha befejeztük a munkát, akkor lecsatolhatjuk a konténert. Ezt többféleképpen is megtehetjük, a két legelterjedtebb módszer a konténer vagy a csatolási pont megadása.

root@server:~# veracrypt -d /mnt/adatok1
root@server:~# veracrypt -d secdata.vc

Ha csak a -d paramétert adjuk meg, akkor minden felcsatolt VeraCrypt konténer lecsatolásra kerül.

VeraCrypt kulcsfájl használata

A VeraCrypt esetében is használhatunk kulcsfájlt. A kulcsfájllal kiegészíthetjük a jelszót, vagyis nem elég a jelszót és a PIM értékét tudni, hanem rendelkeznünk kell a kulcsfájllal is. A kulcsfájlt ismét a random vagy urandom eszközzel hozzuk létre.

root@server:~# dd if=/dev/urandom of=keyfile.vc bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00312228 s, 336 MB/s

természetesen itt is gondosan ügyeljünk, hogy csak a tulajdonosnak legyen hozzáférése. A legenerált kulcsfájllal kiegészítve (–keyfiles “keyfile.vc”) aztán generálhatunk új konténert, illetve csatolhatjuk be a fájlrendszerbe. Érdekességképpen megemlíthető, hogy konténer csak kulcsfájllal is létrehozható, vagyis nincsen szükség jelszóra, ilyenkor a –password kapcsoló után üres karaktersorozatot (“”) adunk meg..

Rejtett konténer létrehozása

Mint korábban írtuk, a normál konténeren belül rejtett konténer hozható létre azzal a céllal, hogy ha bármilyen oknál fogva (akár kényszerből is) ki kellene adni a külső (normál) konténer jelszavát, a belsőhöz ne kapjanak mások hozzáférést. Az, hogy egy normál konténer tartalmaz-e rejtett részt, semmilyen külső módszerrel nem állapítható meg.

Egy rejtett konténer létrehozása két lépésből áll. Először létrehozunk egy hagyományos normál konténert, majd ebben hozzuk létre a rejtettet. (Természetesen mindkét lépésben ugyanazt a fájlnevet kell megadnunk.) Nagyon fontos, hogy a két konténernek két különböző jelszót adjunk. Ezek után attól függően, hogy melyik jelszóval csatoljuk fel a konténert, a normál vagy a rejtett konténer tartalmát érjük el. Az, hogy egy normál konténer rejtett konténert is tartalmaz, semmilyen módon nem határozható meg!

A VeraCrypt fejlesztői viszont felhívják a figyelmet, hogy ha rejtett konténert használunk, akkor megvan annak a valószínűsége, hogy a külső konténerre írta adatokkal felülírhatjuk a rejtett adatait. Ennek elkerülése érdekében, ha a normál konténer felcsatolása közben a Protect hidden volume (if any)? (y=Yes/n=No) [No]: kérdésre Yes-szel válaszolunk, akkor a rejtett jelszavának megadása után a normál írásvédetten kerül felcsatolásra annak érdekében, hogy nehogy felülírjuk a rejtett területét.

A cikkben szereplő példákban közvetlenül root felhasználóként bejelentkezve adjuk ki a parancsokat azért, hogy az állandó sudo használata ne vonja el a figyelmet magáról a parancsok használatáról. Felhívjuk a figyelmet viszont arra, hogy éles rendszerekben biztonsági szempontokból a sudo használata erősen ajánlott!

This will close in 20 seconds