Opozorilo o več skriptih zveni kot pritožba zaradi razporejanja, zato je očitna rešitev preurejati vrstice, dokler ne izgine. Ni pritožba zaradi razporejanja. Poznejša definicija --up nadomesti ukaz, ki je že shranjen za to stopnjo, in razčlenjevalnik to pove, kar pomeni, da se je od vaših dveh skriptov kdaj izvedel natanko eden. Drugi ne čaka v vrsti za njim; izginil je.

Zato si opozorilo zasluži pozornost, čeprav ni usodno: napoveduje posodobitev DNS ali spremembo poti, ki je tiho prenehala potekati.

Opozorilo ne govori o vrstnem redu

OpenVPN shrani en sam ukaz uporabniškega skripta za stopnjo up. Ko razčlenjevalnik naleti na drugo definicijo, iz profila, vključene datoteke ali ukazne vrstice, nadomesti to, kar je že imel, in izda opozorilo. Nič se ne združuje, nič se ne izvede dvakrat in vprašanje vrstnega reda ne obstaja. Preživi ukaz, ki ga je razčlenjevalnik videl nazadnje, zato lahko premik vrstice zamenja zmagovalca, drugi skript pa ostane mrtev.

Enak vzorec velja za druge stopnje skriptov: en ukaz na vsako. Če se morata zgoditi oba dela, potrebujeta eno vstopno točko, ne dveh direktiv, ki spominjata na seznam.

Poiščite obe definiciji v resničnem zagonu

Začnite s tem, kar je demon dejansko prejel, ne s profilom, ki ste ga uredili. ps -ef in ExecStart enote prikazujeta ukazno vrstico, v katero lahko vstopna točka vsebnika ali ovoj doda --up; init datoteka distribucije lahko stori enako. systemctl cat openvpn-server@server razkrije, kaj prispeva sama storitev, in rekurzivni grep po konfiguracijski mapi najde definicije na ravni datotek. Dvojniki običajno prihajajo iz različnih plasti, in prav zato urejanje ene datoteke ne spremeni ničesar.

Kopiranje skripta v drugo mapo ali preimenovanje prav tako ne odstrani direktive. Razčlenjevalnik šteje definicije, ne datotek.

Naj en hook lasti delo

Trajna rešitev je en pošiljatelj, ki izvede obe dejanji v premšljenem vrstnem redu. Kratka shell skripta z set -eu, ki pokliče potrebno integracijo in nato lokalno dejanje ter posreduje "$@", da meje argumentov preživijo, ohranja vedenje na enem preglednem mestu. Posredovanje argumentov jih le ohrani; ne dokazuje, da oba pomočnika pričakujeta isti vmesnik, zato preberite pogodbo vsakega. Odločite se, kaj naj stori napaka in ali je treba delne spremembe razveljaviti.

Če zaganjalnik ponuja podprt hook za razširitev, mu dajte prednost pred ročno zgrajeno verigo. Vsebniška slika ali paket ponudnika ima pogosto dokumentirano mesto za dodatno delo, in njegova uporaba prepreči, da bi posodobitev prepisala vašega pošiljatelja.

Čiščenje sodi v ustrezno stopnjo down. Dejanje up, ki prepiše DNS ali doda poti, potrebuje dokumentirano razveljavitev, in pošiljatelj, ki skrbi le za zagon, je polovica zasnove.

Potrdite integracijo, ne le tišine

Odstraniti opozorilo o dvojniku je lažji del; integracija mora še vedno delovati. Po povezavi preverite stanje razreševalnika s resolvectl status ali z branjem /etc/resolv.conf, in potrdite poti s ip route. Nato se odklopite in znova povežite, ker hook, povezan v naglici, običajno pusti kaj iz prejšnje seje. journalctl -u openvpn-server@server -b pokaže, ali je vaš pošiljatelj tekel in kaj je izpisal.

Pridržite pravice hooka tam, kjer jim je mesto. Dvigovanje script-security ali zaganjanje demona z več pravicami ni popravek za zamenjan hook; širi, kaj lahko stori vsak prihodnji skript, vključno s tistim, ki ga poimenuje napadalec.

Znak, da je popravek resničen, ni tišina v dnevniku. To so odgovor DNS, vnos poti in čiščenje, ki vsi delujejo po dveh ponovnih povezavah.

Sorodni članki