Xidmət işə düşür, profili heç bir şikayət olmadan oxuyur, sonra əlaqəsiz görünən bir sətirdə ölür: ca.crt faylını aça bilmir. Sertifikatda heç nə dəyişməyib, unit faylındakı profil yolu isə mütləqdir. Bu birləşmə işarədir. Verdiyiniz yol bir faylı göstərir, həmin faylın içindəki adlar isə tamam başqa yerdə həll olunur, ona görə də tam kvalifikasiyalı görünən işə salma açarlarını heç kimin nəzərdə tutmadığı qovluqdan oxuya bilər.

Uğursuzluğun az sayda səbəbi var və onları sıra ilə ayırmağa dəyər: prosesin həqiqətən malik olduğu baza qovluğu, xidmətin işə salınma konteksti və yol düzgün olduqdan sonra fayl ətrafındakı icazələr və ya sandbox. Hər biri fərqli iz qoyur: unit daxilində, prosesdə və fayl sistemində.

Profil yolu baza qovluğu deyil

/tmp daxilində başlayan və ona /etc/vpn/prod/tenant-a.ovpn verilən prosesi təsəvvür edin. Həmin profilin içində ca ca.crt sətri nisbi yol göstərir. Profili tapan arqumentdəki heç nə bu adı yenidən yazmır, buna görə proses /tmp/ca.crt axtarır və itkin fayl barədə məlumat verir.

Çaşdıran hissə xətaların sırasıdır. OpenVPN konfiqurasiyanı əvvəlcə təhlil edir və istinad olunan faylları onlara çatdıqca açır, buna görə profildəki yazı səhvi hər hansı açara toxunulmadan bildirilir, itkin sertifikat isə yalnız təhlil o yerə çatanda üzə çıxır. Deməli, yüklənən profil sintaksisin düzgün olduğuna sübutdur, adlarını çəkdiyi faylların tapıldığına deyil.

Təlimatın ayırdığı: --config və --cd

OpenVPN 2.6 təlimatı iki ayrı seçim təsvir edir. Biri konfiqurasiya faylını yükləyir. Digəri konfiqurasiya, açar, skript və digər fayllar oxunmazdan əvvəl prosesin qovluğunu dəyişir və cari qovluğa heç bir istinadı olmayan mütləq qovluq tələb edir.

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

Bu çağırış bir formadır, başqasının profilini işə salmaq üçün təlimat deyil. Sizə verdiyi şey determinlikdir: zəncirdəki hər nisbi ad üçün baza prosesi başladan hansısa shell və ya menecerdən miras alınmaq əvəzinə əmrdə göstərilir. Alternativ eyni dərəcədə keçərlidir və xidmət üçün çox vaxt daha yaxşıdır: işçi qovluğa toxunmayın və profilin içində hər istinad olunan faylı mütləq edin.

Hansını seçsəniz də, ilk uğursuzluğu deyil, bütün zənciri yoxlayın. Profil başqa konfiqurasiya faylını da cəlb edə bilər və daxil edilən faylın nisbi adları onları daxil edən faylın qovluğuna görə deyil, eyni proses qovluğuna görə həll olunur. Log yolları, autentifikasiya faylları və köməkçi skriptlər də eyni qaydaya tabedir.

Xidmət başqa yerdə başlayır

Profil qovluğundakı interaktiv shell paketlənmiş unit barədə heç nə sübut etmir. Menecerlər öz işçi qovluqlarını qurur, wrapper skript isə binar işə düşməzdən əvvəl onu yenidən dəyişə bilər. Uğursuz olan unit mülahizə aparmağa dəyən yeganə işə salmadır.

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

İkinci əmr canlı prosesin həqiqətən tutduğu qovluğu göstərir, bu da wrapper iştirak edəndə unit faylından daha etibarlıdır. Əgər ikisi uyğun gəlmirsə, cavabınız wrapper-dir və unit yanlış istiqamətdir.

Axtarışdan sonra: icazələr, chroot və sandbox

Düzgün baza qovluğu yenə də eyni mesajı verə bilər, çünki həll və giriş ayrı addımlardır. Proses hər valideyn qovluqda icra icazəsinə, faylda isə oxu icazəsinə ehtiyac duyur və fayl sisteminin bir hissəsini gizlədən xidmət uniti prosesin ümumiyyətlə nə görə biləcəyini dəyişir.

Üç ümumi variant eyni xətanı yaradır. Fayl yalnız root üçün oxunaqlıdır, xidmət isə onu açmazdan əvvəl imtiyazlardan imtina edir. Unit profil qovluğunu əhatə etməyən qoruyucu fayl sistemi görünüşü qurur. Daemon chroot ilə işləyir, buna görə hostda mövcud olan yol həmin görünüşün içində yoxdur.

Diaqnozu icazələri gevşətməklə deyil, faylın sahibliyi və prosesin kimliyi ilə qoyun. Bu xətanı susdurmaq üçün şəxsi açarı hamının oxuya bildiyi hala gətirmək uca səsi sakit səslə dəyişir və açar qovluğun ən az ifşa etmək istədiyiniz hissəsidir.

Düzəlişi sahibi olan işə salma ilə sübut edin

Həqiqi uniti profilə aid olmayan bir qovluqdan yenidən başladın və eyni başlanğıc sətrinə baxın. Sonra prosesin işləyərkən nəzərdə tutulan qovluğu tutduğunu və yüklədiyi sertifikatın gözlədiyiniz sertifikat olduğunu təsdiqləyin.

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

Yol yüklənməsi uğurlu olduqda autentifikasiya və marşrutlaşdırma hələ də öz uğursuzluqları olan ayrı mərhələlərdir və qurulan lakin heç bir trafik keçirməyən bağlantı başqa bir araşdırmadır. Buradakı düzəliş yalnız faylların hansı qovluqdan gəldiyinə aiddir və onu sonuncu dəfə əl ilə işə salanın yadda saxlaması əvəzinə çağırışda görünməlidir.

Profil konfiqurasiya meneceri ilə yerləşdirilirsə, baza qovluğunu və ya mütləq fayl adlarını orada da qeyd edin. Bir hostda əl ilə edilən düzəliş bu problemin növbəti yenidənqurmadan sonra qayıdan variantıdır.

Əlaqəli məqalələr