PrivateTmp: hook-u e shkroi skedarin, por ku shkoi ai?
Një hapësirë e përkohshme private e fsheh skedarin në vend që ta fshijë. Kontrollo rrënjën e procesit përpara se të ndryshosh njësinë, pastaj jepu të dhënave të përbashkëta një shteg të vërtetë.
Hook-et raportojnë sukses, dhe i njëjti shteg vazhdon të duket bosh nga një shell. Të dy pohimet mund të jenë të vërteta njëkohësisht, sepse një shërbim systemd mund të jetojë në hapësirën e vet të emrave të montimit me një drejtori të përkohshme private. Pasi kjo kuptohet, pyetja interesante bëhet nëse shkrimi ia doli fare.
Dy drejtori të përkohshme, një shteg
Cilësimi i izolimit i jep njësisë një pamje private të drejtorive të përkohshme, në vend që t'i bëjë ato vetëm për lexim. Proceset jashtë njësisë nuk mund të shohin çfarë shkruan atje, dhe çdo gjë që lë pas hidhet kur njësia ndalon. Prandaj një shteg i shtypur nga hook-u dhe një shteg i verifikuar nga një shell mund të tregojnë objekte të ndryshme me të njëjtin emër.
Ky është një problem dukshmërie, dhe duket si një problem humbjeje të dhënash. Asgjë nuk u fshi, sepse skedari thjesht ndodhet në një hapësirë emrash të së cilës shell-i nuk është anëtar. I njëjti komandë sillet ndryshe kur ekzekutohet brenda njësisë, dhe pikërisht ky vëzhgim zakonisht zgjidh debatin. Lexo cilësimet e njësisë përpara se të nxjerësh ndonjë përfundim për shkrimin.
Ndaj të padukshmen nga e pashkrueshmja
Një shkrim i suksesshëm dhe një hapje e dështuar japin prova të ndryshme, dhe ky dallim vendos riparimin. Nëse hook-u thotë se skedari u krijua, por një lexues i jashtëm nuk e gjen, ke një pyetje për hapësirën e emrave. Nëse hook-u raporton një gabim leje ose një hapje të dështuar, skedari nuk u shkrua kurrë dhe asnjë ndryshim i hapësirës së emrave nuk do të ndihmojë.
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-stateShtegu përmes rrënjës së procesit zbulon pamjen e vetë shërbimit mbi sistemin e skedarëve, subjekt i kontrolleve të lejeve mbi atë proces sa kohë ai po ekzekutohet. Lexo ditarin e njësisë në të njëjtën sesion, sepse një gabim shkrimi dhe një skedar që mungon ngatërrohen lehtë pasi dikush e ka vendosur tashmë shkakun.
Jepu të dhënave të përbashkëta një vend të qartë
Të dhënat që i duhen vetëm shërbimit i përkasin drejtorisë së tij të përkohshme private. Të dhënat që duhet t'i lexojë një proces tjetër kërkojnë një shteg të përcaktuar për të dy, me pronar, mënyrë dhe skadim të deklaruar. Vendos cilin nga të dy rastet ke përpara se të modifikosh njësinë. Shumica e këtyre incidenteve vijnë nga trajtimi i një skedari privat si i përbashkët.
[Service]
RuntimeDirectory=openvpn-hook-office
RuntimeDirectoryMode=0750Një drejtori ekzekutimi e vendos dosjen nën zonën e ekzekutimit të sistemit, e krijon për përdoruesin dhe grupin e konfiguruar të njësisë dhe e heq kur njësia ndalon. Shtoje përmes një drop-in që njësia e paketës të mbetet e paprekur, pastaj ringarko menaxherin dhe rinis atë instancë, duke pranuar që klientët e saj do të rilidhen.
Mbaj çdo drejtori ekzekutimi që njësia e instaluar kërkon tashmë. Zëvendësimi i listës në vend të shtimit në të është një mënyrë e zakonshme për të prishur një funksion të palidhur që askush nuk e lidh me ndryshimin.
Dy shtresa privilegjesh mund të mos bien dakord
Menaxheri i shërbimeve krijon drejtorinë për përdoruesin e konfiguruar të njësisë, ndërsa daemon-i VPN mund të zbresë veçmas në llogarinë e vet përpara se të ekzekutojë një hook lidhjeje. Këto janë shtresa të ndryshme, dhe mund të emërtojnë identitete të ndryshme.
Një drejtori në pronësi të root me një mënyrë kufizuese është plotësisht e dukshme për një daemon që tashmë ka hequr dorë nga privilegjet, dhe prapëseprapë e pashkrueshme prej tij. Gabimi atëherë lexohet si problem leje, ndonëse shtegu ekziston pikërisht aty ku e prisje. Krahaso pronarin e drejtorisë me identitetin që raporton hook-u. Kur ndryshojnë, mënyra nuk ishte kurrë pyetja.
Kontrollo identitetin nën të cilin hook-u ekzekutohet vërtet përpara se të ndryshosh pronësinë. Ndryshimi i përdoruesit të ekzekutimit të shërbimit për të rregulluar një drejtori mund të ndryshojë aksesin ndaj pajisjeve dhe privilegjet e rrjetit diku tjetër, që është një çmim i lartë për një problem të vogël.
Verifiko gjithë dorëzimin
Konfirmo katër gjëra njëherësh: hook-u shkruan nën identitetin e vet të vërtetë, lexuesi i synuar mund ta konsumojë skedarin, përdoruesit e palidhur nuk mund ta bëjnë, dhe ndalimi i njësisë pastron siç është projektuar. Shfaqja e një skedari në drejtorinë e përkohshme të përbashkët të hostit nuk është kërkesë, dhe zakonisht është shenjë se shkëmbimi nuk mori kurrë shtegun e vet. Testo lexuesin pas një rindezjeje, jo vetëm gjatë ekzekutimit të parë. Sjellja e pastrimit është pjesë e projektimit, prandaj vëzhgoje në vend që ta supozosh.
Gjendja e përhershme i përket një vendi me jetëgjatësi përputhëse, pasi një drejtori ekzekutimi është menduar të zhduket. Zgjidh vendndodhjen sipas jetëgjatësisë dhe jo sipas lehtësisë. Ajo zakon parandalon versionin tjetër të të njëjtit hetim.