Hooki poročajo o uspehu, ista pot pa je iz lupine še vedno videti prazna. Obe trditvi sta lahko resnični hkrati, ker lahko storitev systemd živi v svojem lastnem mount imenskem prostoru z zasebno začasno mapo. Ko je to razumljeno, postane zanimivo vprašanje, ali je pisanje sploh uspelo.

Dve začasni mapi, ena pot

Nastavitev izolacije enoti da zaseben pogled na začasne mape, namesto da bi jih naredila samo za branje. Procesi zunaj enote ne vidijo, kaj piše tja, in vse, kar pusti za seboj, se zavrže, ko se enota ustavi. Zato lahko pot, ki jo natisne hook, in pot, preverjena iz lupine, kažeta na različne predmete z istim imenom.

To je problem vidnosti in je videti kot problem izgube podatkov. Nič ni bilo izbrisano, ker je datoteka preprosto v imenskem prostoru, katerega član lupina ni. Isti ukaz se obnaša drugače, ko se izvaja znotraj enote, in to opažanje običajno razreši spor. Preden karkoli sklepate o pisanju, preberite nastavitve enote.

Ločite nevidno od nezapisljivega

Uspešno pisanje in neuspešno odpiranje dajeta različne dokaze, in ta razlika odloči popravilo. Če hook pravi, da je datoteka nastala, vendar je zunanji bralnik ne najde, imate vprašanje imenskega prostora. Če hook poroča o napaki dovoljenja ali neuspešnem odpiranju, datoteka ni bila nikoli zapisana in nobena sprememba imenskega prostora ne bo pomagala.

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

Pot skozi koren procesa razkrije lastni pogled storitve na datotečni sistem, odvisen od preverjanj dovoljenj na tem procesu, dokler ta še teče. Berite dnevnik enote v isti seji, ker je napako pisanja in manjkajočo datoteko zlahka zamenjati, ko se je nekdo že odločil za vzrok.

Dajte skupnim podatkom izrecno mesto

Podatki, ki jih potrebuje samo storitev, spadajo v njeno zasebno začasno mapo. Podatki, ki jih mora brati drug proces, potrebujejo pot, določeno za oba, z navedenim lastnikom, načinom in veljavnostjo. Pred urejanjem enote se odločite, kateri od obeh primerov imate. Večina teh dogodkov izvira iz tega, da se zasebna datoteka obravnava kot skupna.

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

Izvajalna mapa postavi mapo pod sistemsko območje izvajanja, ustvari jo za nastavljenega uporabnika in skupino enote ter jo odstrani, ko se enota ustavi. Dodajte jo prek drop-ina, da enota paketa ostane nedotaknjena, nato znova naložite upravitelja in znova zaženite ta primerek, pri čemer sprejmete, da se bodo njegovi odjemalci znova povezali.

Ohranite vsako izvajalno mapo, ki jo nameščena enota že zahteva. Zamenjava seznama namesto dodajanja k njemu je pogost način, kako pokvariti nepovezano funkcijo, ki je nihče ne poveže s spremembo.

Dve plasti pravic se lahko razhajata

Upravitelj storitev ustvari mapo za nastavljenega uporabnika enote, medtem ko se lahko daemon VPN pred zagonom hooka povezave ločeno spusti na svoj lastni račun. To so različne plasti in lahko poimenujejo različne identitete.

Mapa v lasti roota z omejevalnim načinom je popolnoma vidna daemonu, ki se je pravicam že odpovedal, in mu še vedno ni dovoljeno pisati vanjo. Napaka se takrat bere kot problem dovoljenj, čeprav pot obstaja točno tam, kjer ste jo pričakovali. Primerjajte lastnika mape z identiteto, ki jo poroča hook. Ko se razlikujeta, način nikoli ni bil vprašanje.

Preden spremenite lastništvo, preverite, pod katero identiteto hook resnično teče. Sprememba uporabnika izvajanja storitve zaradi popravka mape lahko spremeni dostop do naprav in omrežne pravice drugje, kar je visoka cena za majhen problem.

Preverite celotno predajo

Potrdite štiri stvari hkrati: hook piše pod svojo resnično identiteto, predvideni bralnik lahko uporabi datoteko, nepovezani uporabniki ne morejo, in ustavitev enote počisti, kot je bilo načrtovano. Da se datoteka pojavi v skupni začasni mapi gostitelja, ni zahteva in je običajno znak, da izmenjava nikoli ni dobila svoje poti. Preizkusite bralnik po ponovnem zagonu, ne le med prvim izvajanjem. Vedenje pri čiščenju je del zasnove, zato ga opazujte, namesto da bi ga predpostavljali.

Trajno stanje spada nekam z ustrezno življenjsko dobo, saj je izvajalna mapa namenjena izginotju. Lokacijo izberite po življenjski dobi in ne po priročnosti. Ta navada prepreči naslednjo različico iste preiskave.

Sorodni članki