PrivateTmp: den Hook huet d’Datei geschriwwen – wou ass se hikomm?
En private temporären Nummraum verstoppt d’Datei, amplaz se ze läschen. Kontrolléier d’Prozesswuerzel, ier s du d’Unit änderst, a gëff duerno de gedeelten Daten e richtegen Wee.
Hooks mellen Erfolleg, an dee selwechte Wee gesäit aus enger Shell nach ëmmer eidel aus. Béid Aussoe kënnen zur selwechter Zäit wouer sinn, well en systemd-Service a sengem eegenen Mount-Nummraum mat engem private temporären Verzeechnis liewe kann. Wann dat verstanen ass, gëtt déi interessant Fro, ob d’Schreiwen iwwerhaapt gelongen ass.
Zwee temporär Verzeechnisser, een Wee
D’Isolatiounsastellung gëtt der Unit eng privat Vue op déi temporär Verzeechnisser, amplaz se nëmme liesbar ze maachen. Prozesser ausserhalb vun der Unit kënnen net gesinn, wat se do schreift, an alles, wat se hannerléisst, gëtt verluert, wann d’Unit stoppt. En Wee, deen den Hook dréckt, an en Wee, deen aus enger Shell kontrolléiert gëtt, kënnen dofir op verschidden Objeten mam selwechten Numm verweisen.
Dat ass e Siichtbarkeetsproblem, an et gesäit aus wéi e Problem vum Datenverloscht. Näischt gouf geläscht, well d’Datei simply an engem Nummraum ass, vun deem d’Shell keen Deel ass. Dee selwechten Uerder verhält sech anescht, wann en bannen an der Unit ausgefouert gëtt, an dat ass d’Observatioun, déi den Disput normalerweis entscheet. Lies d’Astellunge vun der Unit, ier s du iwwer d’Schreiwen eppes schléis.
Trenn dat Onsiichtbart vum Onschreifbaren
En erfollegräicht Schreiwen an en onerfollegräicht Opmaachen liwweren ënnerschiddlech Beweiser, an dësen Ënnerscheed entscheet d’Reparatur. Wann den Hook seet, d’Datei wier ugeluecht, awer en externen Lieser fënnt se net, dann hues du eng Fro zum Nummraum. Wann den Hook e Berechtegungsfehler oder en onerfollegräicht Opmaachen mellt, gouf d’Datei ni geschriwwen, an eng Ännerung vum Nummraum hëlleft net.
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-stateDe Wee iwwer d’Prozesswuerzel weist dem Service seng eegen Dateisystem-Vue, ënnerworf de Berechtegungspréiwer op dee Prozess, soulaang en nach leeft. Lies de Journal vun der Unit an der selwechter Sëtzung, well e Schreibfeeler an eng fehlend Datei liicht verwiesselt ginn, wann een d’Ursaach schonn entscheet huet.
Gëff de gedeelten Daten eng explizit Plaz
Daten, déi nëmmen de Service brauch, gehéieren a seng privatt temporär Verzeechnis. Daten, déi en anere Prozess liese muss, brauchen en Wee, deen fir béid definéiert ass, mat uginnem Besëtzer, Modus an Ofleefdatum. Entscheet, wéi en vun deenen zwee du hues, ier s du d’Unit änderst. Déi meescht vun dësen Zwëschefäll kommen dohier, datt eng privat Datei als eng gedeelt behandelt gëtt.
[Service]
RuntimeDirectory=openvpn-hook-office
RuntimeDirectoryMode=0750En Runtime-Verzeechnis setzt de Fichier ënner de Runtime-Beräich vum System, mécht en fir de konfiguréierte Benotzer an d’Grupp vun der Unit, an hëlt en ewech, wann d’Unit stoppt. Setz en iwwer en Drop-in derbäi, sou datt d’Unit vum Pak intakt bleift, lued dann de Manager nei a start déi Instanz nei, an akzeptéier, datt seng Cliente sech erëm verbannen.
Behält all Runtime-Verzeechnis, dat déi installéiert Unit schonn erfuerdert. D’Lëscht ersetzen amplaz se z’ergänzen ass en heefege Wee, eng onrelatéiert Funktioun ze brochen, déi keen mat der Ännerung verbënnt.
Zwee Privilegie-Schichten kënnen net iwwerenee stëmmen
De Servicemanager mécht d’Verzeechnis fir de konfiguréierte Benotzer vun der Unit, wärend den VPN-Daemon separat op säin eegene Kont erofgoe kann, ier en e Verbindungshook ausféiert. Dat sinn ënnerschiddlech Schichten, an se kënnen ënnerschiddlech Identitéiten nennen.
En Verzeechnis am Besëtz vum root mat engem restriktive Modus ass fir en Daemon, deen d’Privilegien schonn opginn huet, komplett siichtbar, an awer onschreifbar fir hien. Den Feeler gëtt dann als Berechtegungsproblem gelies, obwuel de Wee genee do existéiert, wou s du en erwaart hues. Vergläich de Besëtzer vum Verzeechnis mat der Identitéit, déi den Hook mellt. Wann se sech ënnerscheeden, war de Modus ni d’Fro.
Kontrolléier d’Identitéit, ënner där den Hook wierklech leeft, ier s du d’Eegentum änderst. D’Ännere vum Ausféierungsbenotzer vum Service, fir en Verzeechnis ze reparéieren, kann den Zougang zu Geräter an d’Netzwierk-Privilegien aneschtwous änneren, wat en héije Präis fir e klengt Problem ass.
Verifizéier déi ganz Iwwergab
Bestäteg véier Saachen op eemol: den Hook schreift ënner senger richteger Identitéit, den ugedaachte Lieser kann d’Datei konsuméieren, onrelatéiert Benotzer kënnen et net, a Stoppe vun der Unit raumt op wéi et designéiert ass. Datt eng Datei am gedeelten temporären Verzeechnis vum Host erschéngt, ass keng Fuerderung, an et ass meeschtens en Zeeche, datt den Austausch ni säin eege Wee kritt huet. Test de Lieser no engem Neistart, net nëmmen beim éischte Laf. D’Opraimverhalen ass en Deel vum Design, also observéier et amplaz et unzehuelen.
De permanenten Zoustand gehéiert dohinner, wou d’Liewensdauer entsprécht, well en Runtime-Verzeechnis geduecht ass ze verschwannen. Wiel d’Plaz no der Liewensdauer an net no der Bequemlechkeet. Dës Gewunnecht verhënnert déi nächst Versioun vun der selwechter Enquête.