NET_ADMIN Linuxen gaitasuna da, prozesu bati sare-administrazioa egiteko aukera ematen diona, eta edukiontzi batean zehazki hori egiten du prozesua exekutatzen den sare-izen-espazioan. Ez da socket bat irekitzeko lizentzia eta ez da gailu edo ibilbide baten ordezkoa. Galdera interesgarria ez da inoiz gaitasuna eman den ala ez, baizik eta zein izen-espaziok jasotzen duen aldaketa.

Zer hartzen du gaitasunak

Bere izen-espazioaren barruan, NET_ADMIN duen prozesu batek interfazeak igo eta jaitsi, helbideak esleitu, ibilbideak gehitu eta kendu eta suebakiko arauak idatz ditzake, hau da capabilities(7) gaitasun honen pean biltzen duen eragiketa-multzoa. Interfaze-mailako ezarpenak ere doi ditzake, kernelak trafikoa nola lerratu eta iragazten duen kontrolatzen dutenak. VPN bezero batek horietako batzuk behar izaten ditu abiaraztean eta gero ez du besterik behar. Hori dela eta irudi gehienek erabiltzen dutena baino irismen handiagoa eskatzen dute.

Izen-espazio horretatik kanpoko eragiketak ez daude estalita, eta aldameneko pribilegioak bereiziak dira. Pakete gordinak irakurtzea eta idaztea NET_RAW-ri dagokio, eta tun gailu bat sortzeko gaitasuna zein gailu-nodoarekiko sarbidea behar dira. Gailurarik ez duen prozesu batek sare-arazo itxura duen baimen-errore bat jasotzen du, baina ez da arazo hori.

Izen-espazioak erabakitzen du kalte-erradioa

Bere zubi-sareko edukiontzi batek bere loopback, bere interfazeak eta bere bideratze-taula iristen ditu. Han NET_ADMIN emateak VPN bezeroari tunel bat eraikitzea ahalbidetzen dio hostaren bideratze-erabakiak ukitu gabe, eta hori da edukiontzi-irudi gehienek suposatzen duten antolaketa.

Aldatu edukiontzi hori host sarera eta emate berak hostaren ibilbideak eta hostaren suebakia editatzen ditu orain, ez baita izen-espazio bereizirik geratzen. Tunel bakarra kudeatu behar zuen bezeroak makinaren trafikoa birbideratu dezake orduan, eta haren desmuntatze-scriptean akats batek inork idatzi ez dituen arauak uzten ditu hostean. Gaitasunean bertan ez zen ezer aldatu; testuingurua aldatu zen. Horregatik jokatzen du compose fitxategi berak desberdin bi hostetan.

Bat egiten duten hiru baldintza

VPN edukiontzien abiarazte-hutsegiteek hiru gauza bereizietako bat izaten dute: gaitasuna, tunel-gailua eta protokoloaren kernelaren laguntza. Hirurak batera emateak funtzionatzen du, eta hurrengo hutsegitea egotzi ezina ere egiten du. Compose zati minimo batek gaitasuna ematen du eta gailu-nodoa esplizituki pasatzen du:

services:
  vpn:
    image: example/vpn-client:latest
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1

Irakurri irudiaren dokumentazioa zein sysctl behar dituen jakiteko, edukiontziko sysctl batek pribilegio gehigarri bat edo host mailako ezarpen bat behar izan baititzake. Irudiak erabiltzaile-espazioko modua soilik onartzen duen tokietan, ez da gailurik behar eta gaitasun-zerrenda horren arabera uzkurtzen da.

Eman eragiketa estua, ez modua

Modu pribilegiatuak gaitasun guztiak ematen ditu eta gailu-sarbidea aldi berean zabaltzen du, beraz hiru baldintzetako zein falta zen ezkutatzen du. Edukiontziaren hutsegite-moduak hostaren aldaketetatik bereizezinak ere egiten ditu. Hobetsi zerrenda esplizitua, idazteko luzeagoa izan arren.

Rootik gabeko eta erabiltzaile-izen-espazioko inplementazioek praktikan gaitasunak duen esanahia aldatzen dute, prozesuak izen-espazio mapatu baten barruan soilik eduki baitezake. Gaitasun-zerrenda rootdun adibide batetik rootik gabeko exekuzio-ingurunera kopiatzea eta irismen bera espero izatea arratsalde bat galtzeko modu ohikoa da.

Sekretuak erabaki bereizi bati dagozkio. NET_ADMIN edukitzeak ez du ezer esaten bezeroak zein pare-identitate aurkezten duen, zein kredentzial kargatzen dituen edo nola biratzen diren. Sare-administrazioak ez du konfiantzarik ematen.

Egiaztatu aldaketa eta erregistratu zergatik dagoen baimena

Egiaztatu edukiontziak benetan zer jaso zuen tunela araztu aurretik. Beheko ikuskaritzak gehitutako gaitasunak eta sare-modua ematen ditu, eta gero barrutik interfaze-zerrenda nola ikusten den erakusten du:

docker inspect --format '{{.HostConfig.CapAdd}} {{.HostConfig.NetworkMode}} {{.HostConfig.Privileged}}' vpn
docker exec vpn sh -c 'grep CapEff /proc/self/status'
docker exec vpn ip -br addr
docker exec vpn ip route

Gaitasuna badago eta interfaze-zerrenda oraindik hutsik badago, bezeroak huts egin zuen ezer sortu baino lehen, eta edukiontziaren erregistroak dira hurrengo begiratzeko tokia. Tunela badago baina trafikoa ez bada igarotzen, edukiontziaren barruko bideratze-taulak erantzuten dio hurrengo galderari.

Probatu desmuntatze-bidea ere, suebakiko arauak idazten dituen bezero batek han utz baititzake. Gelditu edukiontzia eta berrikusi hostaren arau-multzoa host sarea erabiltzen bada. Abiaraztean bi segundo besterik behar ez duen baimena ez litzateke compose fitxategian betebehar iraunkor gisa deskribatu behar hori azaltzen duen oharrik gabe.

Idatzi arrazoia gaitasun bakoitzaren ondoan: zein eragiketak behar zuen eta zer huts egiten duen hura gabe. Ohar horrek irudiaren eguneraketak gainditzen ditu, eta berrikusitako pribilegio-zerrenda baten eta kopiatuz eta itsatsiz hazi den baten arteko aldea da.

Erlazionatutako artikuluak