Mae tri pheth yn penderfynu pa ffynhonnell credoau y dylech ei defnyddio: a oes person yn eistedd wrth y consol, a gaiff y gyfrinach fyw ar ddisg, ac a oes rhaid i broses arall ateb yr anogiad. Dewiswch yn anghywir a bydd y cleient yn adrodd problem stdin tra bod y cyfrinair yn hollol ddilys, sy’n anfon y rhan fwyaf o bobl at y gweinydd heb reswm. Dewiswch y llwybr yn gyntaf; dim ond ar ôl i chi wybod pa lwybr a gynhyrchodd y negeseuon gwall y maent yn gwneud synnwyr.

Y tri amod sy’n penderfynu

Anogiad y consol yw’r unig lwybr sy’n gofyn am berson, felly dyma’r unig un sy’n methu’n dawel mewn uned systemd neu gynhwysydd. Os bydd person yn cychwyn y cleient ac yn teipio’r cyfrinair, nid oes ffeil yn rhan o’r broses ac nid oes dim sensitif yn glanio ar y ddisg. Os bydd y cleient yn cychwyn wrth gychwyn y system, mae’r un anogiad yn troi’n hongian, ac mae’r terfyn amser fel arfer yn ymddangos fel methiant cysylltiad cyffredinol yn hytrach na gwall credoau.

Ffeil credoau yw’r ateb cywir pan fydd y broses yn cychwyn heb oruchwyliaeth a bod modd i’r gyfrinach oroesi ar y ddisg o dan set caniatâd a reolir. Pan na chaniateir ysgrifennu’r gyfrinach o gwbl - polisi claddgell yn unig, tocyn byrhoedlog - mae arnoch angen ffrwd y gall y cleient ei hagor, sydd yn ymarferol yn golygu amnewid proses neu gymorthydd yn ysgrifennu i ddisgrifydd ffeil. Mae’r rhyngwyneb rheoli yn ymdrin â’r pedwerydd achos: rheolwr sydd eisoes yn rheoli cylch bywyd y tiwnel ac yn gallu ateb cwestiynau dros soced.

  • Person wrth y consol, dim awtomeiddio: anogiad rhyngweithiol.
  • Cychwyn heb oruchwyliaeth, gellir storio’r gyfrinach: ffeil credoau â modd 0600.
  • Cychwyn heb oruchwyliaeth, ni ellir storio’r gyfrinach: amnewid proses neu fd a ysgrifennir gan asiant cyfrinachau.
  • Mae proses arall yn berchen ar y cleient: rhyngwyneb rheoli.

Pan fydd dau ateb yn ffitio, dewiswch yr un sy’n cadw’r gyfrinach allan o argv ac allan o hanes shell. Mae cyfrinair a basiwyd fel dadl rhaglen yn ddarllenadwy gan bob defnyddiwr lleol drwy’r rhestr prosesau, ac mae’n anodd dad-wneud y datguddiad hwnnw.

Beth mae pob llwybr mewnbwn yn ei wneud mewn gwirionedd

--auth-user-pass ar ei ben ei hun yn gofyn am enw defnyddiwr a chyfrinair ar y consol. O’i roi enw ffeil, mae’r cleient yn cymryd llinell un fel yr enw defnyddiwr a llinell dau fel y cyfrinair; nid oes dim yn cefnogi dyfynbris, sylwadau na chystrawen allwedd-gwerth. Dyna’r holl fformat, felly mae unrhyw un sy’n ei olygu gan ddisgwyl ffeil INI yn ei dorri. Mae bloc <auth-user-pass> mewnlin yn dal yr un ddwy linell y tu mewn i’r proffil, sy’n gwneud y proffil ei hun yn gyfrinach ac yn ei osod yn yr un dosbarth trin â allwedd breifat.

Y ddau lwybr arall yw ffrwd a soced. Nid oes ar OpenVPN angen ond disgrifydd ffeil darllenadwy, felly bydd yn derbyn amnewid proses, cofnod /dev/fd wedi’i gefnogi gan bibell, neu enw ffeil sydd mewn gwirionedd yn FIFO. Mae’r rhyngwyneb rheoli yn wahanol o ran natur: mae’r cleient yn gofyn i broses oruchwylio am y gwerthoedd yn lle eu darllen ei hun. Mae’r gwahaniaeth hwnnw’n bwysig wrth ailgysylltu: gall ffeil credoau, FIFO y gall cymorthydd cyfrinachau ysgrifennu iddo eto, a’r rhyngwyneb rheoli ailgyflenwi heb berson; ni all amnewid proses, oherwydd bod y disgrifydd yn cael ei dreulio ar y darlleniad cyntaf.

