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:

OperationUsual authorityWatch for
Create or configure tun/tapCAP_NET_ADMIN in the relevant namespaceCreating the device and opening it are separate steps
Add routes, rules, firewall entriesCAP_NET_ADMINSame capability, different namespace than you think
Open /dev/net/tunDevice permissions, not a capabilityGroup membership or a udev rule may be enough
Raw socketsCAP_NET_RAWNeeded by some user-space tunnel implementations
Bind a port below 1024CAP_NET_BIND_SERVICEIrrelevant 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.

İlgili makaleler