status=200/CHDIR: systemd никада није покренуо OpenVPN
Грешка CHDIR значи да systemd није могао да уђе у директоријум, а не да OpenVPN није могао да прочита профил. Прочитајте unit пре него што додирнете конфигурацију VPN.
Услуга пада, дневници помињу spawn и директоријум, а први нагон је да се провери конфигурација VPN. Из те датотеке још ништа није прочитано. systemd је пао док је припремао процес, пре него што се извршна датотека покренула, тако да ниједан парсер, ниједан сертификат и ниједан удаљени домаћин нису били консултовани. Читање кода стања као изјаве о systemd, а не о OpenVPN, јесте оно што ово претвара у кратку истрагу.
Прочитајте код стања пре апликације
Бројчани код после имена услуге именује фазу која је пала. Грешка директоријума се пријављује као стање CHDIR, док је извршна датотека која није могла да се покрене потпуно други код. Обе изгледају слично у реду сажетка и немају ништа заједничко у својим узроцима.
Та разлика је важна јер су поправке у различитим датотекама. Грешка CHDIR се односи на путању и на то како је услуга види. Грешка exec се односи на бинарну датотеку, њен интерпретер или неповезани mount. Промена удаљене тачке VPN, списка шифара или путање сертификата не може да реши ниједну од њих.
Потврдите да је грешка на старту, а не после успешног рада. Ако је услуга радила јуче, а сада пада у истој фази, нешто се променило у вези с директоријумом, његовим дозволама или самим unit-ом, и та промена је доказ који треба тражити.
Питајте unit где жели да буде
Читајте ефективни unit, а не датотеку за коју мислите да је инсталирана, јер drop-in датотеке могу да надјачају радни директоријум, а да никада не уредите главни unit. Излаз show директно одговара на питање:
systemctl cat [email protected]
systemctl show [email protected] -p WorkingDirectory -p RootDirectory -p User -p ProtectHome
journalctl -u [email protected] -b --no-pager | tail -30
За шаблон upstream сервера, радни директоријум је директоријум конфигурације сервера, а назив инстанце бира профил унутар њега. Инстанца названа branch зато очекује своју датотеку у истом директоријуму, а профил смештен на другом месту уопште не задовољава захтев радног директоријума.
Упоредите шта unit тражи с оним што постоји. Путања која је некада постојала, симболичка веза која сада показује на друго место или назив инстанце који више не одговара директоријуму јесу уобичајене промене које производе управо ову грешку.
Проверите путању како је види услуга
Ваш shell и услуга не деле исти поглед на датотечни систем. Подешени коренски директоријум или root image мења значење апсолутне путање унутар unit-а, а путања која је очигледно присутна на хосту може да недостаје у том простору имена. Прочитајте поставке unit-а пре него што поверите ручном тесту.
Дозволе погоршавају проблем. Услуга ради као одређени корисник, а тај корисник мора да може да прође кроз сваки родитељски директоријум да би стигао до циља, а не само да прочита сам циљ. Директоријум читљив за root, а непроходан за корисника услуге, производи грешку која изгледа као путања која недостаје.
namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths
Поставке очвршћивања су такође део ове слике. Unit који скрива кућне директоријуме или чини део датотечног система само за читање ради управо оно за шта је конфигурисан, а радни директоријум мора да живи тамо где га sandbox још излаже.
Поправите власника, па очекујте другу грешку
Исправите распоред или unit преко онога који поседује ту конфигурацију. Премештање профила у очекивани директоријум је легитимна поправка када је распоред погрешан, али не објашњава директоријум у који се не може ући, зато то не третирајте као општи одговор.
Одуприте се пречици проширења дозвола на стаблу конфигурације или уклањања sandbox-а. Обе уклањају симптом, а истовремено уклањају заштите које су тамо намерно постављене, и следећу грешку ће бити теже протумачити.
Поново покрените инстанцу и прочитајте следећи догађај уместо да претпоставите успех. Вероватна следећа грешка је да OpenVPN не може да отвори своју конфигурацијску датотеку, што је напредак: ушло се у радни директоријум и парсер сада ради. Одатле пратите стварно мапирање датотека unit-а уместо да се враћате на мрежно решавање проблема.
Референца за извршавање systemd одређује како се радни директоријум тумачи заједно с коренским директоријумима и sandbox-ом. Образац који треба запамтити је једноставан: сваки код стања именује другу фазу, и само сопствене грешке апликације описују апликацију.