PrivateTmp: hook zapísal súbor, ale kam sa podel?
Súkromný dočasný menný priestor súbor skôr skrýva, než maže. Pred zmenou jednotky skontrolujte koreň procesu a potom dajte zdieľaným údajom skutočnú cestu.
Hooky hlásia úspech, a tá istá cesta z shellu stále vyzerá prázdna. Obe tvrdenia môžu platiť súčasne, pretože služba systemd môže žiť vo vlastnom mount mennom priestore so súkromným dočasným adresárom. Keď to pochopíte, zaujímavou otázkou sa stane, či zápis vôbec uspel.
Dva dočasné adresáre, jedna cesta
Nastavenie izolácie dáva jednotke súkromný pohľad na dočasné adresáre, namiesto toho, aby ich urobilo iba na čítanie. Procesy mimo jednotky nevidia, čo tam zapisuje, a všetko, čo po sebe zanechá, sa zahodí, keď sa jednotka zastaví. Cesta vypísaná hookom a cesta overená z shellu preto môžu označovať rôzne objekty s rovnakým názvom.
To je problém viditeľnosti a vyzerá ako problém straty údajov. Nič sa nezmazalo, pretože súbor je jednoducho v mennom priestore, ktorého členom shell nie je. Ten istý príkaz sa správa inak, keď sa spustí vnútri jednotky, a to je pozorovanie, ktoré spor zvyčajne vyrieši. Prečítajte si nastavenia jednotky, než o zápise čokoľvek uzavriete.
Oddeľte neviditeľné od nezapisovateľného
Úspešný zápis a neúspešné otvorenie dávajú rôzne dôkazy a tento rozdiel určuje opravu. Ak hook tvrdí, že súbor vznikol, ale vonkajší čitateľ ho nenájde, máte otázku menného priestoru. Ak hook hlási chybu oprávnenia alebo neúspešné otvorenie, súbor nebol nikdy zapísaný a žiadna zmena menného priestoru nepomôže.
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-stateCesta cez koreň procesu odhaľuje vlastný pohľad služby na súborový systém, podliehajúci kontrolám oprávnení na daný proces, kým ešte beží. Čítajte žurnál jednotky v tej istej relácii, pretože chybu zápisu a chýbajúci súbor možno ľahko zameniť, keď už niekto príčinu rozhodol.
Dajte zdieľaným údajom výslovné miesto
Údaje, ktoré potrebuje len služba, patria do jej súkromného dočasného adresára. Údaje, ktoré musí čítať iný proces, potrebujú cestu definovanú pre oba, s uvedeným vlastníkom, režimom a platnosťou. Pred úpravou jednotky sa rozhodnite, ktorý z tých dvoch prípadov máte. Väčšina týchto incidentov vzniká tým, že sa súkromný súbor považuje za zdieľaný.
[Service]
RuntimeDirectory=openvpn-hook-office
RuntimeDirectoryMode=0750Adresár času behu umiestni priečinok do systémovej oblasti času behu, vytvorí ho pre nakonfigurovaného používateľa a skupinu jednotky a odstráni ho, keď sa jednotka zastaví. Pridajte ho cez drop-in, aby jednotka z balíka zostala nedotknutá, potom znova načítajte správcu a reštartujte túto inštanciu, pričom prijmite, že jej klienti sa znova pripoja.
Zachovajte každý adresár času behu, ktorý nainštalovaná jednotka už vyžaduje. Nahradenie zoznamu namiesto pridania doň je bežný spôsob, ako pokaziť nesúvisiacu funkciu, ktorú nikto nespája so zmenou.
Dve vrstvy oprávnení sa môžu rozísť
Správca služieb vytvorí adresár pre nakonfigurovaného používateľa jednotky, zatiaľ čo démon VPN môže pred spustením pripojovacieho hooku samostatne zostúpiť na vlastný účet. To sú rôzne vrstvy a môžu pomenovať rôzne identity.
Adresár vlastnený rootom s reštriktívnym režimom je pre démona, ktorý už oprávnenia opustil, dokonale viditeľný, a napriek tomu preňho nezapisovateľný. Chyba sa potom číta ako problém oprávnení, hoci cesta existuje presne tam, kde ste ju očakávali. Porovnajte vlastníka adresára s identitou, ktorú hook hlási. Keď sa líšia, režim nikdy nebol otázkou.
Pred zmenou vlastníctva overte, pod akou identitou hook skutočne beží. Zmena používateľa, pod ktorým služba beží, kvôli oprave adresára môže zmeniť prístup k zariadeniam a sieťové oprávnenia inde, čo je vysoká cena za malý problém.
Overte celé odovzdanie
Potvrďte štyri veci naraz: hook zapisuje pod svojou skutočnou identitou, zamýšľaný čitateľ môže súbor spotrebovať, nesúvisiaci používatelia nemôžu, a zastavenie jednotky uprace tak, ako bolo navrhnuté. Súbor, ktorý sa objaví v zdieľanom dočasnom adresári hostiteľa, nie je požiadavka a zvyčajne je znakom, že výmena nikdy nedostala vlastnú cestu. Otestujte čitateľa po reštarte, nie len pri prvom spustení. Správanie pri upratovaní je súčasťou návrhu, preto ho pozorujte, namiesto aby ste ho predpokladali.
Trvalý stav patrí na miesto s primeranou životnosťou, pretože adresár času behu má zmiznúť. Vyberte miesto podľa životnosti, nie podľa pohodlia. Tento zvyk zabráni ďalšej verzii toho istého vyšetrovania.