FreeBSD kézikönyv
Előző | Fejezet 18. Háttértárak | Következő

# 18.16. A lemezpartíciók titkosítása

Írta: Lucky Green.

A FreeBSD kitűnő futásközbeni védelmet ajánl fel az adatok illetéktelen hozzáférése ellen. Az állományok engedélyei és a kötelező hozzáférés-vezérlés (Mandatory Access Control, MAC, lásd 16 fejezet) segítenek megvédeni érzékeny adatainkat az illéktelenek ellen az operációs rendszer futása és a számítógép működése során. Azonban az operációs rendszerben kezelt engedélyek teljesen hatástalanok abban az esetben, ha a támadó fizikailag is képes hozzáférni a számítógépünkhöz, eltávolítani a merevlemezt és egy másik operációs rendszer segítségével kielemezni a rajta található fontos adatainkat.

Függetlenül attól, hogy a támadó valójában miként is férkőzött hozzá a merevlemezünkhöz, vagy miként kapcsolta le a számítógépünket, a FreeBSD megtalálható GEOM alapú lemeztitkosítás (gbde) és a `geli` titkosítási alrendszer egyaránt képes védelmet nyújtani a számítógépen található állományrendszerek számára az értékes adatok után kutató igen motivált betörők ellen. A csupán egyes állományokra kiterjedő körmönfont titkosítási módszerekkel szemben a `gbde` és a `geli` az egész állományrendszert észrevétlen módon titkosítja. Titkosítatlan adat nem is kerül a merevlemezre.

## 18.16.1. A lemez titkosítása a gbde használatával

1. Váljunk `root` felhasználóvá

   A gbde beállításához rendszeradminisztrátori jogosultságokra lesz szükségünk.

       % su -
       Password:

2. Adjuk hozzá a gbde(4) támogatását a rendszermag konfigurációs állományához

   Tegyük a következő sort a rendszermag beállításait tartalmazó állományba:

   `options GEOM_BDE`

   Fordítsuk újra a rendszermagot a 8 fejezetben leírtak szerint.

   Indítsuk el a számítógépet az új rendszermaggal.

3. A rendszermag újrafordítása helyett a `kldload` paranccsal is betölthetjük a gbde(4) modulját:

       # kldload geom_bde

### 18.16.1.1. A titkosított merevlemez előkészítése

A következő példa azt feltételezi, hogy a rendszerünkhöz egy új merevlemezt adunk hozzá, amin egyetlen titkosított partíció foglal helyet. Ezt a partíciót a `/private` könyvtárba fogjuk csatlakoztatni. A gbde használható a `/home` és a `/var/mail` titkosítására is, de ennek megvalósítása olyan bonyolult utasításokat igényel, amelyek meghaladják ennek a bevezetésnek a kereteit.

1. Az új merevlemez hozzáadása

   A 18.3 Szakaszban bemutatottak szerint adjuk hozzá a rendszerünkhöz az új merevlemezt. A példában az új lemez partícióját a `/dev/ad4s1c` néven fogjuk tudni elérni. A `/dev/ad0s1`*`` eszközök a példában szereplő FreeBSD rendszer szabványos partícióit jelölik.

       # ls /dev/ad*
       /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
       /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
       /dev/ad0s1a     /dev/ad0s1d     /dev/ad4

2. Hozzunk létre egy könyvtárat a gbde zárolásainak tárolásához

       # mkdir /etc/gbde

   A gbdenek azért van szüksége a zárolásokat rögzítő állományokra, hogy hozzá tudjon férni a titkosított partíciókhoz. Amennyiben ezt nem tudja megtenni, a gbde anélkül nem lesz képes visszafejteni a titkosított partíciókon tárolt adatokat, hogy az ezeket elérni akaró szoftvereknek ne kelljen jelentősebb mértékben manuálisan beavatkoznia. Mindegyik titkosított partíció külön zároló állományt használ.

