Du suklijuoti minimalių privilegijų receptai nesuteikia griežtesnio diegimo. Vienas modelis leidžia demonui startuoti su privilegijomis ir po inicijavimo pereiti prie neprivilegijuotos paskyros; kitas leidžia paslaugų tvarkyklei paleisti jį su apribota tapatybe jau nuo pirmos instrukcijos. Kiekvienas veikia atskirai, o derinys dažnai duoda paslaugą, kuri negali tvarkingai atlikti nė vienos iš dviejų užduočių. Likusi dalis sprendimą nagrinėja iš eilės.

Du modeliai, vienas perėjimo šeimininkas

Pirmasis modelis priklauso demonui. Bendruomenės OpenVPN versijos parinktys user ir group keičia tapatybę po to, kai tunelis ir raktai nustatyti, o persist-key kartu su persist-tun išlaiko tuos išteklius naudojamus vėliau.

Antrasis modelis priklauso paslaugų tvarkyklei. systemd nustatymas User= arba Group= nusprendžia, kokia tapatybe procesas startuoja, o galimybių direktyvos nusprendžia, ką jis gali laikyti. Pasirinkimas tarp modelių yra pakavimo klausimas prieš tai, kai tampa saugumo klausimu, ir paketo prižiūrėtojas jau į jį atsakė. Jūsų užduotis yra rasti tą atsakymą, o ne sugalvoti trečią variantą.

Abu yra teisėti. Klaida yra traktuoti juos kaip vieno dizaino sluoksnius, nes antrasis modelis gali paversti pirmojo tapatybės pakeitimą operacija, kurios procesui nebeleidžiama atlikti.

Nuspręskite, kur keičiasi tapatybė

Jei vienetas jau startuoja kaip skirta paskyra, demono instrukcija tapti kita paskyra reikalauja setuid perėjimo, kurio sustiprinta paslauga niekada neturėjo daryti. Gedimas pasirodo kaip leidimų klaida paleidžiant, o ne kaip aiškus politikos pranešimas. Tai skaitoma kaip trūkstama galimybė, o tai nukreipia žmones link platesnio apribojimų rinkinio, o ne link tapatybės klausimo.

Prieš ką nors redaguodami perskaitykite, ką įdiegtas paketas iš tikrųjų pateikia, įskaitant jo drop-in katalogą. Kai kurie vienetai sąmoningai praleidžia paties demono perėjimą, nes tvarkyklė jau tuo rūpinasi, o kiti remiasi tomis parinktimis perėjimui po inicijavimo. Pašalinti bet kurią iš jų nežinant, kurį modelį paveldėjote, yra būdas, kuriuo veikianti paslauga nustoja startuoti.

Užrašykite pasirinktą modelį vienoje eilutėje: tvarkyklės nuosavybė arba demono nuosavybė. Kiekviena vėlesnė direktyva turi atitikti tą sakinį, o mišrus vienetas turi būti traktuojamas kaip klaida, o ne kaip kompromisas.

Galimybės yra ribos, o ne dovana

Galimybių apribojimų rinkinys pasako, ką procesas gali daugiausiai laikyti. Tai lubos, ir galimybės įrašymas ten pats savaime nieko neduoda, todėl vienetas su dosniu apribojimų rinkiniu vis tiek gali nesugebėti sukurti tunelio.

Tai, kas iš tikrųjų įdeda galimybę į paslaugos aplinkinį rinkinį, yra AmbientCapabilities=. systemd vykdymo žinynas dokumentuoja abi direktyvas atskirai, ir šis skirtumas paaiškina didžiąją dalį painių patarimų apie galimybes internete.

Pridėkite galimybę tik po to, kai nepavykstanti operacija ją nustato. Platesnis apribojimų rinkinys paslepia tikrąją priežastį ir palieka paslaugą labiau privilegijuotą, nei dizainas numatė. Tai taip pat apsunkina vieneto peržiūrą, nes lubos nebepasakoja darbo. Pašalinkite papildomą galimybę, kai tikroji klaida ištaisyta.

Susiekite įgaliojimus su gyvavimo ciklu

Išvardykite, ką procesas turi daryti kiekviename etape: paleidimas, pastovi būsena, pakartotinė autentifikacija ir išmontavimas. Sąsajos kūrimas, maršrutų pakeitimai, apsaugoto rakto skaitymas ir pagalbininko iškvietimas ne visi vyksta tuo pačiu metu ar tomis pačiomis sąlygomis. Rikiuokite sąrašą pagal etapą prieš rikiuodami pagal galimybę.

Išliekamumo parinktys išsaugo išteklius per pakartotines derybas ir nesuteikia leidimų, kurių niekada nebuvo. Raktas, kurio procesas negali perskaityti paleidžiant, liks neperskaitomas ir vėliau, ką bebūtų sakoma išliekamumo vėliavėlėse. Vėliavėlės išsaugo tai, kas jau veikė.

Naudokite skirtą paskyrą, o ne bendrą. OpenVPN kūrėjai perspėja dėl įpročio naudoti nobody kaip bendrą pavyzdį, nes kitos paslaugos pagrindiniame kompiuteryje gali jau veikti su ta paskyra, o izoliacija, kurią manote turį, ten neegzistuoja.

Funkcijos, keičiančios vietinį krūvį, pavyzdžiui, duomenų kanalo iškėlimas arba kitaip susiejamas rinkinys, gali pakeisti, kokių operacijų reikia. Peržiūrėkite žemėlapį, kai keičiasi paketas, o ne tik tada, kai kas nors sugenda.

Užrašykite planą ir išsaugokite atkūrimo prieigą

Diegimo įraše turi būti nurodyta tvarkyklė, paleidimo tapatybė, numatyta pastovi tapatybė ir kiekvienas suteikimas kartu su operacija, kurios jam reikia. Būtent šis įrašas daro kitą pakeitimą peržiūrimu, o ne eksperimentiniu.

Redaguodami palikite prieigą prie konsolės, nes vienetą, kuris nepavyksta paleidžiant, sunku taisyti nuotoliniu būdu. Išbandykite paleidimą iš naujo ir visišką perkrovimą, prieš skelbdami pakeitimą baigtu. Vienetas, kuris išgyvena paleidimą iš naujo, vis tiek gali nepavykti, kol tinklas dar nepakilęs.

Sėkmė yra suprastas minimalių įgaliojimų gyvavimo ciklas, o ne procesas, kuris atsitiktinai veikia ne root vardu.

Susiję straipsniai