NET_ADMIN í VPN-gámi: hvað það getur breytt og hvar
Hæfnið leyfir breytingar á tengi, leiðum og eldvegg innan eins netnafnrýmis. Með hýsilneti er það rými eigin stafli hýsilsins.
NET_ADMIN er Linux-hæfnið sem leyfir ferli að sinna netstjórnun, og í gámi gerir það einmitt það innan þess netnafnrýmis sem ferlið keyrir í. Það er ekki leyfi til að opna sökkul og ekki staðgengill fyrir tæki eða leið. Áhugaverða spurningin er aldrei hvort hæfnið sé veitt, heldur hvaða nafnrými fær breytinguna.
Hvað hæfnið nær yfir
Innan nafnrýmis síns getur ferli með NET_ADMIN kveikt og slökkt á tengjum, úthlutað vefföngum, bætt við og fjarlægt leiðum og skrifað eldveggsreglur, sem er sá flokkur aðgerða sem capabilities(7) safnar undir þessa hæfni. Það getur einnig stillt tengistigsstillingar sem stjórna því hvernig kjarninn raðar og síar umferð. VPN-viðskiptavinur þarf yfirleitt nokkrar þeirra við ræsingu og ekkert annað eftir á. Þess vegna biðja flest ímyndir um meira umfang en þær nota.
Aðgerðir utan þess nafnrýmis eru ekki innifaldar, og aðliggjandi heimildir eru aðskildar. Lestur og skrif á hrágögnum tilheyrir NET_RAW, og að búa til tun-tæki krefst bæði hæfnisins og aðgangs að tækjahniðinu. Ferli án tækisins fær heimildarvillu sem lítur út eins og netvandamál en er það ekki.
Nafnrýmið ræður skaðaradíusnum
Gámur á eigin brúarneti nær eigin lykkjubakgrunni, eigin tengjum og eigin leiðatöflu. Að veita NET_ADMIN þar leyfir VPN-viðskiptavininum að byggja göng án þess að snerta leiðaákvarðanir hýsilsins, sem er fyrirkomulagið sem flestar gámaímyndir gera ráð fyrir.
Skiptu þeim gámi yfir á hýsilnet og sama veitingin breytir nú leiðum hýsilsins og eldvegg hýsilsins, því ekkert sér nafnrými er eftir. Viðskiptavinurinn sem átti að stjórna einu göngu getur þá vísað umferð allrar vélarinnar annað, og mistök í niðurrifsskriptinu hans skilja eftir reglur á hýsilnum sem enginn skrifaði. Ekkert í hæfninu sjálfu breyttist; samhengið breyttist. Þess vegna hagar sama compose-skráin sér öðruvísi á tveimur hýslum.
Þrjú forsendaatriði sem renna saman í eitt
Ræsingarvillur í VPN-gámum snerta yfirleitt eitt af þremur aðskildum atriðum: hæfnið, göngutækið og kjarnastuðning við samskiptareglurnar. Að veita öll þrjú í einu virkar, og það gerir næstu bilun einnig órekjanlega. Lágmarks compose-brot veitir hæfnið og sendir tækjahniðið skýrt:
services:
vpn:
image: example/vpn-client:latest
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
sysctls:
- net.ipv4.conf.all.src_valid_mark=1Lestu eigin skjöl ímyndarinnar um hvaða sysctl hún þarf, því sysctl í gámi getur krafist viðbótarheimildar eða stillingar á hýsilplaninu. Þar sem ímyndin styður aðeins notendarýmisstillingu er tækið alls ekki nauðsynlegt og hæfnilistinn minnkar í samræmi við það.
Veittu þröngu aðgerðina, ekki stillinguna
Forréttindastilling afhendir hverja hæfni og víkkar tækjaaðgang á sama tíma, svo hún felur hvaða af þremur forsendunum vantaði. Hún gerir einnig bilunarhætti gámsins óaðgreinanlega frá breytingum á hýsilnum. Veldu skýran lista þótt hann sé lengri að skrifa.
Uppsetningar án rótar og í notendanafnrýmum breyta því sem hæfni þýðir í reynd, þar sem ferlið getur aðeins haft hana innan varps nafnrýmis. Að afrita hæfnilista úr rótarfestu dæmi í keyrsluumhverfi án rótar og búast við sama umfangi er algeng leið til að missa síðdegi.
Leyndarmál tilheyra sérstakri ákvörðun. Að hafa NET_ADMIN segir ekkert um hvaða jafningjaauðkenni viðskiptavinurinn sýnir, hvaða skilríki hann hleður eða hvernig þeim er snúið. Netstjórnun veitir ekki traust.
Staðfestu breytinguna og skráðu hvers vegna veitingin er til
Staðfestu hvað gámurinn fékk í raun áður en þú kembir göngin. Skoðunin hér að neðan greinir frá viðbótarhæfnunum og netstillingunni og sýnir síðan hvernig tengilistinn lítur út að innan:
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 routeEf hæfnið er til staðar og tengilistinn er enn tómur, mistókst viðskiptavinurinn áður en hann gat búið eitthvað til, og næsti staður til að skoða eru annálar gámsins. Ef göngin eru til en umferðin flæðir ekki svarar leiðataflan inni í gámnum næstu spurningu.
Prófaðu líka niðurrifsleiðina, því viðskiptavinur sem skrifar eldveggsreglur getur skilið þær eftir. Stöðvaðu gámim og athugaðu reglusett hýsilsins aftur ef hýsilnet er notað. Veitingu sem aðeins er þörf í tvær sekúndur við ræsingu ætti ekki að lýsa í compose-skránni sem varanlegri kröfu án athugasemdar sem útskýrir það.
Skrifaðu ástæðuna við hverja hæfni: hvaða aðgerð þurfti hana og hvað mistekst án hennar. Sú athugasemd lifir af ímyndauppfærslur, og hún er munurinn á yfirfarðum forréttindalista og lista sem óx með afritun og límingu.