3. A gbde partíció inicializálása

   A gbde által használt partíciókat használatuk előtt inicializálni kell. Ezt a műveletet azonban csak egyszer kell elvégezni:

       # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock

   A gbde(8) ekkor elindít egy szövegszerkesztőt és benne egy sablon segítségével be tudjuk állítani a különböző konfigurációs értékeket. Az UFS1 vagy UFS2 használata esetén állítsuk a szektorméretet 2048-ra:

       $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $
       #
       # Sector size is the smallest unit of data which can be read or written.
       # Making it too small decreases performance and decreases available space.
       # Making it too large may prevent filesystems from working.  512 is the
       # minimum and always safe.  For UFS, use the fragment size
       #
       sector_size     =       2048
       [...]

   A megjegyzés fordítása:

       A szektorméret az adatok írásának és olvasásának legkisebb egysége.  Ha
       túlságosan kicsire választjuk meg, akkor csökken a teljesítmény és csökken a
       rendelkezésre álló hely.  Ha viszont túlságosan nagyra hagyjuk, akkor azzal
       akadályozzuk az állományrendszerek munkáját.  512 a legkisebb érték, amely mindig
       megbízható.  Az UFS esetén használjuk a fragmensek méretét.

   A gbde(8) kétszer is rá fog kérdeni az adatok titkosítására használt jelmondatra. A jelmondatnak természetesen mind a kétszer ugyanannak kell lennie. A gbde védelmének hatékonysága teljesen mértékben az általunk választott jelmondat minőségétől függ [1].

   A `gbde init` parancs létrehoz egy zároló állományt a gbde partícióhoz, amely ebben a példában az `/etc/gbde/ad4s1c.lock` néven keletkezett. A gbde zároló állományainak “.lock” névre kell végződniük, mivel az `/etc/rc.d/gbde` indítószkript csak ebben az esetben észleli rendesen.

   > Figyelem: A gbde zároló állományait a titkosított partíciók tartalmával együtt kell lementeni. Miközben a zároló állomány törlése nem tudja megakadályozni, hogy az elszánt támadó visszafejtse a gbde által titkosított partíciót, addig a zároló állomány nélkül a jogos tulajdonos órási mennyiségű munka befektetése nélkül képtelen lesz hozzáférni a rajta levő adatokhoz. Ez utóbbitól egyébként a gbde(8) és a rendszer tervezője is totálisan elhatárolja magát.

4. A titkosított partíció illesztése a rendszermaghoz

       # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock

   Ekkor a titkosított partíció illesztéséhez a rendszer kérni fogja az inicializálás során választott jelmondatot. Ezután az új titkosított eszköz megjelenik a `/dev` könyvtárban `/dev/`eszköznév`.bde` néven:

       # ls /dev/ad*
       /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
       /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
       /dev/ad0s1a     /dev/ad0s1d     /dev/ad4        /dev/ad4s1c.bde

5. Állományrendszer kialakítása egy titkosított eszközön

   Ahogy sikerült a titkosított eszközt illeszteni a rendszermaghoz, létre is tudunk hozni egy állományrendszert rajta. Erre a célra a newfs(8) remekül használható. Mivel egy új UFS2 állományrendszerek inicializálása sokkal gyorsabb a régi UFS1 állományrendszerek inicializálásánál, ezért a newfs(8) használata esetén az `-O2` beállítás megadása ajánlott.

       # newfs -U -O2 /dev/ad4s1c.bde

   > Megjegyzés: A newfs(8) parancsot egy illesztett gbde partíción kell végrehajtani, amit onnan ismerhetünk meg, hogy az eszköz nevében szerepel a ``*`.bde` kiterjesztés.

6. A titkosított partíció csatlakoztatása

   Hozzunk létre egy csatlakozási pontot a titkosított állományrendszer számára.

       # mkdir /privát

   Csatlakoztassuk a titkosított állományrendszert.

       # mount /dev/ad4s1c.bde /privát

7. Ellenőrizzük a titkosított állományrendszer működőképességét

   A titkosított állományrendszert most már látja a df(1) program és készen áll a használatra.

       % df -H
       Filesystem        Size   Used  Avail Capacity  Mounted on
       /dev/ad0s1a      1037M    72M   883M     8%    /
       /devfs            1.0K   1.0K     0B   100%    /dev
       /dev/ad0s1f       8.1G    55K   7.5G     0%    /home
       /dev/ad0s1e      1037M   1.1M   953M     0%    /tmp
       /dev/ad0s1d       6.1G   1.9G   3.7G    35%    /usr
       /dev/ad4s1c.bde   150G   4.1K   138G     0%    /private

### 18.16.1.2. Létező titkosított állományrendszerek csatlakoztatása

A rendszer minden egyes indítása után az összes titkosított állományrendszert tényleges használata előtt újra illeszteni kell a rendszermaghoz, ellenőrizni az épségét és csatlakoztatni. Az ehhez szükséges parancsokat `root` felhasználóként kell kiadni.

1. A gbde partíció illesztése a rendszermaghoz

       # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock

   A gbde partíció inicializálása során megadott jelmondatot kell megadnunk a művelet elvégzéséhez.

2. Az állományrendszer épségének ellenőrzése

   Mivel a titkosított állományrendszerek az automatikus csatlakoztatáshoz még nem szerepeltethetőek az `/etc/fstab` állományban, ezért az ilyen állományrendszereket csatlakoztatásuk előtt manuálisan ellenőriztetni kell a fsck(8) lefuttatásával.

       # fsck -p -t ffs /dev/ad4s1c.bde

3. A titkosított állományrendszer csatlakoztatása

       # mount /dev/ad4s1c.bde /privát

   A titkosított állományrendszer most már készen áll a használatra.

