status=200/CHDIR: systemd OpenVPN'i hiç başlatmadı
CHDIR hatası, systemd'nin bir dizine giremediği anlamına gelir; OpenVPN'in bir profili okuyamadığı değil. VPN yapılandırmasına dokunmadan önce unit'i okuyun.
Hizmet başarısız oluyor, günlükler bir spawn ve bir dizinden söz ediyor ve ilk dürtü VPN yapılandırmasını denetlemek oluyor. O dosyada henüz hiçbir şey okunmadı. systemd, süreci hazırlarken, çalıştırılabilir dosya çalışmadan önce başarısız oldu; yani hiçbir ayrıştırıcı, hiçbir sertifika ve hiçbir uzak ana makine danışılmadı. Durum kodunu OpenVPN hakkında değil de systemd hakkında bir ifade olarak okumak, bunu kısa bir incelemeye dönüştüren şeydir.
Durum kodunu uygulamadan önce okuyun
Hizmet adından sonraki sayısal kod, başarısız olan aşamayı adlandırır. Dizin hatası CHDIR durumu olarak bildirilirken, çalıştırılamayan bir çalıştırılabilir dosya tamamen başka bir koddur. İkisi bir özet satırında benzer görünür ve nedenlerinde hiçbir ortaklık yoktur.
Bu ayrım önemlidir çünkü düzeltmeler farklı dosyalardadır. CHDIR hatası bir yol ve hizmetin onu görme biçimiyle ilgilidir. Exec hatası ikili dosya, yorumlayıcısı veya ilgisiz bir bağlama noktasıyla ilgilidir. VPN uzak noktasını, şifre listesini veya sertifika yolunu değiştirmek ikisini de çözmez.
Hatanın başarılı bir çalıştırmadan sonra değil, başlangıçta olduğunu doğrulayın. Hizmet dün çalışıyordu ve şimdi aynı aşamada başarısız oluyorsa dizinde, izinlerinde veya unit'in kendisinde bir şey değişmiştir ve aranacak kanıt o değişikliktir.
Unit'e nerede olmak istediğini sorun
Kurulu olduğunu düşündüğünüz dosyayı değil, etkin unit'i okuyun; çünkü drop-in dosyaları ana unit'i hiç düzenlemeden çalışma dizinini geçersiz kılabilir. Show çıktısı soruyu doğrudan yanıtlar:
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 sunucu şablonu için çalışma dizini sunucu yapılandırma dizinidir ve örnek adı içindeki profili seçer. Branch adlı bir örnek bu nedenle kendi dosyasını aynı dizinde bekler ve başka bir yere yerleştirilmiş bir profil çalışma dizini koşulunu hiç karşılamaz.
Unit'in istediğini var olanla karşılaştırın. Daha önce var olan bir yol, artık başka bir yeri gösteren bir sembolik bağlantı veya artık bir dizinle eşleşmeyen bir örnek adı, tam olarak bu hatayı üreten olağan değişikliklerdir.
Yolu hizmetin gördüğü gibi denetleyin
Kabuğunuz ve hizmet aynı dosya sistemi görünümünü paylaşmaz. Yapılandırılmış bir kök dizin veya root image, unit içinde mutlak bir yolun ne anlama geldiğini değiştirir ve ana makinede açıkça var olan bir yol o ad alanında eksik olabilir. Elle bir testi güvenmeden önce unit'in ayarlarını okuyun.
İzinler sorunu ağırlaştırır. Hizmet belirli bir kullanıcı olarak çalışır ve bu kullanıcı hedefe ulaşmak için her üst dizini geçebilmelidir, yalnızca hedefin kendisini okuyabilmesi yetmez. Root tarafından okunabilen ancak hizmet kullanıcısı tarafından geçilemeyen bir dizin, eksik yol gibi görünen bir hata üretir.
namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths
Sertleştirme ayarları da bu tablonun parçasıdır. Ev dizinlerini gizleyen veya dosya sisteminin bir bölümünü salt okunur yapan bir unit, yapılandırıldığı şeyi tam olarak yapar ve çalışma dizini sandbox'ın hâlâ açığa çıkardığı bir yerde olmalıdır.
Sahibini düzeltin, sonra başka bir hata bekleyin
Düzeni veya unit'i o yapılandırmaya sahip olan aracılığıyla düzeltin. Düzen yanlış olduğunda profili beklenen dizine taşımak meşru bir düzeltmedir, ancak girilemeyen bir dizini açıklamaz, bu yüzden bunu genel yanıt olarak görmeyin.
Yapılandırma ağacında izinleri genişletme veya sandbox'ı kaldırma kısayoluna direnin. İkisi de semptomu ortadan kaldırırken oraya bilinçli olarak konmuş korumaları kaldırır ve bir sonraki hatayı yorumlamak daha zor olur.
Örneği yeniden başlatın ve başarıyı varsaymak yerine bir sonraki olayı okuyun. Muhtemel sonraki hata OpenVPN'in yapılandırma dosyasını açamamasıdır; bu bir ilerlemedir: çalışma dizinine girildi ve ayrıştırıcı artık çalışıyor. Oradan unit'in gerçek dosya eşlemesini izleyin, ağ sorun gidermeye dönmeyin.
systemd yürütme başvurusu, çalışma dizininin kök dizinler ve sandbox ile birlikte nasıl yorumlandığını tanımlar. Hatırlanacak desen basittir: her durum kodu farklı bir aşamayı adlandırır ve yalnızca uygulamanın kendi hataları uygulamayı tanımlar.