Nekaudiniet systemd uz OpenVPN user nomešanas
Divi minimālo tiesību receptes kopā nav stingrāka. Izvēlieties, kas veic identitātes maiņu, pēc tam kartējiet pilnvaras visā dzīves ciklā.
Divi salīmēti minimālo tiesību receptes nedod stingrāku izvietošanu. Viens modelis ļauj dēmonam startēt ar tiesībām un pēc inicializācijas pāriet uz kontu bez tiesībām; otrs ļauj pakalpojumu pārvaldniekam to palaist ar ierobežotu identitāti jau no pirmās instrukcijas. Katrs strādā pats par sevi, un kombinācija bieži dod pakalpojumu, kas nespēj kārtīgi veikt nevienu no diviem darbiem. Pārējais teksts lēmumu izstaigā secībā.
Divi modeļi, viens maiņas īpašnieks
Pirmais modelis pieder dēmonam. Kopienas OpenVPN versijas opcijas user un group maina identitāti pēc tam, kad tunelis un atslēgas ir iestatītas, un persist-key kopā ar persist-tun saglabā šos resursus lietojamus arī pēc tam.
Otrais modelis pieder pakalpojumu pārvaldniekam. systemd iestatījums User= vai Group= nosaka identitāti, ar kuru process startē, un iespēju direktīvas nosaka, ko tas drīkst turēt. Izvēle starp modeļiem ir iepakošanas jautājums, pirms tas kļūst par drošības jautājumu, un pakotnes uzturētājs jau ir atbildējis. Jūsu uzdevums ir atrast šo atbildi, nevis izgudrot trešo variantu.
Abi ir likumīgi. Kļūda ir uzskatīt tos par viena dizaina slāņiem, jo otrais modelis var padarīt pirmā identitātes maiņu par darbību, kas procesam vairs nav atļauta.
Izlemiet, kur identitāte mainās
Ja vienība jau startē kā īpašs konts, dēmona instrukcija kļūt par citu kontu prasa setuid pāreju, ko rūdīts pakalpojums nekad nav paredzēts veikt. Kļūme parādās kā atļauju kļūda startēšanas laikā, nevis kā skaidrs politikas ziņojums. Tas lasās kā trūkstoša iespēja, kas cilvēkus virza uz plašāku ierobežojumu kopu, nevis uz identitātes jautājumu.
Pirms kaut ko rediģējat, izlasiet, ko instalētā pakotne patiešām piegādā, tostarp tās drop-in direktoriju. Dažas vienības apzināti izlaiž paša dēmona nomešanu, jo pārvaldnieks jau ar to nodarbojas, un dažas paļaujas uz šīm opcijām pārejai pēc inicializācijas. Noņemt kādu no tām, nezinot, kuru modeli esat mantojis, ir veids, kā strādājošs pakalpojums pārstāj startēt.
Ierakstiet izvēlēto modeli vienā rindā: pārvaldniekam piederošs vai dēmonam piederošs. Katrai vēlākajai direktīvai jāatbilst šim teikumam, un jaukta vienība jāuzskata par kļūdu, nevis kompromisu.
Iespējas ir robežas, nevis dāvanas
Iespēju ierobežojumu kopa pasaka, ko process drīkst turēt visvairāk. Tās ir griesti, un iespējas uzskaitīšana tur pati par sevi neko nedod, tāpēc vienība ar dāsnu ierobežojumu kopu tomēr var nespēt izveidot tuneli.
Tas, kas patiešām ievieto iespēju pakalpojuma apkārtējā kopā, ir AmbientCapabilities=. systemd izpildes uzziņa dokumentē abas direktīvas atsevišķi, un šī atšķirība izskaidro lielāko daļu mulsinošo padomu par iespējām tiešsaistē.
Pievienojiet iespēju tikai pēc tam, kad neveiksmīgā darbība to ir identificējusi. Plašāka ierobežojumu kopa slēpj patieso cēloni un atstāj pakalpojumu ar lielākām tiesībām, nekā dizains bija paredzējis. Tas arī apgrūtina vienības pārskatīšanu, jo griesti vairs neapraksta darbu. Noņemiet lieko iespēju, kad īstā kļūda ir izlabota.
Kartējiet pilnvaras visā dzīves ciklā
Uzskaitiet, kas procesam jādara katrā posmā: startēšana, stabila stāvokļa, atkārtota autentifikācija un demontāža. Saskarnes izveide, maršrutu izmaiņas, aizsargātas atslēgas lasīšana un palīga izsaukšana nenotiek visas vienā mirklī vai ar vienādām prasībām. Kārtojiet sarakstu pēc posma, pirms kārtojat to pēc iespējas.
Noturības opcijas saglabā resursus starp atkārtotām sarunām, un tās nedod atļaujas, kas nekad nav bijušas. Atslēga, ko process nevar nolasīt startēšanas laikā, paliks nelasāma arī vēlāk, lai ko teiktu noturības karodziņi. Karodziņi saglabā to, kas jau strādāja.
Izmantojiet īpašu kontu, nevis koplietotu. OpenVPN izstrādātāji brīdina par ieradumu izmantot nobody kā vispārīgu piemēru, jo citi pakalpojumi resursdatorā jau var darboties ar šo kontu, un izolācija, kas, jūsuprāt, jums ir, tur nav.
Funkcijas, kas maina vietējo slodzi, piemēram, datu kanāla izkraušana vai citādi saistīts būvējums, var mainīt to, kādas darbības ir vajadzīgas. Pārskatiet karti, kad mainās pakotne, ne tikai tad, kad kaut kas salūzt.
Pierakstiet plānu un saglabājiet atkopšanas piekļuvi
Izvietošanas ierakstā jānosauc pārvaldnieks, startēšanas identitāte, paredzētā stabilā identitāte un katrs piešķīrums kopā ar darbību, kas to prasa. Šis ieraksts padara nākamo izmaiņu pārskatāmu, nevis eksperimentālu.
Rediģēšanas laikā saglabājiet konsoles piekļuvi, jo vienību, kas neizdodas startēšanas laikā, ir grūti labot attālināti. Pārbaudiet restartēšanu un pilnīgu pārstartēšanu, pirms pasludināt izmaiņu pabeigtu. Vienība, kas pārdzīvo restartēšanu, joprojām var neizdoties, pirms tīkls ir augšā.
Panākumi ir saprasts dzīves cikls ar minimālām pilnvarām, nevis process, kas nejauši darbojas ar vārdu, kas nav root.