OpenVPN'de script-security seviyeleri 0'dan 3'e ve her birinin açtıkları
Her script-security seviyesi bir profilin yürütebileceğini genişletir: önce yönetim yardımcıları, sonra kullanıcı betikleri, en sonunda ortamdaki parolalar. Yönergeleri okuyun.
Bir profili masaüstü istemcisine aktarın ve ilk hata çoğu zaman istemcinin uymayı reddettiği bir satırdır: çalıştırmayacağı bir betik kancası ya da fazla izin verici bulduğu bir script-security değeri. Sayıyı yükseltmek iletişim kutusunu ortadan kaldırır. Ama aynı zamanda o profilin makinenizde neleri yürütebileceğini de genişletir; bunu yalnızca bir uyarıyı kapatmak için vermek tuhaf. Aktarımı yönergeye kadar izleyin ve karar somutlaşır.
Aktarım iletişim kutusundan yönergeye
Profil, yönergeler içeren bir metin dosyasıdır ve istemci bunları herhangi bir tünel oluşmadan önce okur. up, down veya tls-verify gibi bir yönerge, OpenVPN tarafından belirli bir anda çalıştırılması gereken harici bir programı adlandırır. OpenVPN'in bunu çalıştırmaya istekli olup olmadığı script-security adlı ayrı bir ayardır ve profil genellikle onu da belirler.
Yani uyarı kriptografi veya sertifikalarla ilgili değil. Bir yapılandırma dosyasının istemciden ana makinede bir şey yürütmesini istemesi ve istemcinin mevcut izin düzeyinin bu isteğe izin verip vermediğini denetlemesiyle ilgili.
Bu aşamada iki farklı başarısızlık benzer görünür. İstemcinin vermeyeceği bir düzey isteyen profil bir ret üretir. İstemcinin verdiği ancak betiğin eksik olduğu düzeyi isteyen profil ise bunun yerine çalışma zamanı hatası üretir ve ikisi destek tartışmalarında karıştırılır. Biri izin sorusudur, diğeri paketleme sorusu.
Her düzey gerçekte neyi açar
Düzey 0 harici program çağrılarını tamamen yasaklar; bu, arayüzünü yardımsız kendi yapılandıran bir istemci için tutarlı, işletim sistemine başvuran için tutarsızdır. Düzey 1, varsayılan, arayüz ve yol yapılandırmasının ihtiyaç duyduğu yerleşik çalıştırılabilir dosyalara izin verir. İki düzey de kullanıcının sağladığı hiçbir şeyi çalıştırmaz.
| Level | What OpenVPN may execute | What it exposes |
|---|---|---|
| 0 | No external programs at all | Interface and route setup must not depend on helpers |
| 1 (default) | Built-in helpers such as ip, ifconfig, route or netsh | Privileged commands the platform already ships |
| 2 | Built-in helpers plus user-defined scripts | Whatever the named script does with the client's privileges |
| 3 | Everything above, plus passwords in environment variables | Credentials visible to child processes and their logs |
Düzey 2 ilginç sınırdır, çünkü kullanıcı tanımlı betiklere izin verir. O noktadan itibaren istemcinin ayrıcalıkları, hiç okumadığınız bir koda uygulanır; seçmediğiniz anlarda çağrılır, bağlantı ayrıntılarını içeren bir ortamda çalışır. Düzey 3 daha ileri gider ve parolaların ortam değişkenleriyle geçirilmesine izin verir; bu yüzden kılavuz onu potansiyel olarak güvensiz diye tanımlar.
Bu sayıların hiçbiri güç ayarı değildir. Düzey 3'teki bir profilin şifrelemesi düzey 1'dekinden iyi değildir; yalnızca daha büyük bir yürütme yüzeyi vardır ve tünel aynıdır.
Profilin neyi hak ettiğine karar verin
Betiğin hangi düzeyi gerektirdiğini sormadan önce ne için olduğunu sorun. DNS ayarlarını iten ya da bağlantıdan sonra bir yolu onaran kanca bir şey çalıştırmak için meşru bir nedendir. Geçici bir dizinde tanınmayan bir ikili dosyayı çağıran kanca durmak için bir nedendir.
Betiğin yolu betik kadar önemlidir. Göreli bir yol istemcinin kullandığı dizine göre çözülür ve yazılabilir bir dizin tek seferlik aktarımı kalıcı bir yürütme yuvasına dönüştürür. Kullanıcının değiştiremeyeceği bir dizindeki mutlak yollar tercih edilmesi gereken biçimdir.
Betikler istemcinin ortamını da devralır; kimlik bilgileri ve bağlantı üst verileri orada yaşar. Tam da bu devralma, düzey 3'ü kendi ortamını günlüğe yazan bir betikle birleştiğinde tehlikeli kılar ve bu yüzden betikleri etkin bir istemciden alınan tanılama dökümü bir bilete yapıştırılmadan önce ikinci bir bakışı hak eder. Paylaşmadan önce ortamı temizleyin.
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnTek bir şeyi değiştirin, sonra sökülmeyi de izleyin
Profil gerçekten bir betiğe ihtiyaç duyuyorsa yalnızca düzeyi ve yalnızca o profil için değiştirin. İstemciyi ön planda ayrıntılı çıktıyla çalıştırın ki betiğin kendi hataları görünsün, hizmet yöneticisi tarafından yutulmasın.
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
Yalnızca bağlantıyı değil tüm yaşam döngüsünü sınayın. Başarısız bir kapanış kancası yolları ölü bir tünele yöneltilmiş bırakır; bu da bağlı görünen ama hiçbir yere ulaşamayan bir makine üretir. Değişikliği bitmiş ilan etmeden önce bir kez yeniden bağlanın ve bir kez bağlantıyı kesin, her birinden sonra yönlendirme tablosunu denetleyin.
Özgün profilin bir kopyasını saklayın. Bir platform istemcisi aynı betik modelini uygulamıyorsa, aktarım başarılı olana kadar yönergeleri silmek tünelin ihtiyaç duyduğu DNS veya yol entegrasyonunu kaldırabilir ve ortaya çıkan bağlantı kusursuz kimlik doğrular ama hiçbir şeyi çözmez.
Kaydedilmesi gereken karar dardır: hangi betik, hangi yolda, hangi düzeyde verildi, hangi profil için. Profildeki her şey değişmeden kalır ve bu, bir gözden geçirenin denetleyebileceği bir cümledir.