Moenie systemd-verharding op OpenVPN se user-oorgang stapel nie
Twee min-voorregresepte saam is nie 'n strenger een nie. Kies wie die identiteitswisseling doen en karteer dan die gesag oor die hele lewensiklus.
Twee min-voorregresepte wat saamgeplak word, lewer nie 'n strenger ontplooiing nie. Een model laat die daemon met voorregte begin en ná inisialisering na 'n onbevoorregte rekening oorgaan; die ander laat die diensbestuurder dit van die eerste instruksie af onder 'n beperkte identiteit begin. Elkeen werk op sigself, en die kombinasie lewer dikwels 'n diens wat nie een van die twee take behoorlik kan doen nie. Die res hiervan loop die besluit in volgorde deur.
Twee modelle, een eienaar van die oorskakeling
Die eerste model hoort by die daemon. Die gemeenskapsweergawe van OpenVPN se user en group-opsies verander die identiteit nadat die tonnel en sleutels opgestel is, en persist-key plus persist-tun hou daardie hulpbronne daarna bruikbaar.
Die tweede model hoort by die diensbestuurder. 'n systemd-User= of Group=-instelling bepaal die identiteit waaronder die proses begin, en vermoënsriglyne bepaal wat dit mag hou. Om tussen die modelle te kies is 'n verpakkingsvraag voordat dit 'n sekuriteitsvraag is, en die pakketinstandhouer het dit reeds beantwoord. Jou taak is om daardie antwoord te vind eerder as om 'n derde opsie te bedink.
Albei is wettig. Die fout is om hulle as lae van een ontwerp te behandel, want die tweede model kan die eerste se identiteitswisseling 'n bewerking maak wat die proses nie meer mag uitvoer nie.
Bepaal waar die identiteit verander
As die eenheid reeds as 'n toegewyde rekening begin, vra 'n daemon-instruksie om 'n ander rekening te word na 'n setuid-oorgang waarvoor 'n verharde diens nooit bedoel was nie. Die fout verskyn as 'n toestemmingsfout tydens opstart eerder as as 'n duidelike beleidsboodskap. Dit lyk soos 'n ontbrekende vermoë, wat mense na 'n wyer begrensing stel stuur in plaas van na die identiteitsvraag.
Lees wat die geïnstalleerde pakket werklik verskaf voordat jy iets wysig, insluitend sy drop-in-gids. Sommige eenhede laat die daemon se eie oorgang doelbewus weg omdat die bestuurder dit reeds hanteer, en sommige maak staat op daardie opsies vir die oorskakeling ná inisialisering. Om een van die twee te verwyder sonder om te weet watter model jy geërf het, is hoe 'n werkende diens ophou begin.
Skryf die gekose model in een reël: bestuurder-eie of daemon-eie. Elke latere riglyn moet met daardie sin ooreenstem, en 'n gemengde eenheid moet as 'n fout eerder as as 'n kompromie behandel word.
Vermoëns is grense, nie toekennings nie
'n Vermoënsbegrensing sê wat 'n proses hoogstens mag hou. Dit is 'n plafon, en om 'n vermoë daar te lys ken niks op sigself toe nie, en daarom kan 'n eenheid met 'n ruim begrensing steeds nie 'n tonnel skep nie.
Wat werklik 'n vermoë in die omringende stel vir 'n diens plaas, is AmbientCapabilities=. Die systemd-uitvoeringsverwysing dokumenteer die twee riglyne afsonderlik, en die onderskeid verduidelik meeste van die verwarrende vermoënsadvies aanlyn.
Voeg 'n vermoë eers by nadat die mislukkende bewerking dit geïdentifiseer het. 'n Wyere begrensing verberg die werklike oorsaak en laat die diens meer bevoorreg as wat die ontwerp bedoel het. Dit maak die eenheid ook moeiliker om na te gaan, want die plafon beskryf nie meer die taak nie. Verwyder die ekstra vermoë sodra die werklike fout reggemaak is.
Karteer gesag oor die lewensiklus
Lys wat die proses by elke stadium moet doen: opstart, bestendige toestand, herverifikasie en afbreek. Koppelvlakke skep, roetes verander, 'n beskermde sleutel lees en 'n helper aanroep gebeur nie almal op dieselfde oomblik of onder dieselfde vereistes nie. Sorteer die lys volgens stadium voordat jy dit volgens vermoë sorteers.
Volhardingsopsies bewaar hulpbronne oor heronderhandeling, en hulle verleen nie toestemmings wat nooit gehou is nie. 'n Sleutel wat die proses nie by opstart kan lees nie, sal later steeds onleesbaar wees, wat die volhardingsvlae ook al sê. Die vlae bewaar wat reeds gewerk het.
Gebruik 'n toegewyde rekening eerder as 'n gedeelde een. Die OpenVPN-projek waarsku teen die gewoonte om nobody as 'n generiese voorbeeld te gebruik, want ander dienste op die gasheer mag reeds as daardie rekening loop en die isolasie wat jy dink jy het, is nie daar nie.
Kenmerke wat die plaaslike werklading verander, soos data-kanaal-afwenteling of 'n bou wat anders skakel, kan verskuif watter bewerkings nodig is. Hersien die kaart wanneer die pakket verander, nie net wanneer iets breek nie.
Skryf die plan neer en behou hersteltoegang
'n Ontplooiingsrekord moet die bestuurder, die opstartidentiteit, die beoogde bestendige identiteit en elke toekenning saam met die bewerking wat dit vereis, noem. Daardie rekord is wat die volgende verandering hersienbaar maak in plaas van eksperimenteel.
Hou konsoltoegang beskikbaar terwyl jy wysig, want 'n eenheid wat by opstart misluk, is moeilik om op afstand te herstel. Toets 'n herbegin en 'n volledige herlaai voordat jy die verandering as voltooi beskou. 'n Eenheid wat 'n herbegin oorleef, kan steeds misluk voordat netwerk aktief is.
Sukses is 'n begrepe lewensiklus met minimum gesag, nie 'n proses wat toevallig onder 'n nie-root-naam loop nie.