VPN demoni imtiyozli tarmoq amallarini talab qiladi, garchi oddiy ilovalar hech qanday imtiyozsiz chiquvchi soketlarni ochsa ham. Aynan shu bo’shliqda imkoniyat xatolarining ko’pchiligi boshlanadi: kimdir ruxsat xatosini ko’rib, butun to’plamni beradi va xizmat keyin hech kim tushuntira olmaydigan sabablarga ko’ra ishlaydi. Quyidagi yo’riqnoma muvaffaqiyatsiz bo’lgan amaldan boshlanadi, uni bitta vakolat bilan bog’laydi, so’ngra jarayon haqiqatda ishlayotgan kontekstni tekshiradi. Cheklanmagan root sifatida ishlash ba’zi joylashtirishlar uchun to’g’ri javob, lekin bu standart qiymat emas, qaror bo’lishi kerak.

Muvaffaqiyatsiz bo’lgan amaldan boshlang

Qo’llanmani o’qishdan oldin xatoni o’qing. Interfeysni o’zgartirishda «amalga ruxsat yo’q», qurilma tugunini ochishdan bosh tortish va past portga bog’lashning muvaffaqiyatsizligi — uch xil ruxsat talab qiladigan uch xil muammo. Agar jarayon ishga tushib, faqat birinchi marshrut o’zgarishida muvaffaqiyatsiz bo’lsa, bu interfeys yaratilishi allaqachon muvaffaqiyatli bo’lganini bildiradi, bu esa javobni ancha toraytiradi.

Xizmat to’xtatilgan holatda xatoni qayta hosil qiling, so’ngra ilova ruxsat bersa, uni o’sha foydalanuvchi ostida oldingi planda ishga tushiring. Siz ko’radigan xato taxmin qilish kerak bo’lgan jurnal satridan yaxshiroq va imkoniyat muammosi bilan SELinux yoki AppArmor rad etishi orasidagi farqni aniq ko’rsatadi.

Har bir amalni bitta vakolat bilan bog’lang

Jadval — boshlang’ich xarita, ilovaning hujjatlarining o’rnini bosmaydi:

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’sha jadvaldagi ikki qator — odamlar bir-biriga aralashtirib yuboradigan qatorlar. /dev/net/tun ochish fayl ruxsati masalasi; ochgan narsangizni sozlashni yadrodan so’rash imkoniyat masalasi. CAP_NET_ADMIN berish xizmat foydalanuvchingiz o’qiy olmaydigan qurilma tugunini tuzatmaydi, tugunni tuzatish esa sizga marshrut vakolatini bermaydi. Ikkalasini ham o’zgartirishdan oldin ikkalasini tekshiring.

Yadrodagi WireGuard va foydalanuvchi fazosidagi tunnel dasturlari ham bir xil talablarga ega emas. Yadro moduli yo’li mavjud interfeysni netlink orqali sozlaydi, foydalanuvchi fazosidagi ilova esa qurilma va ayrim transportlar uchun xom soketlarni ham talab qilishi mumkin.

Kontekstni o’qing: xizmat, konteyner yoki shell

Xostning tarmoq nomlar fazosidagi imkoniyat ataylab ajratilgan stekdagi o’sha amaldan ancha ko’proq ta’sir qilishi mumkin. Konteyner ish muhiti odatda qisqartirilgan chegara to’plami bilan boshlanadi; xost tarmog’ini baham ko’radigan konteynerga NET_ADMIN qo’shish o’z tarmoq nomlar fazosi va xost mountlari bo’lmagan konteynerga qo’shishdan ancha katta ruxsat.

systemd birliklari uchun birlik fayli aytayotgandek ko’rinadiganini emas, haqiqatda qo’llaniladiganini o’qing: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities samarali qiymatlarni xabar qiladi, ular siz unutgan drop-in tomonidan o’rnatilgan bo’lishi mumkin. Samarali qiymatni so’rang, hech qachon ko’zda tutilganini emas. Ambient imkoniyatlar muhim, chunki root bo’lmagan xizmat ularsiz exec davomida imkoniyatlarni yo’qotadi.

Paket yoki obrazning qo’llab-quvvatlanadigan sozlamasini asos qilib oling. Boshqa qo’llanma ularni boshqa vosita uchun sanab o’tgani uchun xom soket ruxsatlari yoki imtiyozli rejimni qo’shmang; bu mulohaza hech narsani ko’chirmaydi va siz to’lagan izolyatsiyani yo’qotadi. Shubha bo’lsa, hech narsa bermang va kerakli aniq amal uchun ilova eslatmalarini o’qing.

Imtiyozlar tushganidan keyin nima bo’lishini kuzating

Ko’p demonlar imtiyoz bilan boshlanadi, interfeysni sozlaydi, so’ngra imtiyozsiz foydalanuvchiga o’tadi va tunneldan ushlab turadi. Shu daqiqadan boshlab jarayon marshrut qo’sha olmaydi, xavfsizlik devori qoidasini qayta yozolmaydi yoki yangi imtiyozli qurilma ocholmaydi; bu qayta ulanish aynan shunga muhtoj bo’lmaguncha muammo emas. Keyinchalik fayl o’qish va hook ishga tushirish xuddi shu sabab bilan muvaffaqiyatsiz bo’lishi mumkin.

Birinchi soniyani emas, butun hayot siklini sinang: ishga tushish, yangilanish yoki qayta ulanish va to’xtatishda tozalash. Interfeysning birinchi muvaffaqiyatli yaratilishi keyingi har bir imtiyozli amal ishlashda davom etishini isbotlamaydi va nosozlik odatda ishlab chiqarishda soatlardan keyin namoyon bo’ladi.

Tunnelni foydalanuvchi almashinuvi bo’ylab ochiq ushlab turadigan ilovalar odatda buni tunnel va kalitlarni saqlash variantlari bilan birlashtiradi. systemd tomonida ekvivalent savol — birlikning imkoniyatlar to’plami siz sozlagan foydalanuvchi almashinuvidan omon o’tadimi.

Berilgan ruxsat va uning sababini yozib qo’ying

Aniq ruxsatni, u imkon beradigan amalni va u tuzatgan xatoni yozing. Joylashtirish eslatmalaridagi bir satr — «birlikning tarmoq nomlar fazosidagi CAP_NET_ADMIN, qayta ulanishdan keyingi marshrut o’zgarishlari uchun kerak» — keyingi odam ruxsatni yana kengaytirishining oldini olishga yetadi.

So’ngra har bir yangilanishdan keyin samarali to’plamni qayta o’qing. Yetkazib beruvchilar funksiyalar qo’shadi, obrazlar standart qiymatlarni o’zgartiradi va o’tgan yili keraksiz bo’lgan imkoniyat hech kim sezmay turib tayanchga aylanishi mumkin.

O'xshash maqolalar