client-config-dir tiek ignorēts pēc tam, kad OpenVPN kļuva par servisu
Relatīvs client-config-dir tiek atrisināts pret dēmona darba direktoriju. Izlasiet unit, pārbaudiet ceļa atļaujas un tad apstipriniet meklēšanu žurnālā.
Jūsu tunelis paceļas un klients piesakās, bet fiksētā adrese un uzstumtie maršruti, kurus definējāt šim vienam lietotājam, trūkst. Žurnālā nav rakstīts “file not found”, un tieši tas sūta cilvēkus atkārtoti ģenerēt sertifikātus. Lielākajā daļā šo gadījumu dēmons darbojas no citas direktorijas nekā čaula, kurā jūs testējāt, un client-config-dir nekad netika atrisināts tā, kā jūs pieņēmāt. Labojums ir ceļa korekcija, nevis pieteikšanās datu atiestatīšana.
Izlasiet unit pirms konfigurācijas aizskaršanas
Sāciet ar procesu, kas tiešām darbojas, nevis ar failu, kuru rediģējāt. Pajautājiet systemd izpildes rindu, darba direktoriju un kontu, uz kuru tas nolaižas. Šīs trīs atbildes izskaidro lielāko daļu šīs klases kļūmju:
systemctl show openvpn-server@server -p ExecStart -p WorkingDirectory -p User -p RootDirectoryTukss WorkingDirectory nozīmē, ka unit sākas /, tāpēc relatīvs client-config-dir ccd tiek meklēts /ccd. Šī direktorija gandrīz nekad neeksistē, un dēmons tās neesamību neuzskata par letālu.
Salīdziniet to ar interaktīvo palaišanu, ko izmantojāt testēšanas laikā, kur jūsu čaulas pašreizējā direktorija, visticamāk, bija konfigurācijas direktorija. Tas pats fails, tie paši atslēgvārdi, divi dažādi rezultāti.
Pret ko tiek atrisināts relatīvs ceļš
Atslēgvārds tiek atrisināts pret procesa darba direktoriju tajā brīdī, kad opcija tiek izmantota. Tas nenozīmē “blakus konfigurācijas failam, kuru nodevu ar --config”. OpenVPN labprāt nolasīs konfigurāciju no absolūta ceļa un tomēr relatīvās vērtības atrisinās citur, un tieši tas ir slazds šeit. OpenVPN 2.6 rokasgrāmata noteikumu izklāsta pie --client-config-dir un vēlreiz pie --cd.
Atslēgvārds cd maina šo kontekstu pirms citu failu nolasīšanas, tāpēc unit, kas iestata cd /etc/openvpn/server un pēc tam client-config-dir ccd, tiek atrisināts uz /etc/openvpn/server/ccd. Ja pievienojat cd, pārbaudiet direktīvu secību un atcerieties, ka tas ietekmē katru citu relatīvo atsauci tajā pašā failā.
Izejiet ceļu kā dēmona konts
Ceļš var būt pareizs un tomēr nelasāms. Pēc privilēģiju nomešanas dēmons vairs nav root, tāpēc katrai vecākdirektorijai ir vajadzīga meklēšanas atļauja šim kontam, un pašam klienta failam – lasīšanas atļauja. Viens trūkstošs izpildes bits vecākdirektorijā ir pietiekams, lai failu paslēptu, un kļūda izpaužas tikai kā klients, kas klusi saņem noklusējuma baseinu.
namei izdrukā katras sastāvdaļas atļauju secībā, kas ir ātrāk nekā direktoriju pārbaude pa vienam:
namei -l /etc/openvpn/server/ccd/client1Pēc tam pārbaudiet lasīšanu kā servisa konts, nevis kā jūs pats:
runuser -u openvpn -- test -r /etc/openvpn/server/ccd/client1 && echo readableJa unit izmanto chroot, direktorijai jāpastāv cietuma iekšpusē, un konfigurācijas ceļš tiek interpretēts pēc chroot piemērošanas. Fails, kas atrodas uz resursdatora ārpus cietuma, no iekšpuses nav redzams.
Apstipriniet meklēšanu, nevis miniet
Vienai pārstartēšanai paaugstiniet žurnāla līmeni un izlasiet, ko serveris saka par klientam raksturīgajām opcijām. Pie verb 4 dēmons ziņo importēto konfigurāciju katram klientam, tāpēc trūkstoša rinda ir tiešs pierādījums, ka šim savienojumam netika nolasīts neviens fails.
openvpn --config /etc/openvpn/server.conf --verb 4 --client-config-dir /etc/openvpn/server/ccdPalaidiet to priekšplānā brīvā portā un pievienojiet vienu klientu. Tas pilnībā izņem systemd no attēla: ja pārrakstījumi parādās šeit, bet ne zem servisa, atšķirība ir unit kontekstā, nevis failā.
Izlemiet, kam jānotiek, kad neviens fails neatbilst. Bez ccd-exclusive klients tiek uzņemts tikai ar globālajiem baseina iestatījumiem, un tas ir iepriekš aprakstītais klusais defekts. Ar to trūkstošs fails kļūst par atteiktu savienojumu, un šo atteikumu ir vieglāk pamanīt, bet grūtāk atkļūdot slodzes laikā.
Izlabojiet, pārstartējiet, pārbaudiet
Padariet direktoriju absolūtu konfigurācijā un atstājiet to tādu. Relatīvi ceļi ir droši tikai tad, kad unit nofiksē darba direktoriju, un nofiksēšana ir papildu kustīga daļa, ko kāds vēlāk noņems.
client-config-dir /etc/openvpn/server/ccd
ccd-exclusivePārstartējiet instanci, atkārtoti pievienojiet vienu zināmu klientu un izlasiet adresi, ko tas saņēma, kopā ar uz to uzstumtajiem maršrutiem. Ja adrese atbilst rindai ifconfig-push šī klienta failā, meklēšana darbojās. Ja klients joprojām nonāk vispārējā baseinā, atgriezieties pie žurnāla rindu skaita: nulle importu nozīmē, ka ceļš vai identitāte ir nepareiza, viens imports ar nepareizu saturu nozīmē, ka rediģējat citu failu, nevis to, ko lasa dēmons.
Atgriezieties, atjaunojot iepriekšējo unit un konfigurāciju kopā, un pēc tam pārstartējiet. Sertifikāti šim nolūkam nav jāizdod no jauna, un direktorijas problēmas uztveršana kā pieteikšanās datu problēma ir veids, kā piecu minūšu labojums pārvēršas apkalpošanas logā.