Taigi, tęsiant temą – namų kriptokonteineriai.
Aš naudosiu 500MB konteinerį – home’ui pilnai pakaks. Jei reikės saugoti didesnius duomenų masyvus – pasidarysiu papildomus konteinerius, be to, noriu turėti galimybę bakupuoti konteinerio failą į CD-RW (DVD mano laptopas tik skaito, bet nerašo). Konteinerio šifravimui naudosime Dm-crypt su LUKS infrastruktūrą – ji leidžia neskausmingai pakeisti kriptokonteinerio slaptažodį. Viską konfigūruosiu root vartotojo naudojimui – kaip jau minėjau – tai nėra serveris ir laptopo saugumo reikalavimai kiek kiti – linux’e viską darysiu root teisėm – dėl daugelio planuojamų veiksmų techninių reikalavimų (pvz. darbas su branduoliu ar raw socket), na ir šiaip iš idėjos ;] plėšrūno o ne aukos mentaliteto skatinimui.
Visų pirma susikuriame reikiamo dydžio failą konteineriui:
base:~# mkdir /data base:~# dd if=/dev/urandom of=/data/c.img bs=1M count=500
Pasitikriname, koks yra laisvas loopback įrenginys:
base:~# losetup -f /dev/loop0
Pasidarome kriptokonteinerį (slaptažodis turi atitikti root vartotojo slaptažodį):
base:~# losetup /dev/loop0 /data/c.img base:~# cryptsetup luksFormat /dev/loop0 WARNING! ======== This will overwrite data on /dev/loop0 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: Command successful. base:~# cryptsetup luksOpen /dev/loop0 cr Enter LUKS passphrase: key slot 0 unlocked. Command successful.
Pasitikriname, ar atsirado mapper įrenginys:
base:~# ls /dev/mapper/cr /dev/mapper/cr
Suformatuojame konteinerį ir jį primontuojame:
base:~# mkfs.ext3 /dev/mapper/cr base:~# mount /dev/mapper/cr /mnt base:~# df -h | grep /mnt /dev/mapper/cr 484M 11M 449M 3% /mnt
Kaip matome, viskas OK, taigi, galime atmontuoti ir iškonfigūruoti įrenginį:
base:~# umount /mnt/ base:~# cryptsetup luksClose /dev/mapper/cr base:~# losetup -d /dev/loop0
Dabar mums reikia, kad konteineris būtų montuojamas, kai prisijungiame prie sistemos, ir atmontuojamas, kai atsijungiame. Tam idealiausiai tinka pam-mount:
base:~# apt-get install libpam-mount
Sukonfigūruojame konteineri montavimui per pam-mount:
base:~# echo "volume root crypt - /data/c.img /root loop - -" \ >> /etc/security/pam_mount.conf
Belieka pridėti eilutę “@include common-pammount” į atitinkamą failą /etc/pam.d/ direktorijoje, tačiau dabar – mažytis lyrinis nukrypimas:
Kažkada buvo toks senas tarybinis filmas Variantas “Omega” , pastatytas pagal to paties pavadinimo romaną. Jeigu aš gerai prisimenu – tame filme buvo labai geras “kontrolės požymio” koncepcijos pavyzdys: tarybinis žvalgas siusdamas radiogramas į centrą nenaudodavo punktuacijos – nedėdavo taškų sakinių gale. Jeigu centras gautu pranešimą su taškais sakiniuose – tai reikštų kad žvalgas suimtas, jo eteris kontroliuojamas, ir pranešimas – priešo siunčiama dezinformacija.
Kažkokį panašų, iš šalies sunkiai atspėjamą “kontrolės požymį” kartais pravartu turėti ir dirbant su savo sistema, kad kompiuteris (bet tik jis) suprastų, kad jo šeimininko veiksmai kontroliuojami ir pats imtųsi iniciatyvos apsaugoti save ir savo šeimininką.
Tokio “kontrolės požymio” pavyzdį galima realizuoti su mūsų kriptokonteineriu:
base:~# echo "@include common-pammount" >> /etc/pam.d/su
Dabar konteineris montuosis tik tuo atveju, jei vartotojas sėkmingai su’inasi į root’ą
user@base:~$ df -h | grep root user@base:~$ su - Password: key slot 0 unlocked. root@base:~# df -h | grep root /dev/mapper/_data_c.img 484M 11M 449M 3% /root root@base:~# exit logout user@base:~$ df -h | grep root user@base:~$
Tačiau kai root’u loginames tiesiai, konteineris nemontuojamas:
base login: root Password: root@base:~# df -h | grep root root@base:~#
Dabar reikėtų root’o namų direktorijoje diske sukurti start-skriptus, kurie ištrins kriptokonteinerio failą, visas jo konfigūracijas ir patys save. Normaliam darbui reikia jungtis prie sistemos paprastu vartotoju ir su’intis į root’ą. pam-mount primontuos konteinerį į root’o namų direktoriją, start-skriptai esantys fiziniame diske liks paslėpto mount’o ir nebus vykdomi. Kontrolės atveju galima drąsiai jungtis tiesiai root’u, o tada jau sistema pati viskuo pasirupins ;].
Aišku, čia tik pavyzdys, nes tokio tipo konfigūracijos visada remiasi Security through obscurity principu ir jų detalės neturėtų būti viešinamos.
Na ir pabaigai pora žodžių apie konteinerių rezervinį kopijavimą – kaip tikras asfalto vaikas darysiu tai po windows, paėmęs failą iš linux arba scp/sftp per VMware, arba pvz. šituo. Jeigu man reikėtų pasiekti konteinerio turinį iš windows, naudočiau FreeOTFE + ext2ifs. Plačiau – FreeOTFE dokumentacijoje.