Rhaid i’r ffeil fod yn union ddwy linell

Mae dau fodd methu yn ymdrin â’r rhan fwyaf o ffeiliau credoau toredig. Mae golygydd Windows yn gadael diweddiadau CRLF, mae’r dychweliad car yn dod yn rhan o’r cyfrinair, ac mae’r gweinydd yn gwrthod gwerth sy’n edrych yn gywir ar y sgrin. Mae ail linell wag - llinell wag lle dylai’r cyfrinair fod - yn gadael y cleient â chyfrinair gwag, y mae’r gweinydd yn ei wrthod er bod y gwerth ar y sgrin yn edrych yn gywir. Mae newline ychwanegol ar ôl y cyfrinair yn ddiniwed. Ysgrifennwch y ffeil o’r shell, nid o olygydd, a gwiriwch y beitiau:

install -m 600 /dev/null /etc/openvpn/client.creds
printf '%s\n%s\n' "$VPN_USER" "$VPN_PASS" > /etc/openvpn/client.creds
od -c /etc/openvpn/client.creds | head -3

Mae’r llwybr lawn mor bwysig â’r cynnwys. Mae llwybr cymharol yn datrys yn erbyn cyfeiriadur gwaith y broses, sydd ar gyfer gwasanaeth yn anaml yw’r cyfeiriadur lle buoch yn profi. Defnyddiwch lwybr absoliwt, gwnewch y ffeil yn eiddo i’r cyfrif sy’n rhedeg y cleient, a chadwch fodd 0600 fel na all y grŵp ac eraill ei darllen. Mae’r llawlyfr OpenVPN 2.6 yn rhestru’r ffurfiau a dderbynnir ar gyfer y gyfarwyddeb; edrychwch arno cyn dyfeisio trydydd un.

Profwch y ffeil cyn beio’r gweinydd. Mae rhedeg openvpn --config client.ovpn --auth-user-pass /etc/openvpn/client.creds --verb 4 yn argraffu a agorwyd y ffeil ac, yn ddiweddarach, a dderbyniwyd y credoau, sy’n dweud wrthych pa haen i’w newid nesaf.

Ffrydau, stdin a’r gwallau maen nhw’n eu cynhyrchu

Pibellu’r cyfrinair i mewn yw’r peth cyntaf mae’r rhan fwyaf o bobl yn ei roi cynnig arno a’r llwybr â’r mwyaf o syndodau. Mae amnewid proses yn gweithio oherwydd mai dim ond disgrifydd darllenadwy sydd ei angen ar y cleient: openvpn --config client.ovpn --verb 3 --auth-user-pass <(printf '%s\n%s\n' "$VPN_USER" "$VPN_PASS"). Nid yw pasio /dev/stdin yn gweithio ond pan fydd stdin yn dal ar agor ac yn ddarllenadwy ar yr union funud y mae’r cleient yn gofyn, nad yw’n wir mewn pibell sydd eisoes wedi’i threulio.

Mae gan ERROR: could not read Auth username from stdin ddau achos gwahanol. Ar rai cleientiaid 2.3.x daeth y neges o nam yn y gwaith o drin stdin a drwsiwyd gan ryddhadau 2.3 diweddarach, felly nid yw cleient mor hen yn gwella ond trwy uwchraddio. Ar gleient cyfredol mae’r un geiriad yn golygu bod y cleient wedi gofyn am fewnbwn consol ac nad oedd stdin yn derfynell - yn union y sefyllfa mewn uned systemd, tasg cron, neu gynhwysydd a gychwynnwyd heb -t.

Mae auth-nocache yn ychwanegu trydydd dolen sy’n edrych fel cyfrinair toredig. Mae’n gollwng y credoau o’r cof ar ôl eu defnyddio, felly nid oes gan ailgysylltiad a achoswyd gan newid rhwydwaith ddim i’w ailchwarae ac mae’r anogiad yn dychwelyd. Dyna’r gyfarwyddeb yn gweithio fel y’i cynlluniwyd. Mae auth-nocache yn newid yr hyn y mae’r cleient yn ei gadw yn y cof, nid yr hyn y mae’r gweinydd neu’r darparwr hunaniaeth yn ei feddwl o’r cyfrif, felly’r unig atgyweiriad yw ailgyflenwi’r un ffeil, wedi’i hailddarllen wrth ailddechrau - ac ar gyfer cysylltiad a reolir dylai’r cyflenwad hwnnw ddod o’r storfa gyfrinachau gymeradwy, nid cyfrinair mewn sgript.

