Ne slažite hardening systemd na OpenVPN-ovo spuštanje korisnika
Dva recepta najmanjih ovlašćenja zajedno nisu stroži. Odaberite ko obavlja promenu identiteta, zatim mapirajte ovlašćenje kroz ceo životni ciklus.
Dva recepta najmanjih ovlašćenja zalepljena zajedno ne daju strože postavljanje. Jedan model pušta daemon da startuje s ovlašćenjima i spusti se na račun bez ovlašćenja nakon inicijalizacije; drugi pušta upravljača servisa da ga pokrene pod ograničenim identitetom od prve instrukcije. Svaki radi sam za sebe, a kombinacija često daje servis koji ne može čisto obaviti nijedan od dvaju poslova. Ostatak ovoga prolazi kroz odluku po redu.
Dva modela, jedan vlasnik prebacivanja
Prvi model pripada daemonu. Opcije OpenVPN zajednice user i group menjaju identitet nakon što su tunel i ključevi postavljeni, a persist-key plus persist-tun drže te resurse upotrebljivima nakon toga.
Drugi model pripada upravljaču servisa. Postavka systemd User= ili Group= odlučuje pod kojim identitetom proces startuje, a direktive o sposobnostima odlučuju šta sme držati. Biranje između modela je pitanje pakiranja pre nego sigurnosno pitanje, a održavalac paketa je već odgovorio na njega. Vaš je posao naći taj odgovor, a ne izmisliti treću opciju.
Oba su legitimna. Greška je tretirati ih kao slojeve jednog dizajna, jer drugi model može promenu identiteta prvoga pretvoriti u operaciju koju proces više nema dozvolu izvršiti.
Odredite gde se identitet menja
Ako unit već startuje kao namenski račun, dodavanje daemonske instrukcije da postane drugi račun traži setuid prelaz koji očvrsli servis nikada nije trebalo napraviti. Kvar se pojavljuje kao greška dozvole pri startu, a ne kao jasna poruka politike. To se čita kao nedostajuća sposobnost, što ljude vodi prema širem skupu ograničenja umesto prema pitanju identiteta.
Pročitajte šta instalirani paket zaista isporučuje pre nego što bilo šta uredite, uključujući njegov drop-in direktorijum. Neki uniti namerno izostavljaju daemonov vlastiti spust jer upravljač to već rešava, a neki se oslanjaju na te opcije za prebacivanje nakon inicijalizacije. Uklanjanje bilo kojeg od njih bez znanja koji ste model nasledili jeste način na koji radni servis prestaje startati.
Zapišite odabrani model u jedan red: u vlasništvu upravljača ili u vlasništvu daemona. Svaka kasnija direktiva mora biti usklađena s tom rečenicom, a mešani unit treba tretirati kao grešku, a ne kao kompromis.
Sposobnosti su granice, ne darivanja
Skup ograničenja sposobnosti kaže šta proces sme držati najviše. To je plafon, a navođenje sposobnosti tamo samo po sebi ništa ne daje, zato unit s izdašnim skupom ograničenja ipak može ne uspeti stvoriti tunel.
Ono što zapravo stavlja sposobnost u ambijentalni skup servisa jeste AmbientCapabilities=. systemd referenca za izvršavanje dokumentuje dve direktive odvojeno, a ta razlika objašnjava većinu zbunjujućih saveta o sposobnostima na internetu.
Dodajte sposobnost tek nakon što je operacija koja pada identifikuje. Širi skup ograničenja skriva pravi uzrok i ostavlja servis privilegovanijim nego što je dizajn nameravao. Takođe čini unit težim za pregled, jer plafon više ne opisuje posao. Uklonite dodatnu sposobnost kad se pravi kvar popravi.
Mapirajte ovlašćenje kroz životni ciklus
Navedite šta proces mora raditi u svakoj fazi: start, stabilno stanje, ponovna autentifikacija i zatvaranje. Stvaranje interfejsa, promene ruta, čitanje zaštićenog ključa i pozivanje pomoćnika ne događaju se svi u istom trenutku ni pod istim zahtevima. Poredajte listu po fazi pre nego je poredate po sposobnosti.
Opcije trajnosti čuvaju resurse kroz ponovno pregovaranje i ne daju dozvole koje nikada nisu držane. Ključ koji proces ne može pročitati pri startu ostaće nečitljiv i kasnije, šta god govorile zastavice trajnosti. Zastavice čuvaju ono što je već radilo.
Koristite namenski račun, a ne zajednički. Programeri OpenVPN-a upozoravaju na naviku korišćenja nobody kao opšteg primera, jer drugi servisi na hostu možda već rade pod tim računom i izolacije koju mislite da imate nema.
Značajke koje menjaju lokalno opterećenje, poput rasterećenja podatkovnog kanala ili builda koji se drugačije linkuje, mogu pomeriti koje su operacije potrebne. Pregledajte mapu kad se paket promeni, ne samo kad se nešto pokvari.
Zapišite plan i zadržite pristup za oporavak
Zapis o postavljanju treba imenovati upravljača, identitet pri startu, nameravani stabilni identitet i svako odobrenje uz operaciju koja ga zahteva. Taj zapis čini sledeću promenu preglednom umesto eksperimentalnom.
Držite konzolni pristup dostupnim dok uređujete, jer unit koji padne pri startu teško je popraviti na daljinu. Testirajte restart i potpuno ponovno podizanje pre nego promenu proglasite završenom. Unit koji preživi restart ipak može pasti pre nego mreža bude gore.
Uspeh je shvaćen životni ciklus s najmanjim ovlašćenjima, a ne proces koji slučajno radi pod imenom koje nije root.