status=200/CHDIR: systemd OpenVPN-ді ешқашан іске қоспады
CHDIR қатесі systemd каталогқа кіре алмағанын білдіреді, OpenVPN профиль оқи алмағанын емес. VPN конфигурациясын ұстамас бұрын unit-ті оқыңыз.
Қызмет істен шығады, журналдарда spawn мен каталог аталады, ал бірінші инстинкт — VPN конфигурациясын тексеру. Ол файлдан әзірге ештеңе оқылмаған. systemd процесті дайындау кезінде, орындалатын файл іске қосылмай тұрып сәтсіз аяқталды, сондықтан бірде-бір парсер, бірде-бір сертификат және бірде-бір қашық хост сұралмаған. Күй кодын OpenVPN туралы емес, systemd туралы мәлімдеме ретінде оқу — бұны қысқа тергеуге айналдыратын нәрсе.
Күй кодын қолданбадан бұрын оқыңыз
Қызмет атауынан кейінгі сандық код сәтсіз аяқталған кезеңді атайды. Каталог қатесі 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 сервер үлгісі үшін жұмыс каталогы — сервер конфигурациясының каталогы, ал instance атауы оның ішіндегі профильді таңдайды. Сондықтан branch атты instance сол каталогта өз файлын күтеді, ал басқа жерге қойылған профиль жұмыс каталогы талабын мүлдем қанағаттандырмайды.
Unit талап ететін нәрсені бар нәрсемен салыстырыңыз. Бұрын болған жол, қазір басқа жерге сілтейтін символдық сілтеме немесе енді каталогқа сәйкес келмейтін instance атауы — осы қатені тудыратын қарапайым өзгерістер.
Жолды қызмет көретіндей тексеріңіз
Сіздің shell мен қызмет бірдей файл жүйесі көрінісін бөліспейді. Бапталған түбір каталог немесе root image unit ішіндегі абсолютті жолдың мағынасын өзгертеді, ал хостта анық бар жол сол атау кеңістігінде болмауы мүмкін. Қолмен сынаққа сенбес бұрын unit баптауларын оқыңыз.
Рұқсаттар мәселені одан әрі ауырлатады. Қызмет белгілі бір пайдаланушы ретінде жұмыс істейді, және ол пайдаланушы мақсатқа жету үшін әрбір ата-ана каталогтан өте алуы керек, тек мақсаттың өзін оқу жеткіліксіз. Root оқи алатын, бірақ қызмет пайдаланушысы өте алмайтын каталог жоғалған жолға ұқсайтын қате туғызады.
namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths
Қатайту баптаулары да осы суреттің бөлігі. Үй каталогтарын жасыратын немесе файл жүйесінің бір бөлігін тек оқуға болатын ететін unit өзіне бапталғанды дәл орындайды, ал жұмыс каталогы sandbox оны әлі көрсететін жерде болуы керек.
Иесін түзетіңіз, содан кейін басқа қате күтіңіз
Орналасуды немесе unit-ті сол конфигурацияға ие адам арқылы түзетіңіз. Профильді күтілетін каталогқа жылжыту орналасу дұрыс болмаған кезде заңды түзету, бірақ кіруге болмайтын каталогты түсіндірмейді, сондықтан оны жалпы жауап деп қабылдамаңыз.
Конфигурация ағашында рұқсаттарды кеңейту немесе sandbox-ты жою қысқа жолына қарсы тұрыңыз. Екеуі де симптомды жоғалтады, сонымен бірге әдейі қойылған қорғаныстарды алып тастайды, ал келесі қатені түсіндіру қиынырақ болады.
Instance-ті қайта іске қосыңыз және сәттілік деп болжаудың орнына келесі оқиғаны оқыңыз. Ықтимал келесі қате — OpenVPN өз конфигурация файлын аша алмайды, бұл ілгерілеу: жұмыс каталогына кірдік және парсер қазір жұмыс істеп тұр. Одан әрі unit-тің нақты файл картасын бақылаңыз, желілік ақауларды шешуге қайтпаңыз.
systemd орындау анықтамалығы жұмыс каталогының түбір каталогтармен және sandbox-пен бірге қалай түсіндірілетінін анықтайды. Есте сақтайтын үлгі қарапайым: әрбір күй коды басқа кезеңді атайды, және тек қолданбаның өз қателері қолданбаны сипаттайды.