Y rhyngwyneb rheoli pan fydd proses arall yn berchen ar yr anogiad

Gall rheolwr sy’n barod yn goruchwylio’r tiwnel ateb ei gwestiynau hefyd. Cychwynnwch y cleient gyda --management 127.0.0.1 7505, darllenwch y llinellau cyflwr, a gwyliwch am >PASSWORD:Need 'Auth' username/password. Mae’r rheolwr yn ateb gyda username "Auth" alice ac yna password "Auth" ... ar linellau gorchymyn ar wahân. Mae’r tocyn 'Auth' yn adleisio’r dynodwr o’r cais ac mae’n rhaid iddo gyd-fynd, neu anwybyddir yr ateb ac mae’r cleient yn aros.

Y gost yw peiriant cyflwr sydd gennych yn awr: trefn cysylltu, ailgychwyn cleientiaid, a soced lleol na ddylai defnyddwyr eraill ar y gwesteiwr ei gyrraedd. Yr hyn a brynwch yw crediant a gyflenwir ar amser rhedeg, heb ffeil ar ddisg a heb anogiad a all hongian. Os nad oes dim arall yn eich stac yn siarad y protocol yn barod, mae’r llwybr hwn yn ychwanegu cydran i’w chynnal.

Methiannau sy’n edrych fel problemau credoau

Mae ysgwyd llaw TLS na fydd byth yn gorffen, neu VERIFY ERROR: depth=0, error=certificate signature failure, yn broblem ymddiriedaeth ac yn digwydd cyn i unrhyw enw defnyddiwr gael ei ddarllen. Mae cleient proto tcp wedi’i gyfeirio at wrandäwr UDP yn methu yn yr un man: ni fydd y pecynnau byth yn cyrraedd y cam dilysu, felly mae pob cyfrinair yn edrych yn anghywir drwy gysylltiad. Cadwch ddilysu tystysgrifau ymlaen cyn i’r crediant gael ei anfon; nid yw anogiad cyfarwydd yn dweud dim am bwy sy’n derbyn y cyfrinair. Gwiriwch y gadwyn dystysgrifau, yr enw cyffredin a’r cludiant cyn i chi gyffwrdd â’r crediant.

Mae bygiau shell yn y sgript sy’n cydosod y proffil yw’r trywydd ffug arall. Mae gofod ar goll y tu mewn i [ ! -f "$file" ] yn cynhyrchu command not found, mae’r sgript yn stopio’n gynnar, ni chaiff y proffil ei ailadeiladu, ac mae’r cleient yn cychwyn gyda’r un blaenorol. Mae’r gwall hwnnw’n perthyn i’r shell, nid i ddilysu, ac ni fydd ail-deipio’r cyfrinair yn ei glirio.

Nid pob anogiad yn y llif hwn yw’r crediant hwn. Mae cyfrinair allwedd breifat, mewngofnodi drwy brydles HTTP a chyfrinair y gwasanaeth yn dair cyfrinach wahanol a ofynnir mewn gwahanol gamau, ac mae cyfrinair allwedd fel arfer yn cael ei drin gan y cleient neu asiant yn hytrach nag auth-user-pass. Os bydd yr anogiad yn ymddangos cyn bod y sesiwn TLS yn barod, rydych yn ateb y cwestiwn anghywir ac ni fydd ailosod cyfrif yn helpu. Ar ôl i’r anogiad anghywir gael ei eithrio, mae’r gwiriadau sy’n weddill yn dechrau ar yr haen gynharaf:

  • Darllenwch y gwall protocol cyntaf, nid y llinell credoau olaf: TLS, yna dilysu, yna push.
  • Cadarnhewch fod y ffeil yn ddwy linell, heb ddychweliadau car, a’i bod yn cael ei chyfeirio gan lwybr absoliwt.
  • Cadarnhewch nad yw’r proffil a’r llinell orchymyn yn anghytuno am y gyfarwyddeb.
  • Gwahanwch "credoau’n cael eu derbyn" oddi wrth "traffig yn llifo" - mae llwybro a DNS yn haen ddiweddarach.

Unwaith y bydd y cleient yn cyrraedd y cam push, stopiwch edrych ar credoau a dechreuwch ddarllen y llwybrau a’r gweinyddwyr DNS a anfonwyd gan y gweinydd. Dyna’r broblem nesaf, ac nid oes ganddi ddim i’w wneud â’r cyfrinair rydych newydd ei drwsio.

Erthyglau cysylltiedig