Hooks li jaħdmu mingħajr żball u xorta jirrappurtaw fajl nieqes ġeneralment iħarsu lejn il-post ħażin, mhux li jonqsu f’xogħolhom. Mogħdijiet relattivi fi skript jiġu riżolti skont id-direttorju tax-xogħol tal-proċess, u servizz jibda b’direttorju tax-xogħol li int ma għażiltx. Il-fajl ħdejn l-iskript u l-fajl li jiftaħ il-proċess huma l-istess ħaġa biss meta xi ħaġa torbothom. Dan id-distakk jispjega parti kbira mill-fallimenti tal-hooks li jiġu moqrija ħażin bħala problemi ta’ permessi.

Iċċekkja l-mogħdija qabel il-permessi, għax żball ta’ permess fuq il-fajl ħażin xorta jibqa’ l-fajl ħażin.

Mogħdija relattiva tiġi riżolta skont il-proċess, mhux skont il-fajl

Meta skript isejjaħ open("policy.json"), il-kernel jirriżolvi l-isem skont id-direttorju tax-xogħol attwali tal-proċess. Xejn mill-post tal-iskript innifsu ma jipparteċipa f’dik it-tfittxija. OpenVPN jibda hooks minn direttorju li jagħżel hu stess, u l-għażla cd tista’ tibdlu, għalhekk skript ittestjat bl-idejn mill-folder tiegħu jġib ruħu b’mod differenti meta d-daemon imexxih. It-test bl-idejn jgħaddi, it-tħaddim tas-servizz ifalli, u l-linja tal-log issemmi biss l-isem nieqes.

Python jesponi l-post tal-iskript bħala __file__, u dan hu li jagħmel l-ankraġġ possibbli. Path(__file__).resolve().parent / "policy.json" jibni mogħdija mill-fajl minflok mill-proċess. Dik il-linja waħda tneħħi d-dipendenza fuq id-direttorju tax-xogħol mingħajr ma tibdel xejn fil-privileġġi.

Ankra l-mogħdija apposta, imbagħad iċċekkja x’jagħmel resolve

resolve() isegwi links simboliċi, għalhekk installazzjoni li tlinkja l-hook fil-post tiegħu tinkrah fuq il-mira tal-link, mhux fuq id-direttorju li jżomm il-link. Dan ġeneralment hu dak li trid għal skjerament b’verżjonijiet, u hu ħażin għal tqassim li jistenna data ħdejn il-link simboliku. Iddeċiedi liema tfisser l-iskjerament, u ikteb il-kodiċi skond dan minflok ma tiskopri d-differenza fil-produzzjoni. Path(__file__).parent mingħajr resolve() iżomm id-direttorju tal-link innifsu.

Jekk id-data tappartjeni għall-istanza u mhux għall-programm, ħu mogħdija assoluta mill-konfigurazzjoni. L-ikkodifikar iebes ta’ post jorbot il-hook ma’ tqassim wieħed tal-host.

Għaddi minn erba’ fruntieri fl-ordni

Ibda mid-direttorju tax-xogħol: qabbel WorkingDirectory, l-għażla cd ta’ OpenVPN u kwalunkwe tgeżwir li jbiddel id-direttorju qabel exec. Imbagħad ikkonferma l-post riżolt, għax fajl b’isem simili fi skjerament ieħor jista’ jwieġeb għat-tfittxija u jaħbi l-iżball. Wara tiġi l-veduta tas-sistema tal-fajls: chroot jew spazju tal-ismijiet tal-mount tas-servizz jistgħu jagħmlu mogħdija assoluta tal-host sempliċement nieqsa. Fl-aħħar l-identità tal-aċċess, li hija kwistjoni separata mill-viżibilità.

ProtectHome u PrivateTmp jaħbu postijiet differenti, u l-ebda wieħed ma jidher f’lista ta’ direttorju meħuda mill-host. Mogħdija li teżisti għal root f’qoxra tista’ tkun inviżibbli ġewwa l-ispazju tal-ismijiet tal-unità, u għalhekk l-ittestjar tal-istess kmand barra s-servizz jipprova daqshekk ftit.

Sewwi t-tfittxija mingħajr ma twessa’ s-servizz

L-ankraġġ tal-mogħdija jsolvi biss l-ewwel fruntiera. Ma jesponix direttorju li s-servizz jaħbi, u ma jagħtix aċċess lil kont mingħajr privileġġ għal fajl ta’ root biss. Iż-żieda ta’ script-security tbiddel liema skripts se jmexxi OpenVPN; m’għandhiex effett fuq fejn tiġi riżolta isem relattiv. Li tbiddel id-direttorju tax-xogħol għas-servizz kollu hu usa’ mill-problema, għax kull mogħdija relattiva oħra ta’ ċertifikat, log jew għajnuna tiċċaqlaq miegħu.

Ippreferi l-korrezzjoni dejqa: mogħdija deterministika fl-iskript, valur ta’ konfigurazzjoni espliċitu għad-data tal-istanza, u sjieda tal-fajls li taqbel mal-kont li l-hook tassew jaħdem taħtu.

Irrekordja provi li jsemmu l-fruntiera

Rapport utli ta’ falliment fih tliet affarijiet: il-mogħdija eżatta li pprova l-hook, l-ambjent li pproduċa, u liema fruntiera rrifjutat. Ipprintja l-mogħdija riżolta u l-eċċezzjoni mingħajr ma tferra’ l-kontenut tal-fajl. Dan it-tlieta jifred ankraġġ ħażin minn mount moħbi u minn rifjut ta’ permess, li huma tliet korrezzjonijiet differenti.

L-istqarrija li root jista’ jaqra l-fajl minn terminal twieġeb waħda minn dawk il-mistoqsijiet u l-ebda oħra. Ipprova minflok mill-kuntest tas-servizz innifsu.

Artikli relatati