Kun oikeudet on pudotettu: mitkä OpenVPN-tiedostot toimivat yhä?
Ennen pudotusta avatut kuvaajat toimivat edelleen; myöhemmin uudelleen avatut polut eivät. Päätä, minkä kolmesta ajonaikaisesta tiedostosta kokoonpanosi on avattava uudelleen.
Pitkä käyntiaika todistaa vain, että käynnistys onnistui niillä oikeuksilla, jotka taustapalvelulla oli tuolla hetkellä. Tässä merkitykselliset viat tulevat myöhemmin: uusi asiakas yhdistää, peruutuslista korvataan, apuskriptin on kirjoitettava tiedosto. Jokainen niistä on uusi avaus, jonka tekee vailla oikeuksia oleva tili, ja jokaisella on oma lupakysymyksensä ja oma virheilmoituksensa. Kolme päätöstä erottaa kokoonpanon, joka toimii edelleen, siitä, joka epäonnistuu seuraavassa tapahtumassa.
Erottele aikaisin ladattu siitä, mikä avataan myöhemmin
Kuvaaja on kahva avoimeen tiedostokuvaukseen, ja käyttötila vahvistettiin, kun kuvaus luotiin. Prosessin käyttäjän vaihtaminen myöhemmin ei sulje kahvaa, miksi rootina luettu avaintiedosto toimii yhä pudotuksen jälkeen. Tilakaan ei muutu: lukemista varten avattu kahva ei muutu kirjoitettavaksi, eikä kirjoitettavaa kahvaa peruta vain siksi, että tili menetti oikeutensa polkuun. Nämä kaksi tosiasiaa selittävät suurimman osan näiden raporttien yllättävästä käytöksestä.
Toinen puoli on muisti. Taustapalvelu voi jäsentää varmenteen, pitää jäsennetyn materiaalin ja sulkea tiedoston; käytössä säilyy tieto, ei avoin tiedosto. Siksi jatkuva liikenne ei todista, että kuvaaja on auki, eikä sitä, että polun nimi on tavoitettavissa. Se todistaa vain, että nykyiseen istuntoon tarvittava materiaali hankittiin aikaisemmin.
Myöhempi avaus on toinen tapahtuma. Se ajetaan nykyisillä tunnuksilla, nykyisessä turvakontekstissa ja nykyisessä liitännän näkymässä, joten käynnistyksessä luettava polku voidaan hylätä seuraavassa yhteydessä. Kierrätys lisää ansan: uuden tiedoston kirjoittaminen saman polun nimen päälle jättää olemassa olevan kuvaajan kiinni vanhaan objektiin, joten uudelleenlataus voi näyttää onnistuneelta, vaikka taustapalvelu käyttää yhä edellistä sisältöä. Vertaa prosessin hallussa olevaa inodea levyllä olevaan ennen kuin uskot kierrätyksen toteutuneen.
Nimeä kolme ajonaikaista lukua ja milloin kukin laukeaa
Kolme resurssia avataan yleensä kauan alustuksen jälkeen, ja ne epäonnistuvat eri hetkinä. Tietyn asiakkaan kokoonpanotiedosto luetaan, kun juuri se asiakas yhdistää, joten se voi rikkoutua yhdelle käyttäjälle muiden jatkaessa. Peruutustietoja tarkastellaan vertaisverkon todentamisen aikana ja uudelleen, kun tiedosto korvataan. Väliaikaiseen hakemistoon kosketaan vain, kun skripti tai liitännäinen kirjoittaa jotain.
Mikään kolmesta ei kuulu käynnistyspolkuun, miksi viikkoja terve palvelin voi epäonnistua seuraavassa yhteydessä. Luokka nimeää myös korjauksen omistajan: kaksi ensimmäistä ovat lukuoikeuksia kokoonpanoon taustapalvelun tilin alla, ja kolmas on kirjoitettava paikka, jolla on kapea tarkoitus.
| Path reopened later | What triggers the open | First sign when it fails |
|---|---|---|
| Client configuration file | A connection for that client identity | One client rejected while others connect |
| Revocation data | Peer authentication, including after replacement | Revoked and valid peers both refused |
| Script or plugin temporary directory | A helper needs to create a file | The helper exits with a path error |
persist-key vastaa kapeampaan kysymykseen kuin useimmat olettavat. Se pitää avaintiedoston auki dokumenttien mukaisissa SIGUSR1- ja ping-restart-nollauksissa, eikä se tee mitään CCD-tiedostoille, peruutustiedoille, apuohjelmille tai koko prosessin uudelleenkäynnistykselle. Ne seuraavat yhä omia avauspolkujaan, minkä tahansa sillä hetkellä käynnissä olevan tilin alla.
Vahvista tili ja näkymä, joka sillä todella on
Kysy käynnissä olevalta taustapalvelulta, mitä tiliä se käyttää, sen sijaan että luottaisit unit-tiedostoon, ja vertaa vastausta siihen, mitä unit asettaa. Ristiriita on ensimmäinen ratkaistava asia, koska jokainen myöhempi lupatarkistus ajetaan sen mukaan, kuka prosessi todella on. Käy sitten polku läpi komponentti kerrallaan; läpikulku arvioidaan jokaisella tasolla, joten luettava tiedosto hakemistossa, jota ei voi kulkea läpi, pysyy lukukelvottomana. Lopullinen tiedostotila on viimeinen kysymys, ei ensimmäinen.
Nimiavaruudet ja palvelun hiekkalaatikot lisäävät rajoja, joita omistus ja tilabitit eivät kuvaa. Shellissäsi näkyvä polku voi puuttua tai olla vain luku -tilassa chrootissa, liitännän nimiavaruudessa tai unitissa, joka kätkee kotihakemistot. Turvamoduulit lisäävät vielä yhden kerroksen, joten luettavalta näyttävä tiedosto voidaan silti hylätä, kun se avataan.
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/aliceOnnistunut luku ylläpitäjän shellissä ei testaa yhtäkään näistä yhdistetyistä ehdoista. Aja tarkistus taustapalvelun tilinä, samassa nimiavaruudessa ja hiekkalaatikossa, tai hyväksy, että tulos kuvaa shelliäsi eikä palvelinta. Kolmas komento on tuon testin halpa versio: se tulostaa jokaisen komponentin tilan ja epäonnistuu ensimmäisessä, jota taustapalvelun tili ei voi kulkea läpi.
Anna ajonaikaiselle kirjoitukselle oma hakemisto
Lukeminen on vain puolet luettelosta. Apuskripti voi tarvita tilatiedoston luomista, liitännäinen voi tarvita tilan kirjoittamista kokoonpanonsa viereen, eikä näitä kirjoituksia kata se, että kokoonpanopuu tehdään kirjoitettavaksi. Anna tietylle hakemistolle sen toiminnon tarvitsema kirjoituslupa, omistajalla ja tilalla, jonka voit selittää. Suosi vain luku -käyttöä kaikelle, mitä vain luetaan.
Pidä yksityisen avaimen oikeudet erillään käytäntötiedostoista. Avain, joka on luettava uudelleen nollauksen jälkeen, vaatii eri asiaa kuin jokaisessa yhteydessä luettava asiakastiedosto, ja yksi salliva tila molemmille antaa enemmän pääsyä kuin ongelma pyytää. Oma kapeaomisteinen taustapalvelun tili on helpompi auditoida kuin laaja ryhmä. Kun avaimen on kestettävä nollaukset, persist-key poistaa uudelleenluvun hakemiston laajentamisen sijaan.
Päätä tapahtumasta, jonka voit toistaa
Elävä tunneli todistaa yhden polun koodin läpi. Tapahtuma, joka tarvitsee tiedoston, on ainoa testi, joka kattaa sinua kiinnostavan avauksen, oli se sitten uusi asiakasyhteys, korvattu peruutustiedosto, sallittu pehmeä nollaus tai suunniteltu uudelleenkäynnistys. Valitse tapahtuma, aja se ja pidä ensimmäinen virhe viimeisen sijaan.
Pehmeässä nollauksessa yksi signaali ja unitin loki näyttävät, luettiinko avain uudelleen. Lähetä signaali ja lue sitten viimeiset rivit, jotka unit kirjoitti:
systemctl kill -s SIGUSR1 [email protected]
journalctl -u [email protected] -n 40 --no-pagerÄlä päättele, että vaarantunut taustapalvelu ei enää voi muuttaa tiedostoja vain siksi, että oikeuksia laskettiin. Siihen, mitä se yhä voi, vaikuttavat jäljellä olevat tunnukset, sen kyvyt, hakemistot joihin se voi kirjoittaa ja jokainen yhä hallussa oleva kirjoitettava kuvaaja. Oikeuksien vähentäminen kaventaa valtaa, ja ajonaikaisten avausten luettelo näyttää kuinka paljon. Kirjoita se raja kokoonpanon viereen, jotta seuraavan ihmisen ei tarvitse löytää sitä uudelleen.