Қызмет іске қосылады, профильді еш шағымсыз оқиды, содан кейін байланыссыз көрінетін жолда өледі: ол ca.crt файлын аша алмайды. Сертификатта ештеңе өзгерген жоқ, ал unit файлындағы профиль жолы абсолютті. Дәл осы үйлесім — белгі. Сіз берген жол бір файлды көрсетеді, ал сол файлдың ішіндегі атаулар мүлде басқа жерде шешіледі, сондықтан толық білікті көрінетін іске қосу өз кілттерін ешкім ойламаған каталогтан оқуы мүмкін.

Сәтсіздіктің себептері аз, және оларды ретімен ажыратқан жөн: процестің шын мәнінде болған негізгі каталогы, қызметтің іске қосылу контексті және жол дұрыс болғаннан кейінгі файл айналасындағы рұқсаттар немесе sandbox. Әрқайсысы әртүрлі із қалдырады — unit ішінде, процесте және файлдық жүйеде.

Профиль жолы негізгі каталог емес

/tmp ішінде басталатын және /etc/vpn/prod/tenant-a.ovpn алатын процесті елестетіңіз. Сол профильдің ішінде ca ca.crt жолы салыстырмалы жолды атайды. Профильді тапқан аргументте ештеңе бұл атауды қайта жазбайды, сондықтан процесс /tmp/ca.crt іздейді және жоқ файл туралы хабарлайды.

Шатастыратыны — қателердің реті. OpenVPN алдымен конфигурацияны талдайды және сілтелген файлдарды оларға жеткенде ашады, сондықтан профильдегі қате кез келген кілтке тиер алдында хабарланады, ал жоқ сертификат талдау сол жерге жеткенде ғана шығады. Сондықтан жүктелетін профиль синтаксистің дұрыстығының дәлелі, ол атаған файлдардың табылғанының емес.

Нұсқаулық нені ажыратады: --config және --cd

OpenVPN 2.6 нұсқаулығы екі түрлі опцияны сипаттайды. Біреуі конфигурация файлын жүктейді. Екіншісі конфигурация, кілт, скрипт және басқа файлдар оқылмас бұрын процестің каталогын өзгертеді және ағымдағыға еш сілтемесіз абсолютті каталогты талап етеді.

openvpn --cd /etc/vpn/prod --config tenant-a.ovpn

Бұл шақыру — пішін, біреудің профилін іске қосу нұсқауы емес. Ол беретіні — анықтық: тізбектегі әрбір салыстырмалы атаудың негізі процесті бастаған қабықшадан немесе менеджерден мұраланбай, пәрменде айтылады. Балама да сондай жарамды және қызмет үшін жиі жақсырақ: жұмыс каталогын тыныш қалдырыңыз және профиль ішіндегі әрбір сілтелген файлды абсолютті етіңіз.

Қайсысын таңдасаңыз да, бірінші сәтсіздікті емес, бүкіл тізбекті тексеріңіз. Профиль басқа конфигурация файлын тартуы мүмкін, ал қосылған файлдың салыстырмалы атаулары оларды қосқан файлдың каталогына емес, сол процесс каталогына қатысты шешіледі. Журнал жолдары, аутентификация файлдары және көмекші скрипттер сол ережені ұстанады.

Қызмет басқа жерде басталады

Профиль каталогындағы интерактивті қабықша жинақталған unit туралы ештеңе дәлелдемейді. Менеджерлер өз жұмыс каталогын белгілейді, ал қаптаушы скрипт бинар іске қосылмас бұрын оны қайта өзгертуі мүмкін. Сәтсіздікке ұшыраған unit — пайымдауға тұрарлық жалғыз іске қосу.

systemctl show -p WorkingDirectory -p ExecStart --value openvpn@tenant-a
ls -l /proc/$(pgrep -n openvpn)/cwd

Екінші пәрмен тірі процестің шын мәнінде ұстап тұрған каталогын көрсетеді, және қаптаушы қатысқанда бұл unit файлына қарағанда сенімдірек. Екеуі сәйкес келмесе, жауап — қаптаушы, ал unit жалған із.

Іздеуден кейін: рұқсаттар, chroot және sandbox

Дұрыс негізгі каталог та сол хабарламаны бере алады, себебі шешу мен қатынау бөлек қадамдар. Процесс әрбір ата-аналық каталогта орындау рұқсатын және файлда оқу рұқсатын қажет етеді, ал файлдық жүйенің бір бөлігін жасыратын қызмет unit-і процестің жалпы не көре алатынын өзгертеді.

Үш кең тараған нұсқа бірдей қате береді. Файл тек root үшін оқылады, ал қызмет оны ашпас бұрын артықшылықтардан бас тартады. Unit профиль каталогын қамтымайтын файлдық жүйенің қорғаныш көрінісін орнатады. Демон chroot-пен жұмыс істейді, сондықтан хостта бар жол сол көріністің ішінде жоқ.

Диагностиканы файлдың меншігімен және процестің бірегейлігімен жүргізіңіз, рұқсаттарды босаңсытумен емес. Бұл қатені тыныштандыру үшін жеке кілтті барлығына оқылатын ету қатты сәтсіздікті тынышқа айырбастайды, ал кілт — каталогтың ең азын ашқыңыз келмейтін бөлігі.

Түзетуді өз іске қосуыңызбен дәлелдеңіз

Нақты unit-ті профильге қатысы жоқ каталогтан қайта іске қосыңыз және сол басталу жолын бақылаңыз. Содан кейін процесс жұмыс кезінде көзделген каталогты ұстап тұрғанын және жүктеген сертификат күткеніңіз екенін растаңыз.

systemctl restart openvpn@tenant-a
systemctl status openvpn@tenant-a --no-pager
journalctl -u openvpn@tenant-a -n 20 --no-pager

Жолдарды жүктеу сәтті болғанда, аутентификация мен маршруттау әлі де өз сәтсіздіктері бар бөлек кезеңдер, ал көтерілетін бірақ ешқандай трафик өткізбейтін қосылым — басқа тергеу. Мұндағы түзету файлдардың қай каталогтан келгеніне ғана қатысты және ол шақыруда көрінуі керек, соңғы рет қолмен іске қосқан адамның есінде қалуы емес.

Профиль конфигурация менеджерімен орналастырылса, негізгі каталогты немесе абсолютті файл атауларын сол жерге де қойыңыз. Бір хостта қолмен жасалған түзету — келесі қайта құрудан кейін қайтатын осы мәселенің нұсқасы.

Қатысты мақалалар