zfs + geli + dropbear

Dan Lukes dan at obluda.cz
Mon Jan 9 16:06:02 CET 2012


On 01/09/12 14:45, Honza Klokanek Sipek:
> dik. vicemene to jsem potreboval slyset.

Tak ja si budu chvili premyslet nahlas.

Chapu, ze pred pripadnym zlodejem, ktery uloupi disk a odnese ho chranis 
"uzivatelska data". Ale nevidim smysl v ochrane /bin nebo /sbin - u toho 
stejne vsichni vedi co v nich mas.

Pokdu se snad bojis, ze by pripadny zlodej disk vytahnul z pocitace jen 
na chvilku a pak ho vratil s pozmenenymi binary (aby se tka dostal k 
uzivatelskym datum), no je potreba videt, ze schopny zlodej ti v takovem 
pripade predevsim proste vymeni kernel. A ten, jak vime, sifrovanej byt 
nemuze.

A kdyz budu chtit bejt svine, tak ti tam dokonce vymenim BIOS - ono to 
neni az tak slozite, a v ramci zavadeni si misto tveho /boot/loader 
natahnu muj /boot/loader - a ten navic bud tahat z tech par cylindru, 
ktere na konci kazdeho disku skoro vzdycky zbudou. Vubec o tom nebudes 
vedet. Klidne si ze sveho /boot/loader klidne pocitej checksumy to je mi 
uplne fuk.

Tim chci rict, ze urcite veci v soucasne chvili proste nevyresis bez 
zajisteni fyzicke bezpecnosti. V tom smyslu, ze vstupu utocnika k 
serveru nemuzes dokonal zabranit - takze uzitecna data jsou sirovana, 
ale musis byt schopen takovy neopravneny vstup alespon zdetekovat - a v 
takovem pripade povazovat stroj za uspesne napadeny a neduveryhodny i 
kdyz se nic neztrati a podle vseho tam ten divnej pan neudelal vubec nic.

K cemu smeruju ? Pokud mas uzivatelska citliva data na vyhrazenem 
svazku, kteru lze moutovat jako "late" tak ej tvoej uloha v podstate 
trivialni - v dobe mountovani "late" disku je uz sit k dispozici. Staci 
tomu predradit jeden sript, ktery nejak sezene to heslo, ktere prislusny 
svazek potrebuje.


Rekneme ale, ze jsem neco prehledl, a ma skutecne nejaky rozumny smysl 
sifrovat i vseobecne znama data.

Jednu cestu uz jsem naznacil - jenze - to znamena uplne prevorat 
soucasny rc.d subsystem (zmenit poradi). Nejenze je to prace pro vraha v 
tomhle okamziku a ohromnu prostor k ruznejm chybam. Ale taky to ze 
systemu dela obtizne udrzovatelny unikat. Po nejblizsim upgrade to budes 
muset cele delat znovu. Nebo ten system neaktualizovat - oboji nevypada 
lakave.

Takze jinak. Co si takhle na zacatku jen vymenit /etc/rc - v nem si 
nainicializovat sitovku, spustit to ssh, prevzit heslo, predat ho geli, 
smazat konfiguraci site (protoze standardni start by se s 
nakonfigurovanou siti nemusel srovnat dobre) a spustit puvodni /etc/rc

To je podstatne min prace.

Furt jsem ale prepsal standardni systemovy soubor /etc/rc a pokud si pri 
upgradu nedam pozor, prepise se mi zpatky a zas to bude v coudu.

Takze nakonec bych mozna preci jen napsal vlastni "init".

No, napsal, no, vlastni - to jsou trochu silny slova. Vzal bych 
originalni zdrojak a provedl dve upravy ve funkci runcom() - zaprve bych 
spoustel svuj script misto /etc/rc a za druhe bych pri uspesnem skonceni 
nevolal read_ttys ale docela obycejne bych execnul originalni "init" (i 
s puvodnimi parametry). A jeste nesmime zapomenout na "single user mode" 
- coz obnasi zakomentovani radku "initial_transition = single_user;"

Zbyva jen v loader.conf nastavit kernelu v environmentu promennou 
init_path a tim zajistit, ze se spusti ten "muj" init, ktery spusti 
"muj" script - ten at si dela co chce, hlavne at ot na konci uvede do 
puvodniho stavu, protoze "muj" init v te chvili preda rizeni 
standardnimu initu a vse uz pojede v klasickych kolejich. A ani vitr, 
ani mraz a ani pitomec co mi tam pripadn eudela upgrade (vcetne me) to 
nerozbije, protoze pri upgrade se ani muj init ani muj startovaci script 
neprepise - a odkaz na nej v loader.conf taky ne. A zbytek systemu je ve 
"standardnim" stavu, tudiz bezne udrzovatelny obvyklym zpusobem ...

Toz ja bych to delal si takhle nejak. Tedy, pomineme-li uplny uvod, kde 
vysvetluju, proc bych to takhle nedelal vubec ...

Pisu to "z ruky" - nemam v umyslu to delat, takze se tam mohou objevit 
jeste nejake ty zadrhelicky ...

Dan

>>> ze /boot musi zustat nesifrovany, je jasne.
>>> ale maximum ostatniho (urcite /var, /usr, nejlepe i /sbin a /bin) bych mel
>>> rad sifrovane (geli a na nem zfs).
>>> otazka je, jak to udelat, aby se mi v _co nejrannejsi_ fazi bootu pustil
>>> ssh daemon, treba staticky slinkovany dropbear, spolu treba s busyboxem,
>>> ktery by mi umoznil pripojit se a dat kernelu heslo k pripojeni zbytku.


More information about the Users-l mailing list