VPN süreciniz hangi Linux yeteneklerine ihtiyaç duyar?
Arayüz kurulumu, rotalar, aygıt erişimi ve sıradan soketler ayrı ayrıcalıklardır. CAP_NET_ADMIN vermeden önce başarısız olan işlemi adlandırın.
Bir VPN arka plan programı ayrıcalıklı ağ işlemlerine ihtiyaç duyar, oysa sıradan uygulamalar giden soketleri hiçbir ayrıcalık olmadan açar. Çoğu yetenek hatası tam da bu boşlukta başlar: biri izin hatası görür, tüm kümeyi verir ve hizmet kimsenin sonradan açıklayamayacağı nedenlerle çalışır. Aşağıdaki yürüyüş başarısız olan işlemden başlar, onu tek bir yetkiye bağlar ve ardından sürecin gerçekte çalıştığı bağlamı denetler. Kısıtsız root olarak çalışmak bazı dağıtımlar için geçerli bir yanıttır, ancak bu bir varsayılan değil karar olmalıdır.
Başarısız olan işlemden başlayın
Bir öğretici okumadan önce hatayı okuyun. Arayüz değişiminde «işleme izin verilmiyor», aygıt düğümünü açmayı reddetme ve düşük bir bağlantı noktasında bind hatası, üç farklı izin gerektiren üç farklı sorundur. Süreç başlar ve yalnızca ilk rota değişiminde başarısız olursa, bu arayüz oluşturmanın zaten başarılı olduğunu da söyler; bu da yanıtı epeyce daraltır.
Hizmet durdurulmuşken hatayı yeniden üretin, ardından uygulama izin veriyorsa aynı kullanıcı altında ön planda başlatın. Görebildiğiniz bir hata, tahmin etmeniz gereken bir günlük satırından iyidir ve yetenek sorunu ile SELinux veya AppArmor reddi arasındaki farkı belirginleştirir.
Her işlemi tek bir yetkiye bağlayın
Tablo bir başlangıç haritasıdır, uygulamanın belgelerinin yerine geçmez:
| Operation | Usual authority | Watch for |
|---|---|---|
| Create or configure tun/tap | CAP_NET_ADMIN in the relevant namespace | Creating the device and opening it are separate steps |
| Add routes, rules, firewall entries | CAP_NET_ADMIN | Same capability, different namespace than you think |
| Open /dev/net/tun | Device permissions, not a capability | Group membership or a udev rule may be enough |
| Raw sockets | CAP_NET_RAW | Needed by some user-space tunnel implementations |
| Bind a port below 1024 | CAP_NET_BIND_SERVICE | Irrelevant for most modern tunnel ports |
O tablodaki iki satır, insanların birbirine karıştırdığı satırlardır. /dev/net/tun açmak bir dosya izni sorunudur; çekirdekten açtığınız şeyi yapılandırmasını istemek bir yetenek sorunudur. CAP_NET_ADMIN vermek, hizmet kullanıcınızın okuyamadığı bir aygıt düğümünü düzeltmez ve düğümü düzeltmek size rota yetkisi vermez. Herhangi birini değiştirmeden önce ikisini de denetleyin.
Çekirdekteki WireGuard ile kullanıcı alanındaki tünel programları da aynı gereksinimlere sahip değildir. Çekirdek modülü yolu mevcut bir arayüzü netlink üzerinden yapılandırırken, kullanıcı alanındaki bir uygulama aygıta ve bazı taşımalar için ham soketlere de ihtiyaç duyabilir.
Bağlamı okuyun: hizmet, konteyner veya kabuk
Ana makinenin ağ ad alanındaki bir yetenek, kasıtlı olarak yalıtılmış bir yığındaki aynı işlemden çok daha fazlasını etkileyebilir. Konteyner çalışma ortamı genellikle azaltılmış bir sınır kümesiyle başlar; ana makinenin ağını paylaşan bir konteynere NET_ADMIN eklemek, kendi ağ ad alanı olan ve ana makine bağlamaları bulunmayan bir konteynere eklemekten çok daha büyük bir izindir.
systemd birimleri için birim dosyasının söylediği gibi görüneni değil, gerçekte uygulananı okuyun: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities etkin değerleri bildirir ve bunlar unuttuğunuz bir drop-in tarafından ayarlanmış olabilir. Etkin değeri sorun, asla amaçlananı sormayın. Ambient yetenekler önemlidir çünkü root olmayan bir hizmet bunlar olmadan exec boyunca yeteneklerini kaybeder.
Paketin veya imajın desteklenen kurulumunu temel alın. Başka bir öğretici bunları başka bir araç için listeledi diye ham soket izinleri veya ayrıcalıklı mod eklemeyin; bu akıl yürütme hiçbir şey aktarmaz ve ödediğiniz yalıtımı size kaybettirir. Şüphedeyseniz hiçbir şey vermeyin ve ihtiyaç duyduğunuz tam işlem için uygulamanın notlarını okuyun.
Ayrıcalıklar düştükten sonra ne olduğunu izleyin
Birçok arka plan programı ayrıcalıklı başlar, arayüzü yapılandırır, sonra ayrıcalıksız bir kullanıcıya geçer ve tüneli korur. Bu noktadan sonra süreç artık rota ekleyemez, güvenlik duvarı kuralını yeniden yazamaz veya yeni bir ayrıcalıklı aygıt açamaz; bu, yeniden bağlanma tam olarak buna ihtiyaç duyana kadar sorun değildir. Sonraki dosya okumaları ve kanca çalıştırmaları aynı nedenle başarısız olabilir.
İlk saniyeyi değil tüm yaşam döngüsünü test edin: başlangıç, yenileme veya yeniden bağlanma ve durdururken temizlik. İlk başarılı arayüz oluşturma, sonraki her ayrıcalıklı işlemin çalışmaya devam edeceğini kanıtlamaz ve hata genellikle saatler sonra üretimde ortaya çıkar.
Tüneli kullanıcı değişimi boyunca açık tutan uygulamalar bunu genellikle tüneli ve anahtarları koruma seçenekleriyle eşleştirir. systemd tarafında eşdeğer soru, birimin yetenek kümesinin yapılandırdığınız kullanıcı değişimini atlatıp atlatmadığıdır.
Verilen izni ve gerekçesini kaydedin
Tam izni, etkinleştirdiği işlemi ve düzelttiği hatayı yazın. Dağıtım notlarındaki tek bir satır — «birimin ağ ad alanında CAP_NET_ADMIN, yeniden bağlanmadan sonra rota değişiklikleri için gerekli» — bir sonraki kişinin izni yeniden genişletmesini önlemeye yeter.
Sonra her yükseltmeden sonra etkin kümeyi yeniden okuyun. Satıcılar özellik ekler, imajlar varsayılanları değiştirir ve geçen yıl gereksiz olan bir yetenek kimse fark etmeden taşıyıcı hale gelebilir.