#### 18.16.1.2.1. A titkosított partíciók önálló csatlakoztatása

Lehet írni olyan szkriptet, amely a titkosított partíciókat magától illeszti, ellenőrzi és csatlakoztatja, de biztonsági megfontolásokból semmi esetben sem szabad tartalmaznia a gbde(8) jelszavát. Ehelyett azt javasoljuk, hogy az ilyen szkripteknek külön meg kelljen adni a jelszót konzolon vagy az ssh(1) használatán keresztül.

De használhatjuk a mellékelt `rc.d` szkriptet is. A szkript paramétereit az rc.conf(5) állományon keresztül adhatjuk meg, például:

    gbde_autoattach_all="YES"
    gbde_devices="ad4s1c"
    gbde_lockdir="/etc/gbde"

Ilyenkor a gbde által használt jelmondatot a rendszer indításakor kell megadni. Miután begépeltük a megfelelő jelmondatot, a titkosított gbde partíció magától csatlakoztatásra kerül. Ez akkor lehet hasznos, ha a gbde megoldását hordozható számítógépeken alkalmazzuk.

### 18.16.1.3. A gbde által alkalmazott titkosítási módszerek

A gbde(8) a szektorok tartalmát 128 bites AES használatával CBC módban titkosítja. A lemezen található minden egyes szektort eltérő AES kulccsal kódolja. A gbde kriptográfiai felépítését, valamint mindazt, hogy az egyes szektorok kulcsai miként származtathatóak a felhasználó által megadott jelmondatból, a gbde(4) man oldalán olvashatjuk.

### 18.16.1.4. Kompatibilitási problémák

A sysinstall(8) nem kompatibilis a gbde által titkosított eszközökkel. A sysinstall(8) indítása előtt minden ``*`.bde` eszközt ki kell iktatni a rendszermagból, különben az eszközök keresése során össze fog omlani. A példánkban használt titkosított eszközt a következő paranccsal kell lekapcsolni:

    # gbde detach /dev/ad4s1c

Továbbá megjegyezzük azt is, hogy a vinum(4) nem használja a geom(4) alrendszert, ezért a gbde alkalmazása során nem használhatunk Vinum-köteteket.

## 18.16.2. A lemezek titkosítása a `geli` használatával

Írta: Daniel Gerzo.

A FreeBSD 6.0 változatától kezdve egy új kriptográfiai GEOM osztály is a rendelkezésünkre áll, melyet pillanatnyilag Pawel Jakub Dawidek `<pjd@FreeBSD.org>` fejleszt. A `geli` segédprogram némileg különböző a `gbde` megoldásától -- más lehetőségeket kínál fel és a titkosítást is egy eltérő séma mentén valósítja meg.

A geli(8) legfontosabb jellemzői a következők:

- A crypto(9) keretrendszerét használja -- tehát ha rendelkezünk kriptográfiai hardverrel, akkor a `geli` automatikusan használni fogja.

- Több kriptográfiai algoritmust is ismer (melyek jelenleg az AES, Blowfish és a 3DES).

- Segítségével a rendszerindításhoz használt (gyökér) partíció is titkosítható. Ilyenkor a szükséges jelmondatot a rendszer indításakor kell megadni.

- Két független kulcsot (például egy “kulcsot” és egy “céges kulcsot”) is használhatunk vele.

- A `geli` gyors -- egyszerűen csak szektorról szektorra titkosít.

- Lehetővé teszi a mesterkulcsok mentését is visszaállítását. Ha a felhasználó véletlenül megsemmisítené a kulcsát, akkor a biztonsági mentésből helyreállított kulcsok segítségével vissza tudjuk szerezni az adatainkat is.

- Segítségével a lemezeket véletlenszerű, egyszeri jelszavakkal is illeszthetjük -- ez különösen fontos lapozóterületek és ideiglenes állományrendszerek esetében.

A `geli` által felkínált lehetőségekről a geli(8) man oldalán találhatunk többet.

A következő lépések bemutatják, hogyan lehet a FreeBSD rendszermagjában engedélyezni a `geli` támogatását, és hogyan lehet létrehozni és használni egy `geli` titkosítással rendelkező adathordozót.

A `geli` alkalmazásához legalább a FreeBSD 6.0-RELEASE vagy későbbi változatára van szükségünk. Mivel a rendszermagot is módosítanunk kell, ezért rendszeradminisztrátori jogosultságok kellenek a műveletek elvégzéséhez.

1. A `geli` támogatásának hozzáadása a rendszermaghoz

   Vegyük hozzá a következő sorokat a rendszermag beállításait tartalmazó állományhoz:

       options GEOM_ELI
       device crypto

   Fordítsuk újra a rendszermagot a 8 fejezetben leírtak szerint.

   Betölthetjük a `geli` modulját is a rendszer indításakor. Ehhez a következő sort kell betenni a `/boot/loader.conf` állományba:

       geom_eli_load="YES"

   A geli(8) most már használható a rendszermagban.

