Krókar sem keyra án villu og tilkynna samt vanta skrá eru yfirleitt að horfa á rangan stað, ekki að bregðast í sínu verki. Tiltækar slóðir í skriftu eru leystar út frá vinnumöppu ferlisins, og þjónusta byrjar með vinnumöppu sem þú valdir ekki. Skráin við hlið skriftunnar og skráin sem ferlið opnar eru sama hluturinn aðeins þegar eitthvað festir þær. Það bil skýrir stóran hluta krókabresta sem eru mislesnir sem heimildavandamál.

Athugaðu slóðina áður en heimildirnar, því heimildavilla á rangri skrá er samt ranga skráin.

Tiltæk slóð er leyst út frá ferlinu, ekki skránni

Þegar skrifta kallar á open("policy.json"), leysir kjarninn nafnið út frá núverandi vinnumöppu ferlisins. Ekkert af staðsetningu skriftunnar sjálfrar tekur þátt í þeirri leit. OpenVPN ræsir króka úr möppu sem það velur sjálft, og valkosturinn cd getur breytt henni, svo skrifta sem prófuð er handvirkt úr eigin möppu hagar sér öðruvísi þegar djöfullinn keyrir hana. Handprófið gengur, keyrsla þjónustunnar mistekst, og logglínan nefnir aðeins nafnið sem vantar.

Python sýnir staðsetningu skriftunnar sem __file__, og það er það sem gerir festingu mögulega. Path(__file__).resolve().parent / "policy.json" byggir slóð úr skránni frekar en ferlinu. Þessi eina lína fjarlægir háð vinnumöppunnar án þess að breyta nokkru um heimildir.

Festu slóðina viljandi og athugaðu svo hvað resolve gerir

resolve() fylgir táknrænum hlekkjum, svo uppsetning sem hlekkjar krókinn á sinn stað festist við mark hlekksins, ekki möppuna sem heldur hlekknum. Það er yfirleitt það sem þú vilt fyrir útgáfustýrða uppsetningu, og það er rangt fyrir skipulag sem býst við gögnum við hlið táknræna hlekksins. Ákveddu hvort uppsetningin á við, og skrifaðu kóðann í samræmi við það í stað þess að uppgötva muninn í framleiðslu. Path(__file__).parent án resolve() heldur eigin möppu hlekksins.

Ef gögnin tilheyra tilvikinu en ekki forritinu, taktu algilda slóð úr stillingunni. Harðkóðun staðsetningar bindur krókinn við eitt hýsingarskipulag.

Farðu yfir fjögur mörk í röð

Byrjaðu á vinnumöppunni: berðu saman WorkingDirectory, valkost cd OpenVPN og hvaða umbúðir sem skipta um möppu fyrir exec. Staðfestu svo leystu staðsetninguna, því skrá með svipuðu nafni í annarri uppsetningu getur svarað leitinni og falið mistökin. Næst kemur sýn skráarkerfisins: chroot eða mount-nafnrými þjónustunnar geta einfaldlega gert algilda hýsingarslóð fjarverandi. Síðast er aðgangsauðkennið, sem er spurning aðskilin frá sýnileika.

ProtectHome og PrivateTmp fela mismunandi staðsetningar, og hvorugt birtist í möppulista sem tekinn er af hýsingunni. Slóð sem er til fyrir root í skel getur verið ósýnileg inni í nafnrými einingarinnar, og þess vegna sannar prófun sama skipunar utan þjónustunnar svo litlu.

Lagaðu leitina án þess að víkka þjónustuna

Festing slóðarinnar leysir aðeins fyrsta markið. Hún afhjúpar ekki möppu sem þjónustan felur, og hún veitir ekki ódíflaðri notandaslóð aðgang að skrá sem er aðeins fyrir root. Að hækka script-security breytir því hvaða skriftur OpenVPN keyrir; það hefur engin áhrif á hvar tiltækt nafn er leyst. Að breyta vinnumöppunni fyrir alla þjónustuna er víðtækara en vandamálið, því önnur tiltæk slóð vottorðs, logs eða hjálpar fylgir með.

Veldu þröngu lagfæringuna: ákveðna slóð í skriftunni, skýrt stillingargildi fyrir gögn tilviksins, og skráareign sem passar við notandaslóðina sem krókurinn keyrir í raun undir.

Skráðu sönnun sem nefnir markið

Notadrýg skýrsla um mistök inniheldur þrjá hluti: nákvæma slóðina sem krókurinn reyndi, umhverfið sem bjó hana til, og hvaða mark neitaði. Prentaðu leystu slóðina og undantekninguna án þess að hella út innihaldi skrárinnar. Þessi þrenning aðgreinir ranga festingu frá falinni mount og frá heimildarneitun, sem eru þrjár mismunandi lagfæringar.

Fullyrðingin um að root geti lesið skrána úr skjáhermi svarar einni af þessum spurningum og engri annarri. Prófaðu í staðinn úr eigin samhengi þjónustunnar.

Tengdir greinar