Lang oppetid bevisar berre at oppstarten lukkast med dei privilegia daemonen hadde i det augneblunken. Feila som tel her, kjem seinare: ein ny klient koplar til, ei tilbakekallingsliste vert erstatta, eit hjelpeskript må skriva ei fil. Kvar av dei er ei ny opning utført av den uprivilegerte kontoen, med sitt eige løyvespørsmål og si eiga feilmelding. Tre avgjerder skil eit oppsett som held fram med å verka frå eit som feilar ved neste hending.

Skil det som vart lasta tidleg frå det som vert opna seinare

Ein deskriptor er eit handtak på ei open filskildring, og tilgangsmodusen vart fastsett då skildringa vart laga. Å byta prosessbrukar seinare lukkar ikkje handtaket, og difor verkar ei nøkkelfil lesen som root framleis etter fallet. Modusen endrar seg heller ikkje: eit handtak opna for lesing vert ikkje skrivbart, og eit skrivbart handtak vert ikkje trekt tilbake berre fordi kontoen mista rettane sine på stien. Desse to fakta forklarer det meste av den overraskande åtferda i desse rapportane.

Den andre halvdelen er minne. Ein daemon kan parsa eit sertifikat, halda på det parsa materialet og lukka fila; det som er i bruk, er data, ikkje ei open fil. Framhaldande trafikk bevisar difor korkje at ein deskriptor er open eller at stinamnet er nåbart. Det bevisar berre at materialet som trengst for økta, vart skaffa tidlegare.

Ei seinare opning er ei anna transaksjon. Ho går under gjeldande legitimasjon, gjeldande tryggleikskontekst og gjeldande monteringsvising, so ein sti som var lesbar ved oppstart, kan verta avvist ved neste tilkopling. Rotasjon legg til ei felle: å skriva ei ny fil over same stinamn let ein eksisterande deskriptor henga ved det gamle objektet, so ei omlasting kan sjå vellukka ut medan daemonen framleis brukar det førre innhaldet. Samanlikn inoden prosessen held med den på disken før du trur på ein rotasjon.

Namngje dei tre køyretidslesingane og når kvar av dei skjer

Tre ressursar vert vanlegvis opna lenge etter initiering, og dei feilar på ulike tidspunkt. Ei klientspesifikk konfigurasjonsfil vert lesen når nettopp den klienten koplar til, so ho kan ryka for ein brukar medan alle andre held fram. Tilbakekallingsdata vert slått opp under peer-autentisering og igjen når fila vert erstatta. Ei mellombels mappe vert berre rørt når eit skript eller eit tillegg skriv noko.

Ingen av dei tre høyrer til oppstartsstien, og difor kan ein tenar som har vore frisk i veker feila ved neste tilkopling. Kategorien namngjev òg eigaren av rettinga: dei to første er leserettar på konfigurasjonen under daemonkontoen, og den tredje er ein skrivbar stad med eit smalt føremål.

Path reopened laterWhat triggers the openFirst sign when it fails
Client configuration fileA connection for that client identityOne client rejected while others connect
Revocation dataPeer authentication, including after replacementRevoked and valid peers both refused
Script or plugin temporary directoryA helper needs to create a fileThe helper exits with a path error

persist-key svarar på eit smalare spørsmål enn dei fleste trur. Det held nøkkelfila open gjennom dei dokumenterte SIGUSR1- og ping-restart-tilbakestillingane, og det gjer ingenting for CCD-filer, tilbakekallingsdata, hjelpeprogram eller ein full omstart av prosessen. Dei fylgjer framleis sine eigne opningsstiar, under kva konto som helst som køyrer då.

Stadfest kontoen og visinga han faktisk har

Spør den køyrande daemonen kva konto han brukar i staden for å stola på unit-fila, og samanlikn svaret med det unita set. Eit avvik er det første som må løysast, fordi kvar seinare løyvesjekk køyrer som den prosessen faktisk er. Gå deretter gjennom stien komponent for komponent; gjennomgang vert vurdert på kvart nivå, so ei lesbar fil i ei mappe ein ikkje kjem gjennom, vert verande ulesbar. Den endelege filmodusen er det siste spørsmålet, ikkje det første.

Namnerom og tenestesandkassar legg til grenser som eigarskap og modusbitar ikkje skildrar. Ein sti som er synleg i skalet ditt, kan mangla eller vera skriveverna inne i ein chroot, eit monteringsnamnerom eller ei unit som skjuler heimemapper. Tryggleiksmodular legg til eitt lag til, so ei fil som ser lesbar ut, kan framleis verta avvist når ho vert opna.

ps -o user:12,pid,args -C openvpn
systemctl show -p User -p Group -p ProtectHome -p RootDirectory [email protected]
sudo -u openvpn namei -l /etc/openvpn/ccd/alice

Ei vellukka lesing i skalet til administratoren testar ingen av desse samansette vilkåra. Køyr kontrollen som daemonkontoen, med same namnerom og sandkasse, eller godta at resultatet skildrar skalet ditt og ikkje tenaren. Den tredje kommandoen er den billege versjonen av den testen: han skriv ut modusen for kvar komponent og feilar på den første daemonkontoen ikkje kjem gjennom.

Gje køyretidsskrivinga si eiga mappe

Lesing er berre halvparten av oversynet. Eit hjelpeskript treng kanskje å laga ei statusfil, eit tillegg må kanskje skriva tilstand ved sida av konfigurasjonen sin, og desse skrivingane vert ikkje dekte av å gjera konfigurasjonstreet skrivbart. Gje den konkrete mappa skriveløyvet funksjonen hennar krev, med ein eigar og ein modus du kan forklara. Føretrekk skriveverna tilgang for alt som berre vert lese.

Hald løyva til den private nøkkelen skilde frå policyfilene. Ein nøkkel som må lesast på nytt etter ei tilbakestilling, har eit anna krav enn ei klientfil som vert lesen ved kvar tilkopling, og ein ettergjevande modus for båe gjev meir tilgang enn problemet bed om. Ein dedikert daemonkonto med smal eigarskap er lettare å revidera enn ei brei gruppe. Når nøkkelen må overleva tilbakestillingar, persist-key fjernar han nylesinga i staden for å utvida mappa.

Avgjer ut frå hendinga du kan reprodusera

Ein levande tunnel bevisar éin veg gjennom koden. Hendinga som treng fila, er den einaste testen som dekkjer opninga du bryr deg om, anten det er ei ny klienttilkopling, ei erstatta tilbakekallingsfil, ei tillaten mjuk tilbakestilling eller ein planlagd omstart. Vel hendinga, køyr henne, og hald på den første feilen i staden for den siste.

Ved ei mjuk tilbakestilling viser eitt signal og loggen til unita om nøkkelen vart lesen på nytt. Send signalet, og les deretter dei siste linjene unita skreiv:

systemctl kill -s SIGUSR1 [email protected]
journalctl -u [email protected] -n 40 --no-pager

Ikkje slutt at ein kompromittert daemon ikkje lenger kan endra filer berre fordi privilegia vart senka. Kva han framleis kan, avheng av gjenverande legitimasjon, evnene hans, mappene han kan skriva i og kvar skrivbare deskriptor han framleis held. Privilegiereduksjon snevrar inn autoriteten, og oversynet over køyretidsopningar viser kor langt. Skriv den grensa ved sida av konfigurasjonen so den neste personen ikkje må oppdaga henne på nytt.

Relaterte artiklar