Dva direktorija koja u tutorijalu izgledaju slično obavljaju potpuno različite poslove. Jedan drži certifikacijsko tijelo: njegov privatni ključ, brojač serijskih brojeva i zapis o svemu što je potpisalo. Drugi drži ono što daemonu treba za pokretanje i posluživanje klijenata. Stavljanje oba na isti host pod istim računom zgodno je za jedno popodne, a skupo za ostatak života implementacije, jer daemon tada radi pored jedinog ključa koji može stvoriti bilo koji identitet koji poželi.

Šta CA radni prostor sadrži

PKI direktorij je stanje izdavaoca, a ne konfiguracija. Sadrži privatni ključ i certifikat CA, datoteku sa serijskim brojem, indeks izdatih certifikata i materijal po identitetu koji je iz njih proizveden.

Potpisivanje zahtjeva mijenja to stanje, zbog čega radni prostor pripada računu kojim upravlja administrator na hostu na kojem VPN servis ne radi. Svako ko može čitati privatni ključ CA može izdati certifikat koji će server prihvatiti, pa je zaštita ključa cijeli model povjerenja u jednoj datoteci. Kopiranje na drugu lokaciju radi uštede koraka stvara drugu stvar koju treba štititi i drugu stvar koju treba zaboraviti. Svaki potpis također povećava serijski broj i dodaje unos u indeks, zbog čega je radni prostor jedna kopija stanja, a ne mapa datoteka.

Javni certifikat CA je drugačiji. Namijenjen je distribuciji i koriste ga klijenti i serveri za međusobnu provjeru.

Šta daemon čita pri pokretanju

Server koji radi troši mali skup: vlastiti certifikat, vlastiti privatni ključ, certifikat CA za provjeru partnera i sav materijal za ključeve koji njegov odabrani način rada zahtijeva. Te putanje čita pri pokretanju i ponovo pri ponovnom učitavanju.

Vlasništvo se mora procijeniti prema jedinici koja se stvarno pokreće, a ne prema interaktivnoj root ljusci. Deklarisani sandbox može dio datotečnog sistema učiniti samo za čitanje ili nevidljivim čak i kada ručni test kao root uspije.

systemctl show -p User -p Group -p ReadOnlyPaths [email protected]
stat -c '%a %U:%G' /etc/openvpn/server/server.key
runuser -u openvpn -- test -r /etc/openvpn/server/server.key; echo $?

Tu treću liniju ljudi preskaču. Ona pita vlastiti račun daemona može li čitati ključ, a to je jedina verzija pitanja koja je važna nakon što su privilegije spuštene. Izlaz nula kao root ne govori ništa o tome šta se dešava nakon spuštanja.

Dvije putanje grešaka vrijedi razdvojiti prije nego što promijenite bilo koju dozvolu. Greška potpisivanja upućuje na PKI direktorij, dozvolu pretraživanja na njegovim roditeljskim direktorijima i račun koji pokreće izdavaoca. Greška pri pokretanju upućuje na jedinicu, njen radni direktorij i putanje navedene u konfiguraciji servera. Činiti cijelo stablo čitljivim za sve ne rješava nijednu od njih i uklanja granicu o kojoj obje zavise.

Zašto kopiranje CA ključa na server kasnije ne uspijeva

Kopija obično počinje kao potez za otklanjanje grešaka: neko želi obnoviti klijent na VPN hostu, pa CA ključ završi u /etc/openvpn i obnova uspije. Neposredni zadatak uspijeva, a granica je nestala.

Zatim se server sigurnosno kopira i tijelo za potpisivanje pridružuje se kopijama. Snimak, paket za podršku ili kopija konfiguracijskog direktorija sada nosi mogućnost izdavanja pouzdanih identiteta dok god je CA važeći. Ko god drži tu kopiju može stvoriti certifikat za bilo koje ime koje server prihvata, uključujući imena koja nikada nisu izdata. Jedini zapis o tom izdavanju je onaj koji odluče zadržati.

Oporavak od tog stanja nije pitanje brisanja datoteke. Morate odlučiti je li ključ bio izložen, rotirati CA ako jeste i redistribuirati povjerenje svakom partneru. Odvojen radni prostor izbjegava cijeli razgovor.

Računi, direktoriji, sigurnosne kopije

Dajte izdavaocu vlastiti račun i kućni direktorij, izvan VPN hosta gdje je to praktično. Dajte daemonu drugi račun, s pravom čitanja raspoređenog materijala i pravom pisanja ni u šta što izdaje certifikate. Raspoređujte kopiranjem javnih certifikata prema van i nikada povlačenjem privatnog stanja izdavaoca prema unutra. Sigurnosno kopirajte dvije uloge odvojeno, jer se njihova osjetljivost i priče o obnovi razlikuju.

Nakon opoziva ažurirajte CRL datoteku koju navodi konfiguracija servera, zatim ponovo učitajte servis da nove veze pročitaju. Dokumentacija Easy-RSA pokriva izgled radnog prostora i tok potpisivanja; pravila vlasništva oko njega ostaju odluka o vašem hostu. Provjerite šta je servis učitao pomoću openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate umjesto da pretpostavite da ga je ponovno učitavanje preuzelo.

Test koji dokazuje razdvajanje

Provjerite negativan slučaj, ne samo onaj koji radi. Potpišite certifikat s računa izdavaoca kako je predviđeno, zatim potvrdite da isti račun ne može pokrenuti servis ni pročitati privatni ključ servera. Zatim potvrdite da račun daemona ne može pročitati privatni ključ CA.

Te tri provjere traju nekoliko minuta i nadživljavaju promjene osoblja, jer su izjave o dozvolama, a ne o navici. Zapišite rezultat s putanjama i računima koje je pokrio, plus datum kada ste ih izvršili. Sljedeća osoba koja naslijedi ovu implementaciju inače će ponovo izvesti granicu iz tutorijala koji je nikada nije imao. Datiran zapis je i ono zbog čega sljedeći pregled traje minutama umjesto popodne.

Povezani članci