Kādas Linux iespējas nepieciešamas jūsu VPN procesam?
Saskarnes iestatīšana, maršruti, piekļuve ierīcēm un parastie ligzdas ir atsevišķas privilēģijas. Nosauciet neizdevušos darbību pirms CAP_NET_ADMIN piešķiršanas.
VPN dēmonam ir vajadzīgas priviliģētas tīkla darbības, lai gan parastas lietotnes atver izejošās ligzdas bez jebkādām privilēģijām. Tieši šajā plaisā sākas lielākā daļa iespēju kļūdu: kāds ierauga atļauju kļūdu, piešķir visu kopumu, un pakalpojums darbojas tādu iemeslu dēļ, kurus vēlāk neviens nevar izskaidrot. Tālāk sniegtais ceļvedis sākas ar neizdevušos darbību, saista to ar vienu pilnvaru un pēc tam pārbauda kontekstu, kurā process faktiski darbojas. Darbošanās kā neierobežotam root ir derīga atbilde dažiem izvietojumiem, bet tam jābūt lēmumam, nevis noklusējuma vērtībai.
Sāciet ar neizdevušos darbību
Izlasiet kļūdu, pirms lasāt pamācību. «Darbība nav atļauta» saskarnes maiņas laikā, atteikšanās atvērt ierīces mezglu un bind kļūda zemā portā ir trīs dažādas problēmas ar trim dažādām atļaujām. Ja process startē un neizdodas tikai pirmajā maršruta maiņā, tas arī nozīmē, ka saskarnes izveide jau ir izdevusies, kas ievērojami sašaurina atbildi.
Atkārtojiet kļūdu ar apturētu pakalpojumu, pēc tam palaidiet to priekšplānā ar to pašu lietotāju, ja ieviešana to atļauj. Kļūda, ko redzat, ir labāka par žurnāla rindu, kas jāuzmin, un tā skaidri parāda atšķirību starp iespēju problēmu un SELinux vai AppArmor atteikumu.
Saistiet katru darbību ar vienu pilnvaru
Tabula ir sākuma karte, nevis ieviešanas dokumentācijas aizstājējs:
| 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 |
Divas rindas šajā tabulā ir tās, ko cilvēki sajauc. /dev/net/tun atvēršana ir faila atļauju jautājums; lūgšana kodolam konfigurēt to, ko atvērāt, ir iespēju jautājums. CAP_NET_ADMIN piešķiršana nesalabo ierīces mezglu, ko jūsu pakalpojuma lietotājs nevar nolasīt, un mezgla salabošana nedod jums maršruta pilnvaru. Pārbaudiet abus, pirms maināt jebkuru.
Kodola WireGuard un lietotāja telpas tuneļu programmām arī nav identisku prasību. Kodola moduļa ceļš konfigurē esošu saskarni caur netlink, savukārt lietotāja telpas ieviešanai var būt vajadzīga arī ierīce un dažiem transportiem neapstrādātas ligzdas.
Izlasiet kontekstu: pakalpojums, konteiners vai čaula
Iespēja resursdatora tīkla nosaukumtelpā var ietekmēt daudz vairāk nekā tā pati darbība apzināti izolētā steksā. Konteineru izpildes vide parasti sākas ar samazinātu robežu kopumu; NET_ADMIN pievienošana konteineram, kas dala resursdatora tīklu, ir daudz lielāka atļauja nekā pievienošana konteineram ar savu tīkla nosaukumtelpu un bez resursdatora montējumiem.
Systemd vienībām lasiet, kas faktiski tiek piemērots, nevis ko vienības fails šķietami saka: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities ziņo efektīvās vērtības, ko var būt iestatījis aizmirsts drop-in. Prasiet efektīvo vērtību, nekad — paredzēto. Ambient iespējas ir svarīgas, jo pakalpojums, kas nav root, tās zaudē caur exec bez tām.
Par pamatu ņemiet pakotnes vai attēla atbalstīto iestatījumu. Nepievienojiet neapstrādātu ligzdu atļaujas vai priviliģētu režīmu tikai tāpēc, ka cita pamācība tās uzskaitīja citam rīkam; šī argumentācija neko nepārnes un izmaksā jums samaksāto izolāciju. Šaubu gadījumā nepiešķiriet neko un izlasiet ieviešanas piezīmes par precīzo darbību, kas jums nepieciešama.
Vērojiet, kas notiek pēc privilēģiju krituma
Daudzi dēmoni sāk ar privilēģijām, konfigurē saskarni, pēc tam pāriet uz lietotāju bez privilēģijām un saglabā tuneli. No šī brīža process vairs nevar pievienot maršrutu, pārrakstīt ugunsmūra noteikumu vai atvērt jaunu priviliģētu ierīci, kas ir kārtībā, līdz atkārtots savienojums pieprasa tieši to. Vēlāka failu lasīšana un āķu izpilde var neizdoties tā paša iemesla dēļ.
Pārbaudiet visu dzīves ciklu, nevis pirmo sekundi: palaišanu, atjaunošanu vai atkārtotu savienojumu un tīrīšanu apturot. Pirmā veiksmīgā saskarnes izveide nepierāda, ka katra vēlākā priviliģētā darbība joprojām strādās, un kļūda parasti parādās stundas vēlāk produkcijā.
Ieviešanas, kas saglabā tuneli atvērtu lietotāja maiņas laikā, to parasti apvieno ar iespējām saglabāt tuneli un atslēgas. Systemd pusē līdzvērtīgs jautājums ir, vai vienības iespēju kopa pārdzīvo jūsu konfigurēto lietotāja maiņu.
Pierakstiet piešķirto atļauju un tās iemeslu
Pierakstiet precīzo atļauju, darbību, ko tā ļauj, un kļūdu, ko tā novērsa. Viena rinda izvietošanas piezīmēs — «CAP_NET_ADMIN vienības tīkla nosaukumtelpā, nepieciešams maršrutu izmaiņām pēc atkārtota savienojuma» — ir pietiekama, lai nākamais cilvēks atkal nepaplašinātu atļauju.
Pēc tam pēc katra jauninājuma vēlreiz izlasiet efektīvo kopu. Piegādātāji pievieno funkcijas, attēli maina noklusējuma vērtības, un iespēja, kas pērn bija lieka, var kļūt nesoša, nevienam nepamanot.