SQcrypto.sh

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Kryptování vrstev není pro použití skriptu crypto životně důležité, protože umí použít i plain sqimage. Ale je žádoucí pokud vrstva obsahuje data, která by šlo zneužít. U Full-Disklessu jsou všechna data na NFS serveru, v adresářích, které se sdílejí jen read-only a read-write přístup je vyhrazen jen konkrétním strojům. Ale autonomní Half-Diskless má snapshoty vrstev uložené jako soubory, takže se k nim může někdo nepovolaný dostat, pokud přehodí disk někam, kde bude mít přístup na uživatele root.

Nekryptované plain sqimage, může rozbalit a vytáhnout např. generický privátní ssh klíč, který se používá po úspěšném ověření uživatele k založení neexistujícího domovského adresáře. Ten mu sice bude k ničemu, ale nelze vyloučit, že se v nějaké jiné vrstvě vyskytnou soubory, které by volně dostupné být neměly. Proto se tyhle soubory kryptují.

Pro vytvoření kryptované verze vrstvy se používá stroj lab-burget – virtuální Half-Diskless, který má k dispozici virtuální blokové zařízení sdílené přes NFS a v konfiguraci vrstvu, ve které je skript SQcrypto.sh a soubory potřebné pro sestavení dynamické verze ramdisku.

Upozornění Skript SQcrypto.sh, je stejně jako SQimage.sh použitelný jen pod uživatelem root, který má povolen vzdálený přístup (ověřovaný ssh klíčem) na server, kde je HTTP úložiště.
  1. Nejprve se spustí stroj lab-burget v Half-Diskless konfiguraci, do které se přidá mezi použité vrstvy nový plain sqimage vytvořený na straně serveru skriptem SQimage.sh.
  2. Během spuštění se stáhne na lokální blokové zařízení, do subvolume, které si SQcrypto.sh namountuje na adresář /local
  3. Během akce crypt udělá kopii stažené plain sqimage, kterou zakryptuje a použije při tom dekapitovanou hlavičku, kterou vytvoří v adresáři /tmp. Dekapitovanou hlavičku lze zabalit do archivu chráněného heslem rovnou během fáze crypt, pokud se zadá heslo jiné, než řetězec default či none
  4. Pokud se použije none, zůstane hlavička rozbalená. A pokud se použije default, použije skript jako heslo kontrolní součet zakryptovaného souboru.
  5. Hotové soubory se odesílají přes SSH do úložiště na stroji k333-lab, kde zapíše další položka do souboru changelog při akci send. Použití kryptované verze vrstvy už je záležitostí konfigurace.
Poznámka Při akci send se odešle vždy hlavička kontejneru i kryptovaný obsah, bez ohledu na to jestli se zadá jako parametr cesta k dekapitované hlavičce, nebo zakryptovanému blobu.

Popis

SQcrypto.sh je nástroj k zakryptování squashovaných snapshotů vrstev (plain sqimage), vytvořených přes SQimage.sh. Stejně jako ramdiskový skript crypto, který sestavuje sendviče, i on pracuje se souborem changelog, publikovaným přes HTTP.

Výsledkem zakryptování sqimage je kryptovaný blob s dekapitovanou hlavičkou, a dva hlavičkové soubory. Ty se odstraní, až po úspěšném exportu do úložiště.

Upozornění Při změně hesla, kterým se odemyká vrstva se vždy mění pouze hlavička. Proto se ukládají dva hlavičkové soubory. Jeden se suffixem .header, s dekapitovanou hlavičkou chráněnou generickým heslem, použitelnou pro vytvoření nové produkční hlavičky. A druhý, zaheslovaný archiv se suffixem .7z, ve kterém je zabalena produkční hlavička, vytvořená v adresáři /tmp během operace 'crypt'. Ta žádnou příponu nemá a také se nikam mimo adresář /tmp neukládá.

Zápis do souboru changelog po úspěšném odeslání souborů

Když crypto během zavádění zjistí, že jde o kryptovaný soubor, pokusí se získat jeho dekapitovanou, zaheslovanou hlavičku. A při tom kontroluje changelog, který může obsahovat záznam, že jde o aktualizovanou vrstvu. V takovém případě, pokud najde soubor <old> v úložišti, ví co může odstranit.

SQimage.sh vkládá takový záznam při aktualizaci vrstvy, po vygenerování nového snapshotu. A SQcrypto.sh po odeslání souborů do úložiště sdíleného přes HTTP.

; C <new> <old>
<new>
je MD5 kontrolní součet stahovaného souboru
<old>
je název (MD5 kontrolní součet) nahrazovaného souboru
Poznámka V konfiguraci stroje máme následující řádek:
setlayer c32af4db4aaea650590ba379a3385424

Pro skript crypto je to signál, že má zkontrolovat lokální úložiště, jestli obsahuje soubor c32af4db4aaea650590ba379a3385424. Pokud ne, tak si ho stáhne přes HTTP a po stažení se ho pokusí namountovat. Pokud ho už v úložišti má, zkusí ho rovnou namountovat. U plain sqimage se mu to podaří, ale u kryptované vrstvy tenhle pokus selže. Protože má dekapitovanou hlavičku, následuje pokus o stažení hlavičky. I ta je součástí HTTP úložiště, ale je zaheslovaná a má suffix .7z V prvé řadě se tedy zkusí stáhnout a rozbalit soubor c32af4db4aaea650590ba379a3385424.7z. Když se mu to podaří, pokusí se rozbalenou hlavičku použít. Ale i tento pokus může být marný, protože záznam v konfiguraci může vypadat i takto:

setlayer c32af4db4aaea650590ba379a3385424:9e43748722e47242db40d03cf5a8f881

Řetězec za dvojtečkou je MD5 součet původní plain sqimage vrstvy a dekapitovaná hlavička kontejneru se během kryptování pojmenuje podle něj. Teprve při odeslání do HTTP úložiště SQcrypto.sh hlavičku přejmenuje a do souboru changelog přidá následující řádek:

; C c32af4db4aaea650590ba379a3385424 9e43748722e47242db40d03cf5a8f881

Tenhle záznam je primárně určen pro aktualizaci, protože během zavádění z něm crypto zjistí, který soubor z lokálního úložiště může odstranit. A pokud bude soubor kryptovaný a soubor c32af4db4aaea650590ba379a3385424.7z se stáhnout nepodaří, zkusí jako další variantu 9e43748722e47242db40d03cf5a8f881.7z.

Pointa je v tom, že konfigurace přes 'setlayer' umožňuje použít hlavičku pojmenovanou podle jiné, nekryptované či již nepoužívané starší vrstvy.