OpenVPN finnur ekki ca.crt þótt prófíllinn hlaðist
Slóð prófílsins er ekki grunnurinn að skránum í honum. Sjáðu hvers vegna alger --config mistekst samt á ca.crt og hvernig ræsingin ákveður svarið.
Þjónustan ræsist, les prófílinn án kvartana og deyr svo á línu sem virðist ótengd: hún getur ekki opnað ca.crt. Ekkert hefur breyst á skírteininu, og slóð prófílsins í unit-skránni er alger. Einmitt þessi samsetning er vísbendingin. Slóðin sem þú gafst staðsetur eina skrá, og nöfnin inni í þeirri skrá eru leyst allt annars staðar, svo ræsing sem virðist fullgild getur samt verið að lesa lyklana sína úr möppu sem enginn ætlaði.
Bilunin hefur fáar orsakir, og það er þess virði að greina þær í röð: grunnmappan sem ferlið hafði í raun, ræsingarsamhengi þjónustunnar og heimildirnar eða sandkassinn í kringum skrána þegar slóðin er orðin rétt. Hver þeirra skilur eftir sig annað spor — í unit-skránni, í ferlinu og á skráarkerfinu.
Slóð prófílsins er ekki grunnmappa
Ímyndaðu þér ferli sem byrjar í /tmp og fær /etc/vpn/prod/tenant-a.ovpn. Inni í þeim prófíl nefnir línan ca ca.crt afstæða slóð. Ekkert í röksemdinni sem fann prófílinn endurskrifar það nafn, svo ferlið leitar að /tmp/ca.crt og tilkynnir skrá sem vantar.
Það ruglingslega er röð villnanna. OpenVPN þáttar fyrst stillinguna og opnar skrár sem vísað er til eftir því sem það nær þeim, svo innsláttarvilla í prófílnum er tilkynnt áður en nokkur lykill er snertur, á meðan skírteini sem vantar birtist aðeins þegar þáttunin nær þangað. Prófíll sem hleðst er því sönnun þess að setningafræðin sé í lagi, ekki þess að skrárnar sem hann nefnir hafi fundist.
Hvað handbókin greinir: --config og --cd
Handbók OpenVPN 2.6 lýsir tveimur ólíkum valkostum. Einn hleður stillingarskrá. Hinn breytir möppu ferlisins áður en staða, lykill, skrift og aðrar skrár eru lesnar, og krefst algerrar möppu án tilvísunar í þá núverandi.
openvpn --cd /etc/vpn/prod --config tenant-a.ovpn
Þetta kall er form, ekki fyrirmæli um að ræsa prófíl einhvers annars. Það sem það gefur er ákveðni: grunnur hvers afstæðs nafns í keðjunni er sagður í skipuninni í stað þess að erfast frá hvaða skel eða stjórnanda sem ræsti ferlið. Valkosturinn er jafn gildur og oft betri fyrir þjónustu: láttu vinnumöppuna í friði og gerðu hverja skrá sem vísað er til algera inni í prófílnum.
Hvað sem þú velur, endurskoðaðu alla keðjuna en ekki fyrstu bilunina. Prófíll getur dregið inn aðra stillingarskrá, og afstæð nöfn innifaldrar skrár eru leyst gegn sömu ferlismöppunni, ekki gegn möppu skrárinnar sem innifelldi þau. Slóðir skráa í annála, auðkenningarskrár og hjálparskriftur fylgja sömu reglu.
Þjónustan ræsist annars staðar
Gagnvirk skel í prófílmöppunni sannar ekkert um pakkaða unit-skrá. Stjórnendur setja sína eigin vinnumöppu, og umbúðaskrift getur breytt henni aftur áður en tvíundaskráin keyrir. Unit-skráin sem bregst er eina ræsingin sem er þess virði að hugsa um.
systemctl show -p WorkingDirectory -p ExecStart --value openvpn@tenant-a
ls -l /proc/$(pgrep -n openvpn)/cwd
Seinni skipunin sýnir möppuna sem lifandi ferlið heldur í raun, og það er áreiðanlegra en unit-skráin þegar umbúðir koma við sögu. Ef þær tvær eru ósammála er umbúðin svarið og unit-skráin villandi spor.
Eftir leitina: heimildir, chroot og sandkassi
Rétt grunnmappa getur samt gefið sömu skilaboðin, því upplausn og aðgangur eru aðskilin skref. Ferlið þarf keyrsluheimild á hverri yfirmöppu og lesheimild á skránni, og þjónustu-unit sem felur hluta skráarkerfisins breytir því hvað ferlið getur yfirhöfuð séð.
Þrjár algengar afbrigði gefa sömu villuna. Skráin er aðeins lesanleg fyrir root á meðan þjónustan afsalar sér forréttindum áður en hún opnar hana. Unit-skráin setur verndandi sýn á skráarkerfið sem nær ekki yfir prófílmöppuna. Púkinn keyrir með chroot, svo slóðin sem er til á hýsilnum er ekki til inni í þeirri sýn.
Greindu með eignarhaldi skrárinnar og auðkenni ferlisins, ekki með því að slaka á heimildum. Að gera einkalykil lesanlegan öllum til að þagga niður þessa villu skiptir háværri bilun út fyrir hljóða, og lykillinn er einmitt sá hluti möppunnar sem þú vilt síst afhjúpa.
Sannaðu lagfæringuna með eigin ræsingu
Endurræstu raunverulegu unit-skránni úr möppu sem tengist prófílnum ekki og fylgstu með sömu ræsilínunni. Staðfestu svo að ferlið haldi ætlaðri möppu meðan það keyrir, og að skírteinið sem það hlóð sé það sem þú áttir von á.
systemctl restart openvpn@tenant-a
systemctl status openvpn@tenant-a --no-pager
journalctl -u openvpn@tenant-a -n 20 --no-pager
Þegar hleðsla slóða tekst eru auðkenning og leiðsögn enn aðskilin stig með sínum eigin bilunum, og tenging sem rís en flytur enga umferð er önnur rannsókn. Lagfæringin hér snýst aðeins um úr hvaða möppu skrárnar komu, og hún ætti að sjást í kallinu í stað þess að vera munað af þeim sem keyrði hana síðast fyrir höndina.
Ef prófílnum er dreift af stillingarstjóra, settu grunnmöppuna eða algeru skráarheiti þar líka. Handvirk lagfæring á einum hýsli er útgáfan af þessu vandamáli sem kemur aftur eftir næstu endurbyggingu.