Sumažinus privilegijas: kurie OpenVPN failai dar veikia?
Aprašai, atidaryti prieš sumažinimą, veikia toliau; keliai, atidaromi vėliau iš naujo, ne. Nuspręskite, kurį iš trijų vykdymo failų jūsų konfigūracija turi atidaryti iš naujo.
Ilgas veikimo laikas įrodo tik tai, kad paleidimas pavyko su tomis privilegijomis, kurias demonas turėjo tuo metu. Čia svarbūs gedimai ateina vėliau: prisijungia naujas klientas, pakeičiamas atšaukimo sąrašas, pagalbinis scenarijus turi įrašyti failą. Kiekvienas jų yra naujas atidarymas, kurį atlieka be privilegijų esanti paskyra, su savo leidimų klausimu ir savo klaidos pranešimu. Trys sprendimai atskiria konfigūraciją, kuri veikia toliau, nuo tos, kuri sugenda kitame įvykyje.
Atskirkite tai, kas įkelta anksti, nuo to, kas atidaroma vėliau
Aprašas yra rankena į atviro failo aprašymą, o prieigos režimas buvo nustatytas kuriant tą aprašymą. Vėlesnis proceso naudotojo pakeitimas rankenos neuždaro, todėl raktų failas, perskaitytas kaip root, veikia ir po sumažinimo. Režimas taip pat nesikeičia: skaitymui atidaryta rankena netampa rašoma, o rašoma rankena neatšaukiama vien todėl, kad paskyra prarado teises į kelią. Šie du faktai paaiškina didžiąją dalį netikėto elgesio šiose ataskaitose.
Kita pusė yra atmintis. Demonas gali išanalizuoti sertifikatą, pasilikti išanalizuotą medžiagą ir uždaryti failą; naudojami lieka duomenys, o ne atviras failas. Todėl trunkantis srautas neįrodo nei to, kad aprašas atidarytas, nei to, kad kelio vardas pasiekiamas. Jis įrodo tik tai, kad dabartinei sesijai reikalinga medžiaga buvo gauta anksčiau.
Vėlesnis atidarymas yra kita operacija. Ji vyksta su dabartiniais prisijungimo duomenimis, dabartine saugos kontekstu ir dabartiniu prijungimo vaizdu, todėl paleidimo metu skaitomas kelias gali būti atmestas kitame prisijungime. Rotacija prideda spąstus: rašant naują failą tuo pačiu kelio vardu, esamas aprašas lieka prikabintas prie seno objekto, todėl perkrovimas gali atrodyti sėkmingas, nors demonas vis dar naudoja ankstesnį turinį. Palyginkite proceso laikomą inode su esančiu diske, prieš tikėdami, kad rotacija įsigaliojo.
Įvardykite tris vykdymo skaitymus ir kada kiekvienas įvyksta
Trys ištekliai paprastai atidaromi gerokai po inicializavimo, ir jie sugenda skirtingais momentais. Konkretaus kliento konfigūracijos failas skaitomas, kai tas klientas prisijungia, todėl jis gali sugesti vienam naudotojui, kol kiti tęsia. Atšaukimo duomenys tikrinami autentifikuojant partnerį ir dar kartą, kai failas pakeičiamas. Laikinoji direktorija paliečiama tik tada, kai scenarijus ar papildinys ką nors įrašo.
Nė vienas iš trijų nepriklauso paleidimo keliui, todėl savaitėmis sveikas serveris gali sugesti kitame prisijungime. Kategorija taip pat įvardija pataisos šeimininką: pirmieji du yra skaitymo teisės į konfigūraciją pagal demono paskyrą, o trečiasis yra rašoma vieta su siauru tikslu.
| 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 atsako į siauresnį klausimą, nei dauguma mano. Jis laiko raktų failą atidarytą per dokumentuotus SIGUSR1 ir ping-restart perkrovimus, ir jis nieko nedaro CCD failams, atšaukimo duomenims, pagalbiniams vykdomiesiems failams ar visiškam proceso perkrovimui. Tie vis dar eina savo atidarymo keliais, pagal tą paskyrą, kuri tuo metu veikia.
Patvirtinkite paskyrą ir vaizdą, kurį ji tikrai turi
Paklauskite veikiančio demono, kurią paskyrą jis naudoja, o ne pasitikėkite unit failu, tada palyginkite atsakymą su tuo, ką unit nustato. Neatitikimas yra pirmas sprendžiamas dalykas, nes kiekviena vėlesnė leidimų patikra vyksta kaip tas, kas procesas iš tikrųjų yra. Tada eikite keliu komponentas po komponento; perėjimas vertinamas kiekviename lygyje, todėl skaitomas failas nepereinamoje direktorijoje lieka neskaitomas. Galutinis failo režimas yra paskutinis klausimas, o ne pirmasis.
Vardų erdvės ir paslaugos smėliadėžės prideda ribas, kurių nuosavybė ir režimo bitai neaprašo. Jūsų apvalkale matomas kelias gali būti nematomas arba tik skaitomas chroot, prijungimo vardų erdvėje arba unite, kuris slepia namų direktorijas. Saugos moduliai prideda dar vieną sluoksnį, todėl skaitomai atrodantis failas atidarant vis tiek gali būti atmestas.
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/aliceSėkmingas skaitymas administratoriaus apvalkale netikrina nė vienos iš tų sujungtų sąlygų. Vykdykite patikrą su demono paskyra, ta pačia vardų erdve ir smėliadėže, arba priimkite, kad rezultatas aprašo jūsų apvalkalą, o ne serverį. Trečioji komanda yra pigi to testo versija: ji išspausdina kiekvieno komponento režimą ir sugenda pirmame, kurio demono paskyra negali pereiti.
Duokite vykdymo rašymui atskirą direktoriją
Skaitymas yra tik pusė sąrašo. Pagalbiniam scenarijui gali reikėti sukurti būsenos failą, papildiniui gali reikėti įrašyti būseną šalia savo konfigūracijos, ir tų įrašymų nepadengia konfigūracijos medžio pavertimas rašomu. Duokite konkrečiai direktorijai rašymo leidimą, kurio reikia jos funkcijai, su šeimininku ir režimu, kuriuos galite paaiškinti. Teikite pirmenybę tik skaitymo prieigai viskam, kas tik skaitoma.
Laikykite privataus rakto leidimus atskirai nuo politikos failų. Raktas, kurį reikia perskaityti iš naujo po perkrovimo, turi kitą reikalavimą nei kliento failas, skaitomas kiekvieno prisijungimo metu, ir vienas leidus režimas abiem suteikia daugiau prieigos, nei prašo problema. Speciali demono paskyra su siaura nuosavybe audituojama lengviau nei plati grupė. Kai raktas turi išgyventi perkrovimus, persist-key pašalina pakartotinį skaitymą, o ne išplečia direktoriją.
Spręskite pagal įvykį, kurį galite atkartoti
Gyvas tunelis įrodo vieną kelią kode. Įvykis, kuriam reikia failo, yra vienintelis testas, apimantis jums rūpimą atidarymą, nesvarbu, ar tai naujas kliento prisijungimas, pakeistas atšaukimo failas, leidžiamas švelnus perkrovimas, ar suplanuotas paleidimas iš naujo. Pasirinkite įvykį, įvykdykite jį ir palikite pirmąją klaidą, o ne paskutinę.
Švelniam perkrovimui vienas signalas ir unit žurnalas parodo, ar raktas buvo perskaitytas iš naujo. Nusiųskite signalą, tada perskaitykite paskutines eilutes, kurias unit įrašė:
systemctl kill -s SIGUSR1 [email protected]
journalctl -u [email protected] -n 40 --no-pagerNedarokite išvados, kad pažeistas demonas nebegali keisti failų vien todėl, kad privilegijos buvo sumažintos. Ką jis dar gali, priklauso nuo likusių prisijungimo duomenų, jo galimybių, direktorijų, į kurias jis gali rašyti, ir bet kurio dar laikomo rašomo aprašo. Privilegijų mažinimas susiaurina įgaliojimus, o vykdymo atidarymų sąrašas parodo, kiek. Užrašykite tą ribą šalia konfigūracijos, kad kitam žmogui nereikėtų jos atrasti iš naujo.