Varoitus useista skripteistä kuulostaa ajoituksen valitukselta, joten ilmeinen korjaus on järjestää rivit uudelleen, kunnes se katoaa. Se ei ole ajoituksen valitus. Myöhempi --up-määritelmä korvaa komennon, joka on jo tallennettu kyseiselle vaiheelle, ja jäsennin sanoo sen, eli kahdesta skriptistäsi vain täsmälleen yksi on koskaan ajanut. Toinen ei odota jonossa sen takana; se on poissa.

Siksi varoitus ansaitsee huomiota, vaikka se ei ole kohtalokas: se ennakoi DNS-päivityksen tai reittimuutoksen, joka on hiljaa lakannut tapahtumasta.

Varoitus ei koske järjestystä

OpenVPN tallentaa yhden käyttäjäskriptikomennon up-vaihetta varten. Kun jäsennin kohtaa toisen määritelmän, profiilista, sisällytetystä tiedostosta tai komentoriviltä, se korvaa aiemmin pitämänsä ja antaa varoituksen. Mitään ei yhdistetä, mikään ei aja kahdesti, eikä järjestyskysymystä ole. Jäljelle jää komento, jonka jäsennin näki viimeksi, minkä vuoksi rivin siirtäminen voi vaihtaa voittajan ja jättää toisen skriptin kuolleeksi.

Sama kaava pätee muihin skriptivaiheisiin: yksi komento kuhunkin. Jos kahden työn on molempien tapahduttava, ne tarvitsevat yhden aloituspisteen, eivät kahta listaa muistuttavaa direktiiviä.

Löydä molemmat määritelmät oikeasta käynnistyksestä

Aloita siitä, mitä daemon todella sai, älä muokkaamastasi profiilista. ps -ef ja yksikön ExecStart näyttävät komentorivin, johon kontin aloituspiste tai kääre voi lisätä --up; jakelun init-tiedosto voi tehdä saman. systemctl cat openvpn-server@server paljastaa, mitä palvelu itse tuo, ja rekursiivinen grep asetushakemistossa löytää tiedostotason määritelmät. Kaksoiskappaleet tulevat yleensä eri kerroksista, ja juuri siksi yhden tiedoston muokkaaminen ei muuta mitään.

Skriptin kopioiminen toiseen hakemistoon tai uudelleennimeäminen ei sekään poista direktiiviä. Jäsennin laskee määritelmiä, ei tiedostoja.

Anna yhden hookin omistaa työ

Kestävä ratkaisu on yksi lähettäjä, joka suorittaa molemmat toiminnot harkitussa järjestyksessä. Lyhyt shell-skripti, jossa on set -eu, kutsuu tarvittavan integraation ja sitten paikallisen toiminnon ja välittää "$@", jotta argumenttien rajat säilyvät, ja pitää käyttäytymisen yhdessä auditoitavassa paikassa. Argumenttien välittäminen vain säilyttää ne; se ei osoita, että kaksi apuria odottavat samaa rajapintaa, joten lue kunkin sopimus. Päätä, mitä epäonnistumisen pitää tehdä ja pitääkö osittaiset muutokset perua.

Jos käynnistin tarjoaa tuetun laajennushookin, suosi sitä käsin rakennettuun ketjutukseen verrattuna. Säiliökuvassa tai toimittajan paketissa on usein dokumentoitu paikka lisätyölle, ja sen käyttäminen estää päivityksen kirjoittamasta lähettäjän yli.

Siivous kuuluu vastaavaan down-vaiheeseen. Up-toiminto, joka kirjoittaa DNS:n uudelleen tai lisää reittejä, tarvitsee dokumentoidun peruutuksen, ja lähettäjä, joka hoitaa vain käynnistyksen, on puoli suunnittelua.

Vahvista integraatio, älä vain hiljaisuus

Kaksoisvaroituksesta eroon pääseminen on helppo osa; integraation on silti toimittava. Tarkista resolverin tila yhteyden jälkeen komennolla resolvectl status tai lukemalla /etc/resolv.conf, ja vahvista reitit komennolla ip route. Katkaise sitten yhteys ja yhdistä uudelleen, koska kiireesti ketjutettu hook jättää yleensä jotain edellisestä istunnosta. journalctl -u openvpn-server@server -b näyttää, ajoiko lähettäjäsi ja mitä se tulosti.

Pidä hookin oikeudet siellä, minne ne kuuluvat. script-security:n nostaminen tai daemonin ajaminen useammilla oikeuksilla ei ole korjaus korvatulle hookille; se laajentaa sitä, mitä jokainen tuleva skripti voi tehdä, mukaan lukien se, jonka hyökkääjä saa nimetä.

Merkki siitä, että korjaus on todellinen, ei ole hiljaisuus lokissa. Se on DNS-vastaus, reittimerkintä ja siivous, jotka kaikki toimivat kahden uudelleenyhdistämisen jälkeen.

Aiheeseen liittyvät artikkelit