OpenVPN yn methu dod o hyd i ca.crt er bod y proffil yn llwytho
Nid yw llwybr y proffil yn sylfaen i’r ffeiliau ynddo. Gwelwch pam mae --config absoliwt yn dal i fethu ar ca.crt a sut mae’r lansiad yn penderfynu’r ateb.
Mae’r gwasanaeth yn cychwyn, yn darllen y proffil heb gwyn, ac yna’n marw ar linell sy’n edrych yn ddi-gysylltiad: ni all agor ca.crt. Nid oes dim wedi newid yn y dystysgrif, ac mae llwybr y proffil yn y ffeil uned yn absoliwt. Y cyfuniad hwnnw yw’r arwydd. Mae’r llwybr a basiwyd gennych yn lleoli un ffeil, ac mae’r enwau y tu mewn i’r ffeil honno’n cael eu datrys yn hollol arall, felly gall lansiad sy’n edrych yn gwbl gymwys fod yn darllen ei allweddi o gyfeiriadur na fwriadodd neb.
Ychydig o achosion sydd i’r methiant, ac mae’n werth eu gwahanu yn y drefn: y cyfeiriadur sylfaen a oedd gan y broses mewn gwirionedd, cyd-destun lansio’r gwasanaeth, a’r caniatâd neu’r sandbox o amgylch y ffeil unwaith y bydd y llwybr yn gywir. Mae pob un yn gadael ôl gwahanol — yn yr uned, yn y broses ac ar y system ffeiliau.
Nid yw llwybr y proffil yn gyfeiriadur sylfaen
Dychmygwch broses sy’n cychwyn yn /tmp ac yn cael /etc/vpn/prod/tenant-a.ovpn. Y tu mewn i’r proffil hwnnw, mae’r linell ca ca.crt yn enwi llwybr cymharol. Nid oes dim yn y ddadl a leolodd y proffil yn ailysgrifennu’r enw hwnnw, felly mae’r broses yn chwilio am /tmp/ca.crt ac yn adrodd bod ffeil ar goll.
Y rhan ddryslyd yw trefn y gwallau. Mae OpenVPN yn dadansoddi’r ffurfweddiad yn gyntaf ac yn agor y ffeiliau a gyfeiriwyd atynt wrth fynd atynt, felly adroddir teip gamsyniad yn y proffil cyn i unrhyw allwedd gael ei chyffwrdd, tra bod tystysgrif ar goll yn ymddangos dim ond pan fydd y dadansoddiad yn cyrraedd y fan honno. Felly mae proffil sy’n llwytho yn dystiolaeth bod y gystrawen yn iawn, nid bod y ffeiliau a enwir ganddo wedi eu canfod.
Beth mae’r llawlyfr yn ei wahanu: --config a --cd
Mae llawlyfr OpenVPN 2.6 yn disgrifio dau opsiwn gwahanol. Mae un yn llwytho ffeil ffurfweddu. Mae’r llall yn newid cyfeiriadur y broses cyn i’r ffurfweddiad, yr allwedd, y script a ffeiliau eraill gael eu darllen, ac mae’n gofyn am gyfeiriadur absoliwt heb unrhyw gyfeiriad at yr un cyfredol.
openvpn --cd /etc/vpn/prod --config tenant-a.ovpn
Mae’r alwad honno’n ffurf, nid yn gyfarwyddyd i lansio proffil rhywun arall. Yr hyn a gewch yw penderfyniadoldeb: nodir sylfaen pob enw cymharol yn y gadwyn yn y gorchymyn yn hytrach na’i hetifeddu o ba bynnag gragen neu reolwr a gychwynnodd y broses. Mae’r dewis arall yr un mor ddilys ac yn aml yn well i wasanaeth: gadewch y cyfeiriadur gwaith yn llonydd a gwnewch bob ffeil a gyfeiriwyd ati yn absoliwt y tu mewn i’r proffil.
Beth bynnag a ddewiswch, archwiliwch y gadwyn gyfan yn hytrach na’r methiant cyntaf. Gall proffil dynnu i mewn ffeil ffurfweddu arall, ac mae enwau cymharol y ffeil a gynhwyswyd yn cael eu datrys yn erbyn yr un cyfeiriadur proses, nid yn erbyn cyfeiriadur y ffeil a’u cynhwysodd. Mae llwybrau logiau, ffeiliau dilysu a scriptiau cynorthwyol yn dilyn yr un rheol.
Mae’r gwasanaeth yn cychwyn yn rhywle arall
Nid yw cragen ryngweithiol yng nghyfeiriadur y proffil yn profi dim am uned a becynnwyd. Mae rheolwyr yn gosod eu cyfeiriadur gwaith eu hunain, a gall script lapio ei newid eto cyn i’r deuaidd redeg. Yr uned sy’n methu yw’r unig lansiad y mae’n werth rhesymu amdano.
systemctl show -p WorkingDirectory -p ExecStart --value openvpn@tenant-a
ls -l /proc/$(pgrep -n openvpn)/cwd
Mae’r ail orchymyn yn dangos y cyfeiriadur y mae’r broses fyw yn ei ddal mewn gwirionedd, sy’n fwy dibynadwy na’r ffeil uned pan fo lapio yn rhan o’r darlun. Os ydynt yn anghytuno, y lapio yw eich ateb a’r uned yn awgrym twyllodrus.
Ar ôl y chwilio: caniatâd, chroot a sandbox
Gall cyfeiriadur sylfaen cywir roi’r un neges o hyd, oherwydd mae datrys a mynediad yn gamau ar wahân. Mae ar y broses angen caniatâd gweithredu ar bob cyfeiriadur rhiant a chaniatâd darllen ar y ffeil, ac mae uned gwasanaeth sy’n cuddio rhan o’r system ffeiliau yn newid yr hyn y gall y broses ei weld o gwbl.
Mae tair amrywiol gyffredin yn cynhyrchu’r un gwall. Dim ond root all ddarllen y ffeil tra bod y gwasanaeth yn gollwng braint cyn ei hagor. Mae’r uned yn gosod golwg amddiffynnol ar y system ffeiliau nad yw’n cynnwys cyfeiriadur y proffil. Mae’r daemon yn rhedeg gyda chroot, felly nid yw’r llwybr sy’n bodoli ar y gwesteiwr yn bodoli y tu mewn i’r olwg honno.
Dadansoddwch drwy berchnogaeth y ffeil a hunaniaeth y broses, nid drwy lacio caniatâd. Mae gwneud allwedd breifat yn ddarllenadwy i bawb er mwyn tawelu’r gwall hwn yn cyfnewid methiant uchel am un distaw, a’r allwedd yw’r rhan o’r cyfeiriadur yr ydych leiaf am ei datgelu.
Profwch y cywiriad gyda’r lansiad eich hun
Ailgychwynnwch yr uned go iawn o gyfeiriadur nad yw’n gysylltiedig â’r proffil a gwyliwch yr un llinell gychwyn. Yna cadarnhewch fod y broses yn dal y cyfeiriadur a fwriadwyd tra’i bod yn rhedeg, a bod y dystysgrif a lwythodd yr un rydych yn ei disgwyl.
systemctl restart openvpn@tenant-a
systemctl status openvpn@tenant-a --no-pager
journalctl -u openvpn@tenant-a -n 20 --no-pager
Pan fydd llwytho llwybrau’n llwyddo, mae dilysu a llwybro yn parhau’n gamau ar wahân gyda’u methiannau eu hunain, ac mae cysylltiad sy’n codi ond nad yw’n pasio unrhyw draffig yn ymchwiliad gwahanol. Mae’r cywiriad yma yn ymwneud yn unig â pha gyfeiriadur y daeth y ffeiliau ohono, ac fe ddylai fod yn weladwy yn yr alwad yn hytrach na chael ei gofio gan y sawl a’i rhedodd â llaw ddiwethaf.
Os yw’r proffil yn cael ei ddefnyddio gan reolwr ffurfweddu, rhowch y cyfeiriadur sylfaen neu’r enwau ffeil absoliwt yno hefyd. Cywiriad â llaw ar un gwesteiwr yw’r fersiwn o’r broblem hon sy’n dychwelyd ar ôl yr ailadeiladu nesaf.