Parasta Linux lietotne lieto VPN, neaiztiekot TUN
Dēmons pārvalda TUN ierīci un tuneli; lietotnes tikai atver ligzdas. Saglabājiet iestatīšanas privilēģiju un tīkla piekļuvi kā atsevišķas robežas.
Pārlūks, kas izmanto jau izveidotu Linux VPN, neatver /dev/net/tun. Tas atver ligzdu, un kodols izlemj, pa kuru saskarni iziet šīs ligzdas paketes. Process, kas izveidoja tuneli, veic citu darbu nekā process, kura trafiku tas pārvadā. Šo divu lomu atdalīšana atbild uz lielāko daļu atļauju jautājumu, pirms tie tiek uzdoti.
Izseko vienu paketi no ligzdas līdz tunelim
Parasta lietotne izsauc connect vai send, un kodols meklē maršrutu uz galamērķi. Ja izvēlētais maršruts norāda uz tuneļa saskarni, pakete tiek ievietota rindā ierīcē, kuru lasa VPN dēmons. Dēmons to šifrē un izsūta pa fizisko saskarni. Katra bultiņa šajā aprakstā ir vieta, kur var atbildēt uz atļaujas jautājumu.
Nekas šajā ceļā neprasa, lai lietotne zinātu par ierīci. Dēmons tur faila deskriptoru un veic saskarnes darbības, kamēr lietotne redz tikai parastu tīkla API.
Uzzīmē abas puses vienreiz, un atļauju jautājumus būs vieglāk izvietot. Augšējā puse ir lietotņu pasaule, bet apakšējā pieder dēmonam.
Izlem, kam vajag ierīci un kam ne
TUN saskarnes izveidei vai pievienošanai tai vajag piekļuvi ierīcei un papildus spēju to konfigurēt, tāpēc atbalstīts VPN pakalpojums sākas ar tīkla administrēšanas pilnvarām vai izmanto privileģētu palīgu. Šī prasība pieder dēmonam. Tā neko nesaka par pārlūku, datubāzes klientu vai failu pārsūtīšanas rīku. Pakalpojumam, kam vajag šo spēju, tā vajadzīga paša iestatīšanas solim, nevis klientiem.
Kad maršruts un politika ir vietā, parasts process izmanto iegūto ceļu ar saviem parastajiem ligzdas izsaukumiem. Tam nevajag ierīces mezglu un nevajag root.
Ierīces atļauju maiņa nav veids, kā piešķirt lietotnei piekļuvi galamērķim. Tā tikai pārvieto ierīces robežu citur.
Pārbaudi vārdu telpu, kurā lietotne patiešām darbojas
Konteiners vai otra tīkla vārdu telpa saviem procesiem dod atsevišķu saskarņu kopu un maršrutu tabulu. Tunelis uz resursdatora tur neparādās automātiski, un nekādas ierīces atļauju izmaiņas to nemaina. Lietotne vienkārši maršrutēs caur to, ko šī vārdu telpa piedāvā. Tāpēc konteinera attēls nevar nejauši mantot resursdatora tuneli.
Pārbaudi ar ip netns list un ip -n NAME route, vai apskatot procesa vārdu telpas saiti. Atbilde parasti ir redzama vienā komandā.
Diviem viena resursdatora lietotājiem politika var piešķirt arī dažādus ceļus. Tas ir tīkla lēmums, nevis pierādījums par ierīces piederību.
Atdala iespējas no tīkla politikas
Dažiem rīkiem vajag vairāk nekā ligzdu. Pakešu uztveršanai vajag neapstrādātu ligzdu, un maršrutu maiņai vajag administrēšanas pilnvaras. Tie ir atsevišķi darījumi ar atsevišķām atļaujām, un vienas piešķiršanu nevajadzētu lasīt kā vispārīgu prasību VPN lietošanai.
Programma, kas īsteno savu tuneli, ir trešais gadījums. Tā patiešām atver TUN, jo uzņemas dēmona lomu, tāpēc tai vajag dēmona privilēģijas.
Nosauc darbību pirms privilēģijas nosaukšanas. Abus parasti ir vieglāk atdalīt, nekā šķiet.
Pārbaudi atdalījumu ar diviem kontiem
Savieno tuneli kā pakalpojumu, pēc tam palaid lietotni kā parastu lietotāju un apstiprini, ka tā sasniedz privāto resursu. Pārbaudi ip route get galamērķim no šī lietotāja čaulas, lai redzētu, kura saskarne tika izvēlēta. Ja maršruts ir pareizs un savienojums tomēr neizdodas, problēma ir politika, nevis privilēģija.
Iegūtais dizains ir mazākā privilēģija ar skaidru robežu: viena komponente pārvalda iestatīšanu un tuneļa resursus, darba slodzes saglabā savus parastos kontus, un tīkla politika izlemj, kas drīkst iziet cauri. Visu palaišana kā root šīs lomas sabrūk, neko neizskaidrojot.