NET_ADMIN mewn cynhwysydd VPN: beth y gall ei newid a ble
Mae'r gallu yn caniatáu newidiadau i ryngwynebau, llwybrau a mur gwarchod o fewn un gofod enw rhwydwaith. Gyda rhwydwaith gwesteiwr, y gofod enw hwnnw yw stac y gwesteiwr ei hun.
NET_ADMIN yw gallu Linux sy'n caniatáu i broses wneud gweinyddiaeth rhwydwaith, ac mewn cynhwysydd mae'n gwneud yn union hynny o fewn y gofod enw rhwydwaith lle mae'r broses yn rhedeg. Nid yw'n drwydded i agor soced, ac nid yw'n ddisodli dyfais na llwybr. Nid yw'r cwestiwn diddorol byth ynghylch a yw'r gallu wedi'i roi, ond pa ofod enw sy'n derbyn y newid.
Beth mae'r gallu yn ei gwmpasu
O fewn ei ofod enw, gall proses sy'n dal NET_ADMIN godi a gostwng rhyngwynebau, neilltuo cyfeiriadau, ychwanegu a dileu llwybrau, ac ysgrifennu rheolau mur gwarchod, sef y grŵp o weithrediadau y mae capabilities(7) yn eu casglu o dan y gallu hwn. Gall hefyd addasu gosodiadau ar lefel rhyngwyneb sy'n rheoli sut mae'r cnewyllyn yn ciwio ac yn hidlo traffig. Mae cleient VPN fel arfer angen ychydig o'r rheini wrth gychwyn a dim arall wedyn. Felly mae'r rhan fwyaf o ddelweddau yn gofyn am fwy o gyrhaeddiad nag y maent yn ei ddefnyddio.
Nid yw gweithrediadau y tu allan i'r gofod enw hwnnw yn cael eu cwmpasu, ac mae braint gyfagos ar wahân. Mae darllen ac ysgrifennu pecynnau crai yn perthyn i NET_RAW, ac mae creu dyfais tun angen y gallu a mynediad i nod y ddyfais. Mae proses heb y ddyfais yn cael gwall caniatâd sy'n edrych fel problem rhwydwaith ac nad yw.
Y gofod enw sy'n penderfynu'r radiws ffrwydrad
Mae cynhwysydd ar ei rwydwaith pont ei hun yn cyrraedd ei loopback ei hun, ei ryngwynebau ei hun a'i dabl llwybro ei hun. Mae rhoi NET_ADMIN yno yn caniatáu i'r cleient VPN adeiladu twnnel heb gyffwrdd â phenderfyniadau llwybro'r gwesteiwr, sef y drefn y mae'r rhan fwyaf o ddelweddau cynhwysydd yn ei thybio.
Newidiwch y cynhwysydd hwnnw i rwydwaith gwesteiwr ac mae'r un caniatâd bellach yn golygu llwybrau'r gwesteiwr a mur gwarchod y gwesteiwr, oherwydd nid oes gofod enw ar wahân ar ôl. Yna gall y cleient a oedd i fod i reoli un twnnel ailgyfeirio traffig y peiriant cyfan, ac mae camgymeriad yn ei sgript ddirymu yn gadael rheolau ar y gwesteiwr na ysgrifennodd neb. Ni newidiodd dim yn y gallu ei hun; newidiodd y cyd-destun. Dyna pam mae'r un ffeil compose yn ymddwyn yn wahanol ar ddau westeiwr.
Tri rhagofyniad sy'n cael eu huno yn un
Mae methiannau cychwyn mewn cynwysyddion VPN fel arfer yn cynnwys un o dair peth ar wahân: y gallu, y ddyfais twnnel, a chymorth y cnewyllyn i'r protocol. Mae rhoi'r tri ar unwaith yn gweithio, ac mae hefyd yn gwneud y methiant nesaf yn amhosibl i'w briodoli. Mae darn compose lleiaf yn rhoi'r gallu ac yn trosglwyddo nod y ddyfais yn benodol:
services:
vpn:
image: example/vpn-client:latest
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
sysctls:
- net.ipv4.conf.all.src_valid_mark=1Darllenwch ddogfennaeth y ddelwedd ei hun am ba sysctls sydd ei angen arni, oherwydd gall sysctl mewn cynhwysydd fod angen braint ychwanegol neu osodiad ar lefel gwesteiwr. Lle mae'r ddelwedd yn cefnogi modd gofod defnyddiwr yn unig, nid oes angen dyfais o gwbl ac mae'r rhestr galluoedd yn crebachu yn unol â hynny.
Rhowch y weithred gul, nid y modd
Mae modd braint yn trosglwyddo pob gallu ac yn ehangu mynediad i ddyfeisiau ar yr un pryd, felly mae'n cuddio pa un o'r tri rhagofyniad oedd ar goll. Mae hefyd yn gwneud dulliau methu'r cynhwysydd yn amhosibl eu gwahaniaethu oddi wrth newidiadau'r gwesteiwr. Dewiswch restr benodol hyd yn oed pan fydd hi'n hirach i'w hysgrifennu.
Mae defnyddiadau di-wraidd a gofodau enw defnyddiwr yn newid beth mae gallu yn ei olygu'n ymarferol, gan fod y broses yn gallu ei ddal dim ond o fewn gofod enw wedi'i fapio. Mae copïo rhestr galluoedd o enghraifft wreiddiedig i amgylchedd di-wreiddiedig a disgwyl yr un cyrhaeddiad yn ffordd gyffredin o golli prynhawn.
Mae cyfrinachau yn perthyn i benderfyniad ar wahân. Nid yw dal NET_ADMIN yn dweud dim am ba hunaniaeth cymar y mae'r cleient yn ei chyflwyno, pa gymwysterau y mae'n eu llwytho, na sut y cânt eu troi. Nid yw gweinyddiaeth rhwydwaith yn darparu ymddiriedaeth.
Gwiriwch y newid a chofnodwch pam mae'r caniatâd yn bodoli
Cadarnhewch beth a gafodd y cynhwysydd mewn gwirionedd cyn i chi ddadfygio'r twnnel. Mae'r archwiliad isod yn adrodd y galluoedd a ychwanegwyd a'r modd rhwydwaith, ac yna'n dangos sut mae'r rhestr ryngwynebau yn edrych o'r tu mewn:
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 routeOs yw'r gallu yn bresennol ac mae'r rhestr ryngwynebau yn dal yn wag, methodd y cleient cyn y gallai greu unrhyw beth, a'r lle nesaf i edrych yw logiau'r cynhwysydd. Os yw'r twnnel yn bodoli ond nad yw traffig yn llifo, mae'r tabl llwybro y tu mewn i'r cynhwysydd yn ateb y cwestiwn nesaf.
Profwch y llwybr dirymu hefyd, oherwydd gall cleient sy'n ysgrifennu rheolau mur gwarchod eu gadael ar ôl. Ataliwch y cynhwysydd ac ailwirio set rheolau'r gwesteiwr os defnyddir rhwydwaith gwesteiwr. Ni ddylid disgrifio caniatâd sydd ond ei angen am ddwy eiliad wrth gychwyn yn y ffeil compose fel gofyniad parhaol heb nodyn yn esbonio hynny.
Ysgrifennwch y rheswm wrth bob gallu: pa weithred oedd ei angen a beth sy'n methu hebddo. Mae'r nodyn hwnnw'n goroesi diweddariadau delwedd, a dyna'r gwahaniaeth rhwng rhestr braint a adolygwyd a un a dyfodd drwy gopïo a gludo.