Lang oppetid beviser bare at oppstarten lyktes med de privilegiene daemonen hadde i det øyeblikket. Feilene som betyr noe her, kommer senere: en ny klient kobler til, en tilbakekallingsliste erstattes, et hjelpeskript må skrive en fil. Hver av dem er en ny åpning utført av den uprivilegerte kontoen, med sitt eget tillatelsesspørsmål og sin egen feilmelding. Tre beslutninger skiller et oppsett som fortsetter å virke fra et som feiler ved neste hendelse.

Skille det som ble lastet tidlig fra det som åpnes senere

En deskriptor er et håndtak på en åpen filbeskrivelse, og tilgangsmodusen ble fastsatt da beskrivelsen ble opprettet. Å bytte prosessbruker senere lukker ikke håndtaket, og derfor virker en nøkkelfil lest som root fortsatt etter fallet. Modusen endres heller ikke: et håndtak åpnet for lesing blir ikke skrivbart, og et skrivbart håndtak tilbakekalles ikke bare fordi kontoen mistet rettighetene sine på stien. Disse to fakta forklarer det meste av den overraskende oppførselen i disse rapportene.

Den andre halvparten er minne. En daemon kan parse et sertifikat, beholde det parsede materialet og lukke filen; det som er i bruk, er data, ikke en åpen fil. Fortsatt trafikk beviser derfor verken at en deskriptor er åpen eller at stinavnet er nåbart. Det beviser bare at materialet som trengs for økten, ble skaffet tidligere.

En senere åpning er en annen transaksjon. Den kjører under gjeldende legitimasjon, gjeldende sikkerhetskontekst og gjeldende monteringsvisning, så en sti som var lesbar ved oppstart, kan bli avvist ved neste tilkobling. Rotasjon legger til en felle: å skrive en ny fil over samme stinavn lar en eksisterende deskriptor henge ved det gamle objektet, så en omlasting kan se vellykket ut mens daemonen fortsatt bruker det forrige innholdet. Sammenlign inoden prosessen holder med den på disken før du tror på en rotasjon.

Navngi de tre kjøretidslesingene og når hver av dem skjer

Tre ressurser åpnes vanligvis lenge etter initialiseringen, og de feiler på ulike tidspunkter. En klientspesifikk konfigurasjonsfil leses når nettopp den klienten kobler til, så den kan ryke for én bruker mens alle andre fortsetter. Tilbakekallingsdata slås opp under peer-autentisering og igjen når filen erstattes. En midlertidig mappe berøres bare når et skript eller en plugin skriver noe.

Ingen av de tre hører til oppstartsstien, og derfor kan en server som har vært frisk i uker feile ved neste tilkobling. Kategorien navngir også eieren av rettelsen: de to første er leserettigheter på konfigurasjonen under daemonkontoen, og den tredje er et skrivbart sted med et smalt formå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 svarer på et smalere spørsmål enn de fleste antar. Det holder nøkkelfilen åpen gjennom de dokumenterte SIGUSR1- og ping-restart-tilbakestillingene, og det gjør ingenting for CCD-filer, tilbakekallingsdata, hjelpeprogrammer eller en full omstart av prosessen. De følger fortsatt sine egne åpningsstier, under hvilken konto som helst som kjører da.

Bekreft kontoen og visningen den faktisk har

Spør den kjørende daemonen hvilken konto den bruker i stedet for å stole på unit-filen, og sammenlign svaret med det uniten setter. Et avvik er det første som må løses, fordi hver senere tillatelsessjekk kjører som den prosessen faktisk er. Gå deretter gjennom stien komponent for komponent; gjennomgang vurderes på hvert nivå, så en lesbar fil i en mappe som ikke kan gjennomgås, forblir uleselig. Den endelige filmodusen er det siste spørsmålet, ikke det første.

Navnerom og tjenestesandkasser legger til grenser som eierskap og modusbiter ikke beskriver. En sti som er synlig i skallet ditt, kan mangle eller være skrivebeskyttet inne i en chroot, et monteringsnavnerom eller en unit som skjuler hjemmemapper. Sikkerhetsmoduler legger til ett lag til, så en fil som ser lesbar ut, kan fortsatt avvises når den åpnes.

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

En vellykket lesing i administratorens skall tester ingen av disse kombinerte betingelsene. Kjør kontrollen som daemonkontoen, med samme navnerom og sandkasse, eller godta at resultatet beskriver skallet ditt og ikke serveren. Den tredje kommandoen er den billige versjonen av den testen: den skriver ut modusen for hver komponent og feiler på den første daemonkontoen ikke kommer gjennom.

Gi kjøretidsskrivingen sin egen mappe

Lesing er bare halvparten av oversikten. Et hjelpeskript trenger kanskje å opprette en statusfil, en plugin må kanskje skrive tilstand ved siden av konfigurasjonen sin, og disse skrivingene dekkes ikke av å gjøre konfigurasjonstreet skrivbart. Gi den konkrete mappen skrivetillatelsen funksjonen dens krever, med en eier og en modus du kan forklare. Foretrekk skrivebeskyttet tilgang for alt som bare leses.

Hold den private nøkkelens tillatelser atskilt fra policyfilene. En nøkkel som må leses på nytt etter en tilbakestilling, har et annet krav enn en klientfil som leses ved hver tilkobling, og én ettergivende modus for begge gir mer tilgang enn problemet ber om. En dedikert daemonkonto med smalt eierskap er lettere å revidere enn en bred gruppe. Når nøkkelen må overleve tilbakestillinger, persist-key fjerner den nylesingen i stedet for å utvide mappen.

Bestem ut fra hendelsen du kan reprodusere

En levende tunnel beviser én vei gjennom koden. Hendelsen som trenger filen, er den eneste testen som dekker åpningen du bryr deg om, enten det er en ny klienttilkobling, en erstattet tilbakekallingsfil, en tillatt myk tilbakestilling eller en planlagt omstart. Velg hendelsen, kjør den, og behold den første feilen i stedet for den siste.

Ved en myk tilbakestilling viser ett signal og unitens logg om nøkkelen ble lest på nytt. Send signalet, og les deretter de siste linjene uniten skrev:

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

Ikke slut at en kompromittert daemon ikke lenger kan endre filer bare fordi privilegiene ble senket. Hva den fortsatt kan, avhenger av gjenværende legitimasjon, dens evner, mappene den kan skrive i og enhver skrivbar deskriptor den fortsatt holder. Privilegiereduksjon snevrer inn autoriteten, og oversikten over kjøretidsåpninger viser hvor langt. Skriv den grensen ved siden av konfigurasjonen så neste person ikke må oppdage den på nytt.

Relaterte artikler