Тунелот се крева и клиентот се поврзува, но фиксната адреса и турнатите рути што ги дефиниравте за тој еден корисник недостасуваат. Во дневникот не пишува “file not found”, и токму тоа ги тера луѓето да издаваат сертификати одново. Во повеќето од овие случаи демонот работи од друг директориум од школката во која тестиравте, а client-config-dir никогаш не бил разрешен како што претпоставувавте. Поправката е корекција на патеката, не ресетирање на ингеренциите.

Прочитајте го unit пред да ја допрете конфигурацијата

Почнете од процесот што навистина работи, не од датотеката што ја уредувавте. Прашајте го systemd за линијата за извршување, работниот директориум и сметката на која паѓа. Трите одговори ги објаснуваат повеќето дефекти од овој вид:

systemctl show openvpn-server@server -p ExecStart -p WorkingDirectory -p User -p RootDirectory

Празен WorkingDirectory значи дека unit почнува во /, па релативен client-config-dir ccd се бара во /ccd. Тој директориум речиси никогаш не постои, а демонот не го смета неговото отсуство за фатално.

Споредете го тоа со интерактивното стартување што го користевте при тестирањето, каде тековниот директориум на вашата школка беше веројатно конфигурацискиот. Иста датотека, исти клучни зборови, два различни резултати.

Спрема што се разрешува релативна патека

Клучниот збор се разрешува спрема работниот директориум на процесот во моментот кога се користи опцијата. Тоа не значи “покрај конфигурациската датотека што ја пренесов со --config”. OpenVPN со задоволство ќе прочита конфигурација од апсолутна патека и сепак ќе ги разреши релативните вредности на друго место, и токму тоа е стапицата овде. Прирачникот за OpenVPN 2.6 го наведува правилото под --client-config-dir и повторно под --cd.

Клучниот збор cd го менува тој контекст пред да се читаат други датотеки, па unit што поставува cd /etc/openvpn/server и потоа client-config-dir ccd се разрешува во /etc/openvpn/server/ccd. Ако додадете cd, проверете го редоследот на директивите и запомнете дека влијае на секоја друга релативна референца во истата датотека.

Поминете ја патеката како сметка на демонот

Патека може да биде точна и сепак нечитлива. По спуштањето на привилегиите демонот повеќе не е root, па секој родителски директориум бара дозвола за пребарување за таа сметка, а самата клиентска датотека бара дозвола за читање. Еден бит за извршување што недостасува на родител е доволен да ја сокрие датотеката, а грешката се појавува само како клиент што тивко го добива стандардниот базен.

namei ги печати дозволите на секоја компонента по ред, што е побрзо од проверување на директориумите еден по еден:

namei -l /etc/openvpn/server/ccd/client1

Потоа тестирајте го читањето како сметка на услугата, а не како вие:

runuser -u openvpn -- test -r /etc/openvpn/server/ccd/client1 && echo readable

Ако unit користи chroot, директориумот мора да постои внатре во затворот, а патеката во конфигурацијата се толкува откако ќе се примени chroot. Датотека што постои на домаќинот надвор од затворот е невидлива одвнатре.

Потврдете го пребарувањето наместо да претпоставувате

Подигнете го нивото на дневникот за едно рестартирање и прочитајте што вели серверот за опциите специфични за клиентот. На verb 4 демонот ја известува увезената конфигурација по клиент, па отсутната линија е директен доказ дека за таа врска не била прочитана ниту една датотека.

openvpn --config /etc/openvpn/server.conf --verb 4 --client-config-dir /etc/openvpn/server/ccd

Стартувајте го тоа во преден план на резервен порт и поврзете еден клиент. Тоа целосно го трга systemd од сликата: ако прескокнувањата се појават овде, а не под услугата, разликата е во контекстот на unit, не во датотеката.

Одлучете што треба да се случи кога ниту една датотека не се совпаѓа. Без ccd-exclusive клиентот се прима само со глобалните поставки на базенот, и тоа е тивкиот дефект опишан погоре. Со него, отсутната датотека станува одбиена врска, а таквото одбивање е полесно да се забележи, но потешко да се отстрани под оптоварување.

Поправете, рестартирајте, проверете

Направете го директориумот апсолутен во конфигурацијата и оставете го така. Релативните патеки се безбедни само кога unit ја фиксира работната директорија, а фиксирањето е дополнителен подвижен дел што некој подоцна ќе го отстрани.

client-config-dir /etc/openvpn/server/ccd
ccd-exclusive

Рестартирајте ја инстанцата, поврзете повторно еден познат клиент и прочитајте ја адресата што ја добил заедно со рутите турнати кон него. Ако адресата се совпаѓа со линијата ifconfig-push во датотеката на тој клиент, пребарувањето работело. Ако клиентот сè уште паѓа во општиот базен, вратете се на бројот на линии во дневникот: нула увози значи дека патеката или идентитетот се погрешни, еден увоз со погрешна содржина значи дека уредувате друга датотека од онаа што ја чита демонот.

Вратете се со заедничко враќање на претходниот unit и конфигурацијата, потоа рестартирајте. Сертификатите не треба да се издаваат повторно за ништо од ова, а третирањето на проблем со директориум како проблем со ингеренции е начинот на кој петминутна поправка станува прозорец за одржување.

Поврзани статии