Linux VPN prosesinizə hansı imkanlar lazımdır?
İnterfeys quruluşu, marşrutlar, cihaz çıxışı və adi soketlər ayrı imtiyazlardır. CAP_NET_ADMIN verməzdən əvvəl uğursuz olan əməliyyatı adlandırın.
VPN demonu, adi proqramlar heç bir imtiyaz olmadan gedən soketləri açsa da, imtiyazlı şəbəkə əməliyyatlarına ehtiyac duyur. Bu boşluq ən çox imkan səhvlərinin başladığı yerdir: kimsə icazə xətası görür, bütün dəsti verir və xidmət sonradan heç kimin izah edə bilmədiyi səbəblərdən işləyir. Aşağıdakı gəzinti uğursuz əməliyyatdan başlayır, onu bir səlahiyyətə bağlayır və sonra prosesin həqiqətən içində işlədiyi konteksti yoxlayır. Məhdudiyyətsiz root kimi işləmək bəzi yerləşdirmələr üçün etibarlı cavabdır, lakin bu, defolt deyil, qərar olmalıdır.
Uğursuz əməliyyatdan başlayın
Dərsliyi oxumaqdan əvvəl xətanı oxuyun. İnterfeys dəyişikliyində «əməliyyata icazə verilmir», cihaz qovşağını açmaqdan imtina və aşağı portda bağlama uğursuzluğu — üç fərqli verilişlə üç fərqli problemdir. Proses başlayır və yalnız ilk marşrut dəyişikliyində uğursuz olursa, bu da interfeysin yaradılmasının artıq uğurlu olduğunu göstərir ki, bu cavabı xeyli daraldır.
Xidmət dayanmış halda xətanı təkrarlayın, sonra tətbiq icazə verirsə, onu eyni istifadəçi altında ön planda başladın. Gördüyünüz xəta təxmin etməli olduğunuz log sətrindən yaxşıdır və imkan problemi ilə SELinux və ya AppArmor imtinası arasındakı fərqi aşkar edir.
Hər əməliyyatı bir səlahiyyətə bağlayın
Cədvəl başlanğıc xəritəsidir, tətbiqin sənədlərinin əvəzi deyil:
| 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 |
Həmin cədvəldəki iki sətir insanların qarışdırdığı sətirlərdir. /dev/net/tun açmaq fayl icazəsi məsələsidir; açdığınızı konfiqurasiya etməyi nüvədən xahiş etmək imkan məsələsidir. CAP_NET_ADMIN vermək xidmət istifadəçinizin oxuya bilmədiyi cihaz qovşağını düzəltmir, qovşağı düzəltmək isə sizə marşrut səlahiyyəti vermir. Hər ikisini dəyişməzdən əvvəl yoxlayın.
Nüvə WireGuard ilə istifadəçi məkanı tunel proqramlarının tələbləri də eyni deyil. Nüvə modulu yolu mövcud interfeysi netlink vasitəsilə konfiqurasiya edir, istifadəçi məkanı tətbiqi isə cihaza və bəzi nəqliyyatlar üçün xam soketlərə də ehtiyac duya bilər.
Konteksti oxuyun: xidmət, konteyner və ya shell
Hostun şəbəkə ad məkanındakı bir imkan, qəsdən təcrid olunmuş yığımdakı eyni əməliyyatdan qat-qat çox təsir göstərə bilər. Konteyner işləmə mühiti adətən azaldılmış sərhəd dəsti ilə başlayır; host şəbəkəsini paylaşan konteynerə NET_ADMIN əlavə etmək, öz şəbəkə ad məkanı və host montajları olmayan birinə əlavə etməkdən qat-qat böyük bir verilişdir.
systemd vahidləri üçün vahid faylının göründüyü şeyi deyil, həqiqətən tətbiq olunanı oxuyun: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities effektiv dəyərləri göstərir və onlar unutduğunuz bir drop-in tərəfindən təyin edilə bilər. Həmişə effektiv dəyəri soruşun, nəzərdə tutulanı heç vaxt. Ambient imkanlar vacibdir, çünki root olmayan xidmət onlar olmadan exec boyunca imkanları itirir.
Paketin və ya obrazın dəstəklənən quruluşunu baza kimi götürün. Başqa bir dərslik onları başqa alət üçün sadaladığına görə xam soket icazələri və ya imtiyazlı rejim əlavə etməyin; bu məntiq heç nə köçürmür və ödədiyiniz təcridi sizə baha başa gəlir. Şübhə olduqda heç nə verməyin və ehtiyac duyduğunuz dəqiq əməliyyat üçün tətbiq qeydlərini oxuyun.
İmtiyazlar düşdükdən sonra nə baş verdiyinə baxın
Bir çox demon imtiyazlı başlayır, interfeysi konfiqurasiya edir, sonra imtiyazsız istifadəçiyə keçir və tuneli saxlayır. Bu nöqtədən sonra proses artıq marşrut əlavə edə, firewall qaydasını yenidən yaza və ya yeni imtiyazlı cihaz aça bilmir; bu, yenidən qoşulmanın məhz buna ehtiyac duyduğu ana qədər problem deyil. Sonrakı fayl oxunuşları və hook icrası eyni səbəbdən uğursuz ola bilər.
İlk saniyəni deyil, bütün həyat dövrünü sınayın: başlama, yeniləmə və ya yenidən qoşulma və dayanmada təmizləmə. İnterfeysin ilk dəfə uğurla yaradılması sonrakı bütün imtiyazlı əməliyyatların işləyəcəyini sübut etmir və uğursuzluq adətən istehsalda saatlar sonra ortaya çıxır.
Tuneli istifadəçi dəyişikliyi boyunca açıq saxlayan tətbiqlər bunu adətən tuneli və açarları saxlayan seçimlərlə birləşdirir. systemd tərəfində ekvivalent sual vahidin imkan dəstinin konfiqurasiya etdiyiniz istifadəçi dəyişikliyindən sağ çıxıb-çıxmamasıdır.
Verilişi və səbəbini qeyd edin
Dəqiq verilişi, onun imkan verdiyi əməliyyatı və düzəltdiyi xətanı yazın. Yerləşdirmə qeydlərində bir sətir — «vahidin şəbəkə ad məkanında CAP_NET_ADMIN, yenidən qoşulmadan sonra marşrut dəyişiklikləri üçün lazımdır» — növbəti şəxsin verilişi yenidən genişləndirməsinin qarşısını almaq üçün kifayətdir.
Sonra hər yeniləmədən sonra effektiv dəsti yenidən oxuyun. Satıcılar funksiyalar əlavə edir, obrazlar defoltları dəyişir və keçən il lazımsız olan bir imkan heç kim fərqinə varmadan daşıyıcı ola bilər.