Po znižanju pravic: katere datoteke OpenVPN še delujejo?
Deskriptorji, odprti pred znižanjem, delujejo naprej; poti, ki se pozneje znova odprejo, ne. Odločite, katero od treh izvajalnih datotek mora vaša konfiguracija znova odpreti.
Dolgo delovanje dokazuje le, da je zagon uspel s pravicami, ki jih je demon imel v tistem trenutku. Okvare, ki tu štejejo, pridejo pozneje: poveže se nov odjemalec, zamenja se seznam preklicev, pomožna skripta mora zapisati datoteko. Vsaka od njih je novo odpiranje, ki ga izvede račun brez pravic, z lastnim vprašanjem o dovoljenjih in lastnim sporočilom o napaki. Tri odločitve ločijo konfiguracijo, ki deluje naprej, od tiste, ki odpove ob naslednjem dogodku.
Ločite, kar se je naložilo zgodaj, od tega, kar se odpira pozneje
Deskriptor je ročaj na odprtem opisu datoteke, način dostopa pa je bil določen ob nastanku tega opisa. Poznejša zamenjava uporabnika procesa ročaja ne zapre, zato datoteka s ključem, prebrana kot root, deluje tudi po znižanju. Tudi način se ne spremeni: ročaj, odprt za branje, ne postane zapisljiv, zapisljiv ročaj pa se ne prekliče samo zato, ker je račun izgubil pravice na poti. Ti dve dejstvi pojasnjujeta večino presenetljivega vedenja v teh poročilih.
Druga polovica je pomnilnik. Demon lahko potrdilo razčleni, razčlenjeno gradivo obdrži in datoteko zapre; v uporabi ostanejo podatki, ne odprta datoteka. Zato trajajoči promet ne dokazuje ne tega, da je deskriptor odprt, ne tega, da je ime poti dosegljivo. Dokazuje le, da je bilo gradivo, potrebno za sedanjo sejo, pridobljeno prej.
Poznejše odpiranje je druga transakcija. Izvaja se s trenutnimi poverilnicami, trenutnim varnostnim kontekstom in trenutnim pogledom priklopa, zato je lahko pot, berljiva ob zagonu, ob naslednji povezavi zavrnjena. Vrtenje doda past: zapis nove datoteke čez isto ime poti pusti obstoječi deskriptor pripet na stari objekt, zato je lahko ponovno nalaganje videti uspešno, medtem ko demon še vedno uporablja prejšnjo vsebino. Primerjajte inode, ki ga drži proces, s tistim na disku, preden verjamete vrtenju.
Poimenujte tri izvajalna branja in kdaj se zgodi vsako
Trije viri se običajno odprejo veliko po inicializaciji in odpovejo ob različnih trenutkih. Konfiguracijska datoteka določenega odjemalca se prebere, ko se ta odjemalec poveže, zato lahko odpove pri enem uporabniku, medtem ko drugi nadaljujejo. Podatki o preklicu se preverijo med overjanjem partnerja in znova ob zamenjavi datoteke. Začasna mapa se dotakne le, ko skript ali vtičnik kaj zapiše.
Nobeden od treh ne sodi na zagonsko pot, zato lahko strežnik, zdrav tedne, odpove ob naslednji povezavi. Kategorija poimenuje tudi lastnika popravka: prva dva so pravice branja konfiguracije pod računom demona, tretji pa je zapisljivo mesto z ozkim namenom.
| Path reopened later | What triggers the open | First sign when it fails |
|---|---|---|
| Client configuration file | A connection for that client identity | One client rejected while others connect |
| Revocation data | Peer authentication, including after replacement | Revoked and valid peers both refused |
| Script or plugin temporary directory | A helper needs to create a file | The helper exits with a path error |
persist-key odgovarja na ožje vprašanje, kot jih večina domneva. Ohranja datoteko s ključem odprto skozi dokumentirane ponastavitve SIGUSR1 in ping-restart, in ne stori ničesar za datoteke CCD, podatke o preklicu, pomožne izvedljive datoteke ali popoln ponoven zagon procesa. Ti še vedno sledijo svojim potem odpiranja, pod tistim računom, ki takrat teče.
Potrdite račun in pogled, ki ga res ima
Vprašajte delujoči demon, kateri račun uporablja, namesto da zaupate datoteki unit, nato primerjajte odgovor s tem, kar unit določa. Neujemanje je prva stvar, ki jo je treba rešiti, ker vsako poznejše preverjanje pravic teče kot tisti, ki proces v resnici je. Nato prehodite pot komponento za komponento; prehod se ocenjuje na vsaki ravni, zato berljiva datoteka v mapi, skozi katero ni mogoče priti, ostane neberljiva. Končni način datoteke je zadnje vprašanje, ne prvo.
Imenski prostori in peskovniki storitve dodajajo meje, ki jih lastništvo in biti načina ne opisujejo. Pot, vidna v vaši lupini, lahko manjka ali je samo za branje znotraj chroot, imenskega prostora priklopa ali unita, ki skriva domače mape. Varnostni moduli dodajo še eno plast, zato je datoteka, ki je videti berljiva, ob odpiranju vseeno lahko zavrnjena.
ps -o user:12,pid,args -C openvpn
systemctl show -p User -p Group -p ProtectHome -p RootDirectory [email protected]
sudo -u openvpn namei -l /etc/openvpn/ccd/aliceUspešno branje v lupini skrbnika ne preizkusi nobenega od teh združenih pogojev. Izvedite preverjanje kot račun demona, z istim imenskim prostorom in peskovnikom, ali sprejmite, da rezultat opisuje vašo lupino in ne strežnika. Tretji ukaz je poceni različica tega testa: izpiše način vsake komponente in odpove pri prvi, skozi katero račun demona ne more priti.
Dajte izvajalnemu pisanju svojo mapo
Branje je le polovica popisa. Pomožna skripta mora morda ustvariti statusno datoteko, vtičnik mora morda zapisati stanje ob svoji konfiguraciji, in teh zapisov ne pokrije to, da postane drevo konfiguracije zapisljivo. Dajte določeni mapi pravico pisanja, ki jo funkcija potrebuje, z lastnikom in načinom, ki ju znate pojasniti. Za vse, kar se samo bere, dajte prednost dostopu samo za branje.
Držite pravice zasebnega ključa ločeno od političnih datotek. Ključ, ki ga je treba po ponastavitvi znova prebrati, ima drugačno zahtevo kot odjemalčeva datoteka, ki se bere ob vsaki povezavi, in en popustljiv način za oba daje več dostopa, kot zahteva težava. Namenski račun demona z ozkim lastništvom je lažje revidirati kot široko skupino. Ko mora ključ preživeti ponastavitve, persist-key odstrani ponovno branje, namesto da bi razširil mapo.
Odločite po dogodku, ki ga lahko ponovite
Živ tunel dokazuje eno pot skozi kodo. Dogodek, ki potrebuje datoteko, je edini test, ki pokrije odpiranje, ki vas zanima, pa naj bo to nova odjemalčeva povezava, zamenjana datoteka preklica, dovoljena mehka ponastavitev ali načrtovan ponoven zagon. Izberite dogodek, izvedite ga in obdržite prvo napako, ne zadnje.
Pri mehki ponastavitvi en signal in dnevnik unita pokažeta, ali je bil ključ znova prebran. Pošljite signal in nato preberite zadnje vrstice, ki jih je unit zapisal:
systemctl kill -s SIGUSR1 [email protected]
journalctl -u [email protected] -n 40 --no-pagerNe sklepajte, da kompromitirani demon ne more več spreminjati datotek samo zato, ker so bile pravice znižane. Kaj še zmore, je odvisno od preostalih poverilnic, njegovih zmožnosti, map, v katere lahko piše, in vsakega še vedno držanega zapisljivega deskriptorja. Znižanje pravic zoži oblast, popis izvajalnih odpiranj pa pokaže, koliko. Zapišite to mejo ob konfiguracijo, da je naslednja oseba ne bo morala znova odkrivati.