Xizmat ishga tushadi, profilni hech qanday shikoyatsiz o‘qiydi va keyin aloqasiz ko‘rinadigan satrda o‘ladi: u ca.crt faylini ocholmaydi. Sertifikatda hech narsa o‘zgarmagan, unit faylidagi profil yo‘li esa mutlaq. Aynan shu birikma ishoradir. Siz bergan yo‘l bitta faylni ko‘rsatadi, bu fayl ichidagi nomlar esa butunlay boshqa joyda hal qilinadi, shuning uchun to‘liq malakali ko‘rinadigan ishga tushirish ham hech kim ko‘zda tutmagan katalogdan kalitlarini o‘qishi mumkin.

Muvaffaqiyatsizlikning sabablari oz, ularni tartib bilan ajratish kerak: jarayon haqiqatda ega bo‘lgan asosiy katalog, xizmatning ishga tushish konteksti va yo‘l to‘g‘ri bo‘lgach fayl atrofidagi ruxsatlar yoki sandbox. Har biri boshqa iz qoldiradi — unit ichida, jarayonda va fayl tizimida.

Profil yo‘li asosiy katalog emas

/tmp ichida boshlanib, /etc/vpn/prod/tenant-a.ovpn oladigan jarayonni tasavvur qiling. O‘sha profil ichida ca ca.crt satri nisbiy yo‘lni ko‘rsatadi. Profilni topgan argumentda hech narsa bu nomni qayta yozmaydi, shuning uchun jarayon /tmp/ca.crt ni qidiradi va yo‘q fayl haqida xabar beradi.

Chalg‘itadigan narsa xatolarning tartibi. OpenVPN avval konfiguratsiyani tahlil qiladi va ko‘rsatilgan fayllarni ularga yetganda ochadi, shuning uchun profildagi xatolik har qanday kalitga tegishdan oldin bildiriladi, yo‘q sertifikat esa tahlil o‘sha yerga yetgandagina ko‘rinadi. Demak, yuklanadigan profil sintaksis to‘g‘ri ekanining dalili, u nomlagan fayllar topilganining emas.

Qo‘llanma nimani ajratadi: --config va --cd

OpenVPN 2.6 qo‘llanmasi ikki xil parametrni tavsiflaydi. Biri konfiguratsiya faylini yuklaydi. Ikkinchisi konfiguratsiya, kalit, skript va boshqa fayllar o‘qilishidan oldin jarayon katalogini o‘zgartiradi va joriy katalogga hech qanday havolasiz mutlaq katalog talab qiladi.

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

Bu chaqiruv shakl, boshqa birovning profilini ishga tushirish ko‘rsatmasi emas. U beradigan narsa aniq-ravshanlik: zanjirdagi har bir nisbiy nomning asosi jarayonni boshlagan qandaydir qobiq yoki menejerdan meros olinmay, buyruqda ko‘rsatiladi. Muqobil ham shunchalik to‘g‘ri va xizmat uchun ko‘pincha yaxshiroq: ish katalogini tinch qo‘ying va profil ichidagi har bir ko‘rsatilgan faylni mutlaq qiling.

Nimani tanlamang, birinchi muvaffaqiyatsizlikni emas, butun zanjirni tekshiring. Profil boshqa konfiguratsiya faylini tortishi mumkin, kiritilgan faylning nisbiy nomlari esa ularni kiritgan fayl katalogiga emas, o‘sha jarayon katalogiga nisbatan hal qilinadi. Jurnal yo‘llari, autentifikatsiya fayllari va yordamchi skriptlar ham shu qoidaga bo‘ysunadi.

Xizmat boshqa joyda boshlanadi

Profil katalogidagi interaktiv qobiq paketlangan unit haqida hech narsani isbotlamaydi. Menejerlar o‘z ish katalogini belgilaydi, o‘rovchi skript esa binar ishga tushishidan oldin uni yana o‘zgartirishi mumkin. Muvaffaqiyatsiz bo‘lgan unit — mulohaza qilishga arziydigan yagona ishga tushirish.

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

Ikkinchi buyruq tirik jarayon haqiqatda ushlab turgan katalogni ko‘rsatadi va o‘rovchi ishtirok etganda bu unit faylidan ishonchliroq. Ikkisi mos kelmasa, javob o‘rovchi, unit esa yo‘ldan uruvchi iz.

Qidiruvdan keyin: ruxsatlar, chroot va sandbox

To‘g‘ri asosiy katalog ham xuddi shu xabarni berishi mumkin, chunki hal qilish va kirish alohida qadamlar. Jarayonga har bir ota-ona katalogda bajarish ruxsati va faylda o‘qish ruxsati kerak, fayl tizimining bir qismini yashiruvchi xizmat unit esa jarayon umuman nimani ko‘ra olishini o‘zgartiradi.

Uchta keng tarqalgan variant bir xil xato beradi. Fayl faqat root uchun o‘qiladi, xizmat esa uni ochishdan oldin imtiyozlardan voz kechadi. Unit profil katalogini o‘z ichiga olmaydigan himoya ko‘rinishidagi fayl tizimini o‘rnatadi. Demon chroot bilan ishlaydi, shuning uchun xostda mavjud yo‘l o‘sha ko‘rinish ichida yo‘q.

Ruxsatlarni bo‘shatish o‘rniga fayl egaligi va jarayon identifikatori bilan tashxis qiling. Bu xatoni jim qilish uchun shaxsiy kalitni hammaga o‘qiladigan qilish baland muvaffaqiyatsizlikni jim bilan almashtiradi, kalit esa katalogning eng kam oshkor qilmoqchi bo‘lgan qismidir.

Tuzatishni o‘z ishga tushirishingiz bilan isbotlang

Haqiqiy unitni profilga aloqasiz katalogdan qayta ishga tushiring va o‘sha boshlanish satrini kuzating. So‘ng jarayon ishlayotganda ko‘zda tutilgan katalogni ushlab turganini va yuklagan sertifikat kutganingiz ekanini tasdiqlang.

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

Yo‘llar yuklanishi muvaffaqiyatli bo‘lganda ham autentifikatsiya va marshrutlash o‘z muvaffaqiyatsizliklariga ega alohida bosqichlar, ulanib ham trafik o‘tkazmaydigan aloqa esa boshqa tekshiruv. Bu yerdagi tuzatish faqat fayllar qaysi katalogdan kelganiga tegishli va u chaqiruvda ko‘rinishi kerak, oxirgi marta qo‘lda ishga tushirgan kishining yodida qolishi emas.

Agar profil konfiguratsiya menejeri tomonidan joylashtirilsa, asosiy katalogni yoki mutlaq fayl nomlarini u yerga ham qo‘ying. Bitta xostda qo‘lda qilingan tuzatish keyingi qayta qurishdan keyin qaytadigan bu muammoning variantidir.

O'xshash maqolalar