OpenVPN fënnt ca.crt net, obwuel de Profil geluede gëtt
De Profilspad ass net d’Basis fir d’Dateien dran. Kuckt firwat en absolute --config trotzdem op ca.crt feelt an wéi den Start d’Äntwert entscheet.
Den Déngscht startet, liest de Profil ouni Kloen a stierft dann op enger Linn, déi net zesummenhänkt schéngt: hien kann ca.crt net opmaachen. Um Zertifikat huet sech näischt geännert, an de Profilspad an der Unit-Datei ass absolut. Genee déi Kombinatioun ass den Hiwäis. De Spad, deen Dir uginn hutt, lokaliséiert eng Datei, an d’Nimm bannent dëser Datei ginn ganz anescht opgeléist, sou datt en Start, deen voll qualifizéiert ausgesäit, seng Schlësselen nach ëmmer aus engem Verzeechnes liese kann, dat kee virgesinn huet.
De Feeler huet wéineg Ursaachen, an et lount sech, se der Rei no ze trennen: de Basisverzeechnes, dat de Prozess tatsächlech hat, de Startkontext vum Déngscht an d’Berechtegungen oder d’Sandbox ronderëm d’Datei, wann de Spad richteg ass. Jiddwereen hannerléisst eng aner Spuer — an der Unit, am Prozess an am Dateiesystem.
De Profilspad ass keen Basisverzeechnes
Stellt Iech e Prozess vir, deen an /tmp startet an /etc/vpn/prod/tenant-a.ovpn kritt. Bannent deem Profil nennt d’Linn ca ca.crt e relative Spad. Näischt am Argument, deen de Profil fonnt huet, schreift deen Numm ëm, dofir sicht de Prozess /tmp/ca.crt a mellt eng feelend Datei.
Verwierrend ass d’Reiefolleg vun de Feeler. OpenVPN parst als éischt d’Konfiguratioun an opent referenzéiert Dateien, wéi en se erreecht, sou datt en Tippfeeler am Profil gemellt gëtt, ier en ee Schlëssel beréiert gëtt, wärend en feelend Zertifikat eréischt erschéngt, wann d’Parsen sou wäit kënnt. E Profil, deen lued, ass dofir de Beweis, datt d’Syntax richteg ass, net datt d’Dateie, déi en nennt, fonnt goufen.
Wat den Handbuch trennt: --config an --cd
Den Handbuch vun OpenVPN 2.6 beschreift zwou verschidde Optiounen. Déi eng lued eng Konfiguratiounsdatei. Déi aner wiesselt d’Verzeechnes vum Prozess, ier Konfiguratioun, Schlëssel, Skript an aner Dateie gelies ginn, a verlaangt en absolute Verzeechnes ouni Bezuch op dat aktuellt.
openvpn --cd /etc/vpn/prod --config tenant-a.ovpn
Dee Opruff ass eng Form, keng Uweisung, en anere seng Profil ze starten. Wat en Iech gëtt, ass Determinismus: d’Basis fir all relativen Numm an der Kette steet am Kommando, amplaz vun der Shell oder dem Manager geierft ze ginn, deen de Prozess gestart huet. D’Alternativ ass genee esou gülteg a fir en Déngscht dacks besser: loosst d’Aarbechtsverzeechnes a Rou a maacht all referenzéiert Datei am Profil absolut.
Wat Dir och wielt, auditéiert déi ganz Kette an net den éischte Feeler. E Profil ka eng aner Konfiguratiounsdatei eranzéien, an déi relativ Nimm vun der agebonnener Datei ginn géint dat selwecht Prozessverzeechnes opgeléist, net géint d’Verzeechnes vun der Datei, déi se agebonnen huet. Logspade, Authentifizéierungsdateien an Hëllefsskripte follegen déiselwecht Regel.
Den Déngscht startet soss anzwousch
Eng interaktiv Shell am Profilverzeechnes beweise näischt iwwer eng gepackte Unit. Manageren setzen hir eege Aarbechtsverzeechnes, an e Wrapper-Skript kann et nach eng Kéier änneren, ier de Binär leeft. Déi Unit, déi feelt, ass deen eenzegen Start, iwwer deen et sech lount nozedenken.
systemctl show -p WorkingDirectory -p ExecStart --value openvpn@tenant-a
ls -l /proc/$(pgrep -n openvpn)/cwd
Den zweeten Kommando weist d’Verzeechnes, dat de liewege Prozess tatsächlech hält, an dat ass zouverlässeger wéi d’Unit-Datei, wann e Wrapper am Spill ass. Wa béid net iwwereneestëmmen, ass de Wrapper Är Äntwert an d’Unit ass eng falsch Spuer.
No der Sich: Berechtegungen, chroot a Sandbox
En richtegt Basisverzeechnes kann déiselwecht Meldung ginn, well Opléisung a Zougang getrennt Schrëtt sinn. De Prozess brauch Ausféierungsrecht op all Elterenverzeechnes a Liesrecht op der Datei, an eng Déngscht-Unit, déi en Deel vum Dateiesystem verstoppt, ännert, wat de Prozess iwwerhaapt ka gesinn.
Dräi heefeg Variante ginn déiselwecht Feeler. D’Datei ass just fir root liesbar, wärend den Déngscht virum Opmaachen op Privilegien verzicht. D’Unit setzt eng schützend Vue vum Dateiesystem, déi de Profilverzeechnes net enthält. Den Daemon leeft mat chroot, dofir gëtt et de Spad, deen um Host existéiert, bannent dëser Vue net.
Diagnostizéiert iwwer den Eegentum vun der Datei an d’Identitéit vum Prozess, net duerch d’Lockerung vun de Berechtegungen. E private Schlëssel fir jiddwereen liesbar ze maachen, fir dëse Feeler ze berouegen, tauscht e luede Feeler géint e rouegen, an de Schlëssel ass genee deen Deel vum Verzeechnes, deen Dir am mannsten wëllt entbléissen.
Beweist d’Korrektur mam eegene Start
Start déi richteg Unit aus engem Verzeechnes ouni Bezuch zum Profil nei a beobacht déiselwecht Startlinn. Bestätegt duerno, datt de Prozess beim Lafen dat uginn Verzeechnes hält an datt d’Zertifikat, dat en gelueden huet, dat ass, wat Dir erwaart.
systemctl restart openvpn@tenant-a
systemctl status openvpn@tenant-a --no-pager
journalctl -u openvpn@tenant-a -n 20 --no-pager
Wann d’Luede vun de Spade geléngt, si Authentifizéierung a Routing nach ëmmer getrennt Etappen mat hirem eegene Feeler, an eng Verbindung, déi opkënnt awer keen Trafic duerchléisst, ass eng aner Enquête. D’Korrektur hei geet just dorëms, aus wéienem Verzeechnes d’Dateie koumen, an se sollt am Opruff ze gesinn sinn, amplaz vun deem behaapt ze ginn, deen en d’lescht Kéier vun Hand gestart huet.
Wann de Profil vun engem Konfiguratiounsmanager ausgerullt gëtt, setzt d’Basisverzeechnes oder déi absolut Dateinimm do och. Eng manuell Korrektur op engem Host ass d’Versioun vun dësem Problem, déi no der nächster Neiopbau zréckkënnt.