Hookid teatavad õnnestumisest, ja seesama tee näeb kestast vaadatuna endiselt tühi välja. Mõlemad väited võivad korraga tõesed olla, sest systemd teenus võib elada oma mount-nimeruumis privaatse ajutise kataloogiga. Kui see on selge, muutub huvitavaks küsimuseks, kas kirjutamine üldse õnnestus.

Kaks ajutist kataloogi, üks tee

Isoleerimissäte annab üksusele privaatse vaate ajutistele kataloogidele, selle asemel et muuta need kirjutuskaitstuks. Väljaspool üksust olevad protsessid ei näe, mida see sinna kirjutab, ja kõik, mis jääb maha, visatakse ära, kui üksus peatub. Seetõttu võivad hooki väljastatud tee ja kestast kontrollitud tee osutada erinevatele samanimelistele objektidele.

See on nähtavuse probleem ja näeb välja nagu andmekao probleem. Midagi ei kustutatud, sest fail on lihtsalt nimeruumis, mille liige kest ei ole. Sama käsk käitub üksuse sees teisiti, ja see tähelepanek tavaliselt vaidluse lahendab. Loe üksuse sätteid enne, kui kirjutamise kohta midagi järeldad.

Erista nähtamatu mittekirjutatavast

Õnnestunud kirjutamine ja ebaõnnestunud avamine annavad erinevaid tõendeid, ja see erinevus otsustab paranduse. Kui hook ütleb, et fail loodi, aga väline lugeja ei leia seda, on sul nimeruumi küsimus. Kui hook teatab õiguseveast või ebaõnnestunud avamisest, ei kirjutatud faili kunagi ja ükski nimeruumi muudatus ei aita.

systemctl show [email protected] -p PrivateTmp -p User -p Group -p RuntimeDirectory
systemctl show [email protected] -p MainPID --value
sudo ls -l /proc/PID/root/tmp/client-state

Protsessi juure tee paljastab teenuse enda failisüsteemi vaate, sõltudes selle protsessi õiguste kontrollidest, kuni see veel töötab. Loe üksuse päevikut samas seansis, sest kirjutamisviga ja puuduv fail on kergesti segiaetavad, kui keegi on põhjuse juba otsustanud.

Anna jagatud andmetele selge asukoht

Andmed, mida vajab ainult teenus, kuuluvad selle privaatsesse ajutisse kataloogi. Andmed, mida peab lugema teine protsess, vajavad mõlemale määratud teed, koos märgitud omaniku, režiimi ja aegumisega. Otsusta, kumb kahest juhtumist sul on, enne kui üksust muudad. Enamik neist juhtumitest tuleb sellest, et privaatset faili koheldakse jagatuna.

[Service]
RuntimeDirectory=openvpn-hook-office
RuntimeDirectoryMode=0750

Käituskataloog paigutab kausta süsteemi käituspiirkonda, loob selle üksuse konfigureeritud kasutajale ja grupile ning eemaldab selle, kui üksus peatub. Lisa see drop-ini kaudu, et paketi üksus jääks puutumata, seejärel laadi haldur uuesti ja taaskäivita see eksemplar, nõustudes, et selle kliendid ühenduvad uuesti.

Säilita iga käituskataloog, mida paigaldatud üksus juba nõuab. Nimekirja asendamine selle täiendamise asemel on tavaline viis rikkuda kõrvalist funktsiooni, mida keegi muudatusega ei seosta.

Kaks õiguste kihti võivad erineda

Teenusehaldur loob kataloogi üksuse konfigureeritud kasutajale, samas kui VPN-deemon võib enne ühenduse hooki käivitamist eraldi oma kontole langeda. Need on erinevad kihid ja need võivad nimetada erinevaid identiteete.

Rootile kuuluv range režiimiga kataloog on deemonile, kes on õigused juba loovutanud, täiesti nähtav ja siiski selle jaoks mittekirjutatav. Viga loetakse siis õiguste probleemina, kuigi tee on täpselt seal, kus sa seda ootasid. Võrdle kataloogi omanikku identiteediga, mida hook teatab. Kui need erinevad, ei olnud režiim kunagi küsimus.

Kontrolli identiteeti, mille all hook tegelikult töötab, enne omandi muutmist. Teenuse käivitaja kasutaja muutmine kataloogi parandamiseks võib mujal muuta seadmejuurdepääsu ja võrguõigusi, mis on väikese probleemi eest suur hind.

Kontrolli kogu üleandmine

Kinnita korraga neli asja: hook kirjutab oma tegeliku identiteedi all, ettenähtud lugeja saab faili tarbida, kõrvalised kasutajad ei saa, ja üksuse peatamine koristab nii, nagu projekteeritud. Faili ilmumine hosti jagatud ajutisse kataloogi ei ole nõue, ja see on tavaliselt märk, et vahetus ei saanud kunagi oma teed. Testi lugejat pärast taaskäivitust, mitte ainult esimese käivituse ajal. Koristamiskäitumine on disaini osa, seega vaatle seda, mitte ära eelda.

Püsiv olek kuulub kohta, mille eluiga sobib, sest käituskataloog on mõeldud kaduma. Vali asukoht eluea, mitte mugavuse järgi. See harjumus hoiab ära sama uurimise järgmise versiooni.

Seotud artiklid