2. A mesterkulcs legenerálása

   A most következő példában egy kulcsot tartalmazó állomány létrehozását illusztráljuk, amit a ``/privát`` könyvtárba csatlakoztatott titkosított adathordozó mesterkulcsához fogunk használni. A kulcs állomány a mesterkulcs titkosításához felhasznált véletlenszerű adatot fogja tartalmazni, valamint rajta kívül még a mesterkulcsot egy jelmondattal is védjük. Az adathordozó szektormérete 4 kilobyte-os lesz. Emellett még bemutatjuk, hogyan kell illeszteni egy `geli`-adathordozót, állományrendszert létrehozni rajta, csatlakoztatni, dolgozni vele és lekapcsolni.

   A nagyobb teljesítmény érdekében javasolt nagyobb szektorméretet választani (mint például 4 kilobyte).

   A mesterkulcsot egy jelmondattal fogjuk védeni és a kulcsok készítéséhez használt adatforrás a `/dev/random` lesz. A `/dev/da2.eli`, amelyet mit csak adathordozónak fogunk csak hívni, szektorainak mérete 4 kilobyte lesz.

       # dd if=/dev/random of=/root/da2.key bs=64 count=1
       # geli init -s 4096 -K /root/da2.key /dev/da2
       Enter new passphrase:
       Reenter new passphrase:

   Nem kötelező egyszerre használni a jelmondatot és a kulcs állományt. A mesterkulcs elzárásának bebiztosítására bármelyik módszer alkalmas.

   Ha a kulcs állomány a “-” paraméterrel adjuk meg, akkor a szabványos bemenetről olvassa be a program. Ez a példa több kulcs használatát mutatja be.

       # cat kulcs1 kulcs2 kulcs3 | geli init -K - /dev/da2

3. Az adathordozó illesztése a generált kulccsal

       # geli attach -k /root/da2.key /dev/da2
       Enter passphrase:

   Az új titkosítatlan eszköz neve `/dev/`da2`.eli` lesz.

       # ls /dev/da2*
       /dev/da2  /dev/da2.eli

4. Az új állományrendszer kialakítása

       # dd if=/dev/random of=/dev/da2.eli bs=1m
       # newfs /dev/da2.eli
       # mount /dev/da2.eli /privát

   A titkosított állományrendszer most már df(1) számára is látszik és használható:

       # df -H
       Filesystem     Size   Used  Avail Capacity  Mounted on
       /dev/ad0s1a    248M    89M   139M    38%    /
       /devfs         1.0K   1.0K     0B   100%    /dev
       /dev/ad0s1f    7.7G   2.3G   4.9G    32%    /usr
       /dev/ad0s1d    989M   1.5M   909M     0%    /tmp
       /dev/ad0s1e    3.9G   1.3G   2.3G    35%    /var
       /dev/da2.eli   150G   4.1K   138G     0%    /private

5. Az adathordozó leválasztása és lekapcsolása

   Miután befejeztük a munkát a titkosított partíción, és a ``/privát`` partícióra már nincs tovább szükségünk, érdemes leválasztanunk és kiiktatnunk a `geli` titkosítású partíciót a rendszermagból.

       # umount /privát
       # geli detach da2.eli

A geli(8) használatáról bővebben a saját man oldalán tájékozódhatunk.

### 18.16.2.1. A `geli` `rc.d` szkriptjének használata

A `geli` mellett találhatunk egy saját `rc.d` szkriptet, amely jelentősen leegyszerűsíti a `geli` használatát. A `geli` például így paraméterezhető az rc.conf(5) állományon keresztül:

    geli_devices="da2"
    geli_da2_flags="-p -k /root/da2.key"

Ennek segítségével a `/dev/da2` eszközt `geli` adathordozóként állítjuk be a `/root/da2.key` állományban található mesterkulcs felhasználásával, de az illesztéskor a `geli` nem kér jelmondatot (ezt csak akkor fogja tenni, ha a `geli init` parancs kiadásához hozzátesszük a `-P` beállítást). A rendszer leállítása előtt pedig a `geli` adathordozó így automatikusan leválasztásra kerül.

Az `rc.d` beállításával kapcsolatos tudnivalókat a kézikönyv rc.d szkriptekről szóló szakaszában ismerhetjük meg.

### Megjegyzések

[1] | A könnyen megjegyezhető ám mégis biztonságos jelmondatok megválasztásához a Diceware Passphrase honlapján találunk egy kis segítséget (angolul).

Előző | Tartalom | Következő
Az állományrendszerek kvótái | Fel | A lapozóterület titkosítása

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.