Yeni konteyner günlükleri çoğu zaman /proc/sys/net/ipv4/route/flush hakkında bir Read-only file system şikâyetiyle biter ve o satır, tamamen sağlıklı olabilecek bir tünelin suçlusu sayılır. Arkasındaki yazma, IPv4 rota önbelleği gittiğine göre artık yararlı bir şey yapmayan bir çekirdek girdisini hedefler. Bir konteynerin içinde /proc/sys salt okunur olarak bağlanır, bu yüzden herhangi bir değer yerine oturmadan yönlendirme reddedilir ve kabuk bu reddi yazdırır. Çalışan bir tünel, eski satır betikte kaldığı sürece bu uyarıyı yazdırabilir ve --privileged yazmayı hiçbir zaman anlamlı kılmaz.

Betik neyi temizlemeye çalışıyordu

Daha eski bağlantı betikleri bir önbellek temizliğiyle bitiyordu: bir çekirdek denetim dosyasına değer yazmak ve IPv4 yığınından yönlendirme önbelleğini bırakmasını istemek, böylece yeni bir tünel rotası eski girdilerin süresinin dolmasını beklemeden seçilecekti. Dosya /proc/sys/net/ipv4/ altında adresleniyordu, bu da işlemi bir yönlendirme komutu değil kabuk yönlendirmesi yapıyordu. Çekirdek 3.6 bu önbelleği kaldırdı ve onunla birlikte temizliğin var olma nedenini de kaldırdı. Geçerli veri yolunda hiçbir şey o yazmaya bağlı değil.

Girdinin kendisi eski bir salt yazılır dosya olarak hayatta kaldı, bu yüzden hâlâ ona yazan bir betik gerçek bir yola ve gerçek bir izin denetimine ulaşır. Bir ana makinede yazma başarı döndürür ve hiçbir şeyi değiştirmez. Bir konteynerde aynı yönlendirme salt okunur bir /proc/sys ile karşılaşır ve EROFS ile başarısız olur; kabuk bunu salt okunur dosya sistemi iletisi olarak yazdırır. Yolun gerçekten bulunmadığı çekirdeklerde ifade No such file or directory olur ve sonuç değişmez.

İki hata farklı şeyler söyler ve farkı açık tutmakta yarar var. Read-only file system çekirdeğin bir girdiye ulaşıp yazmayı reddettiği anlamına gelir; No such file or directory girdinin gittiği anlamına gelir. Hiçbir ileti tünel aygıtı, rotalar veya ad çözümlemesi hakkında bilgi vermez, bu yüzden hiçbiri daha fazla ayrıcalığı gerekçelendiremez.

İletinin nedensel görünmesini sağlayan şey sıradır. Bir bağlantı betiği sona yakın temizliğe ulaşmadan önce rotaları kurar, arayüz durumunu değiştirir ve ad çözümlemesini yeniden yazar, bu yüzden en son yazdırılan satır, önemli her adım başarı döndürse bile insanların alıntıladığı satırdır. Bu uyarıyı yazdırırken kurulan ve trafik taşıyan bir tünel yukarıdaki mekanizmaya tam olarak uyar.

Ayrıcalık eklemeden önce bağlamayı ve rotayı denetleyin

Üç okuma, kozmetik bir uyarıyı gerçek bir arızadan ayırır: kurulu betik satırı hâlâ taşıyor mu, /proc/sys nasıl bağlanmış ve uygulamanın trafiği gerçekte nereye gidiyor. Bunları uyarının göründüğü aynı konteyner ad alanında veya ana makinede çalıştırın, çünkü ilgisiz bir makinedeki denetim başka bir soruyu yanıtlar.

grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10

grep yanıtı göründüğünden zayıftır, çünkü bir eşleşme satırın var olduğunu kanıtlar, korumasız çalıştığını değil; bakımlı bir betik yazmayı onu atlayan bir korumanın içinde taşıyabilir. findmnt -no OPTIONS /proc/sys bağlamayı doğrudan çözer ve o çıktıdaki ro, o noktanın altındaki her yazmanın betik ne yaparsa yapsın reddedildiği anlamına gelir. Ardından rota araması, uygulamanın gereksinim duyduğu hedefin tünel arayüzü üzerinden mi yoksa konteynerin varsayılan ağ geçidi üzerinden mi çözüldüğünü gösterir. Varsayılan ağ geçidini seçen bir arama, tünelin kalktığını ve içine hiçbir şeyin yönlendirilmediğini gösterir; bu bir yönlendirme sorunudur, ayrıcalık sorunu değildir.

Düzeltme gerçekte nereden gelir

Bakımlı düzeltme konteyner bayraklarında değil, betikte yaşar. upstream vpnc-script bu işlemi nasıl ele aldığını değiştirdi, bu yüzden imgenin içindeki kopyayı güncel upstream ile karşılaştırın ve onu sağlayan paket veya imge derlemesi üzerinden güncelleyin. Çalışan bir konteynerin içinde elle düzenlenen bir dosya gözden geçirilemez ve sonraki derlemeyi atlatamaz.

--privileged tüm yetenekleri ve geniş aygıt erişimini verdiği belgelenmiştir; hiçbir şeyi değiştirmeyen bir ileti için bu büyük bir tavizdir, bu yüzden gerçekten eksik bir yetenek varsa onu adlandırın. Güncellemeden sonra rota aramasını yineleyin ve bir uygulamanın tüneli kullanmasına izin verin, çünkü sessiz bir günlük ve çalışan bir bağlantı ayrı sonuçlardır.

İlgili makaleler