Hoiatus mitme skripti kohta kõlab nagu kaebus ajastamise üle, seega on ilmne parandus ridu ümber järjestada, kuni see kaob. See ei ole kaebus ajastamise üle. Hilisem --up definitsioon asendab selle etapi jaoks juba salvestatud käsu ja parser ütleb seda, mis tähendab, et teie kahest skriptist on kunagi töötanud täpselt üks. Teine ei oota selle taga järjekorras; see on kadunud.

Seetõttu väärib hoiatus tähelepanu, kuigi see pole fataalne: see ennustab DNS-i värskendust või marsruudi muutust, mis vaikselt toimuma lakkas.

Hoiatus ei ole järjekorrast

OpenVPN hoiab up etapi jaoks ühte kasutajaskripti käsku. Kui parser kohtab teist definitsiooni, profiilist, kaasatud failist või käsurealt, asendab see selle, mida ta juba hoidis, ja väljastab hoiatuse. Midagi ei liideta, miski ei tööta kaks korda ja järjekorra küsimust ei ole olemas. Ellu jääb käsk, mille parser viimasena nägi, mistõttu rea liigutamine võib võitjat muuta, jättes teise skripti surnuks.

Sama muster kehtib ka teiste skriptietappide kohta: üks käsk igaühe kohta. Kui kaks tööd peavad mõlemad juhtuma, vajavad need üht sisenemispunkti, mitte kahte loendit meenutavat direktiivi.

Leidke mõlemad definitsioonid tegelikust käivitamisest

Alustage sellest, mida deemon tegelikult sai, mitte profiilist, mida muutsite. ps -ef ja üksuse ExecStart näitavad käsurida, kuhu võib konteineri sisenemispunkt või ümbris lisada --up; distributsiooni init-fail võib teha sama. systemctl cat openvpn-server@server paljastab, mida teenus ise lisab, ja rekursiivne grep konfiguratsioonikataloogis leiab failitasandi definitsioonid. Duplikaadid tulevad tavaliselt erinevatest kihtidest ja just seetõttu ei muuda ühe faili muutmine midagi.

Skripti teise kataloogi kopeerimine või ümbernimetamine ei eemalda samuti direktiivi. Parser loeb definitsioone, mitte faile.

Las üks hook omab tööd

Püsiv lahendus on üks dispetšer, mis käivitab mõlemad toimingud teadlikus järjekorras. Lühike shell-skript koos set -eu-ga, mis kutsub vajaliku integratsiooni ja seejärel kohaliku toimingu ning edastab "$@", et argumendipiirid püsiksid, hoiab käitumise ühes auditeeritavas kohas. Argumentide edastamine ainult säilitab need; see ei tõesta, et kaks abilist ootavad sama liidest, seega lugege igaühe lepingut. Otsustage, mida ebaõnnestumine peaks tegema ja kas osalised muudatused tuleb tagasi pöörata.

Kui käivitaja pakub toetatud laiendushooki, eelistage seda käsitsi tehtud ahelale. Konteinerikujutis või tarnija pakett sisaldab sageli dokumenteeritud kohta lisatööks ja selle kasutamine hoiab uuenduse teie dispetšeri üle kirjutamast.

Puhastamine kuulub vastavasse down-etappi. Up-toiming, mis kirjutab DNS-i üle või lisab marsruute, vajab dokumenteeritud tagasipööramist, ja dispetšer, mis tegeleb ainult käivitamisega, on pool disaini.

Kinnitage integratsioon, mitte ainult vaikus

Duplikaathoiatusest vabanemine on lihtne osa; integratsioon peab ikkagi töötama. Kontrollige pärast ühendamist resolveri olekut käsuga resolvectl status või lugedes /etc/resolv.conf, ja kinnitage marsruudid käsuga ip route. Seejärel katkestage ja ühendage uuesti, sest kiirustades aheldatud hook jätab tavaliselt eelmisest seansist midagi maha. journalctl -u openvpn-server@server -b näitab, kas teie dispetšer töötas ja mida see väljastas.

Hoidke hooki õigused seal, kuhu need kuuluvad. script-security suurendamine või deemoni käivitamine suuremate õigustega ei ole asendatud hooki parandus; see laiendab, mida iga tulevane skript teha võib, kaasa arvatud see, mille ründaja nimetab.

Märk sellest, et parandus on tõeline, ei ole vaikus logis. See on DNS-vastus, marsruudikirje ja puhastamine, mis kõik töötavad pärast kahte taasühendust.

Seotud artiklid