Pa alluoedd Linux sydd eu hangen ar eich proses VPN?
Mae gosod y rhyngwyneb, llwybrau, mynediad i ddyfeisiau a socedi cyffredin yn fraint ar wahân. Enwch y llawdriniaeth a fethodd cyn rhoi CAP_NET_ADMIN.
Mae ar daemon VPN angen gweithrediadau rhwydwaith breintiedig hyd yn oed pan fo rhaglenni cyffredin yn agor socedi allanol heb unrhyw fraint o gwbl. Yn y bwlch hwnnw y mae’r rhan fwyaf o gamgymeriadau galluoedd yn dechrau: mae rhywun yn gweld gwall caniatâd, yn rhoi’r set gyfan, ac mae’r gwasanaeth yn gweithio am resymau na all neb eu hesbonio wedyn. Mae’r daith isod yn dechrau o’r llawdriniaeth a fethodd, yn ei mapio i un awdurdod, ac yna’n gwirio’r cyd-destun y mae’r broses yn rhedeg ynddo mewn gwirionedd. Mae rhedeg fel root heb gyfyngiad yn ateb dilys i rai gosodiadau, ond dylai fod yn benderfyniad yn hytrach na’n rhagosodiad.
Dechreuwch o’r llawdriniaeth a fethodd
Darllenwch y gwall cyn darllen tiwtorial. Mae „llawdriniaeth heb ei chaniatáu“ ar newid rhyngwyneb, gwrthodiad i agor nod dyfais, a methiant bind ar borth isel yn dri phroblem wahanol gyda thri chaniatâd gwahanol. Os yw’r broses yn cychwyn ac yn methu yn unig ar y newid llwybr cyntaf, mae hynny hefyd yn dweud wrthych fod creu’r rhyngwyneb eisoes wedi llwyddo, sy’n culhau’r ateb yn sylweddol.
Ailadroddwch y methiant gyda’r gwasanaeth wedi stopio, yna ei gychwyn yn y blaendir o dan yr un defnyddiwr os yw’r gweithrediad yn caniatáu hynny. Mae gwall y gallwch ei weld yn well na llinell log y mae’n rhaid ei dyfalu, ac mae’n gwneud y gwahaniaeth rhwng problem galluoedd a gwrthodiad SELinux neu AppArmor yn amlwg.
Mapiwch bob llawdriniaeth i un awdurdod
Mae’r tabl yn fap cychwynnol, nid yn ddirprwy ar gyfer dogfennaeth y gweithrediad:
| 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 |
Y ddau res yn y tabl hwnnw yw’r rhai y mae pobl yn eu cymysgu. Mae agor /dev/net/tun yn gwestiwn caniatâd ffeil; mae gofyn i’r cnewyllyn ffurfweddu’r hyn y gwnaethoch ei agor yn gwestiwn galluoedd. Nid yw rhoi CAP_NET_ADMIN yn trwsio nod dyfais na all eich defnyddiwr gwasanaeth ei ddarllen, ac nid yw trwsio’r nod yn rhoi awdurdod llwybr i chi. Gwiriwch y ddau cyn newid unrhyw un ohonynt.
Nid yw WireGuard y cnewyllyn a rhaglenni twnnel gofod defnyddiwr yn rhannu’r un gofynion chwaith. Mae llwybr modiwl y cnewyllyn yn ffurfweddu rhyngwyneb sy’n bodoli drwy netlink, tra gall gweithrediad gofod defnyddiwr fod angen y ddyfais hefyd, ac ar gyfer rhai trafnidiaethau, socedi crai.
Darllenwch y cyd-destun: gwasanaeth, cynhwysydd neu gragen
Gall gallu yn enw gofod rhwydwaith y gwesteiwr effeithio llawer mwy na’r un llawdriniaeth y tu mewn i stac sydd wedi’i ynysu’n fwriadol. Mae amgylchedd cynhwysydd fel arfer yn dechrau gyda set ffiniau lai; mae ychwanegu NET_ADMIN at gynhwysydd sy’n rhannu rhwydwaith y gwesteiwr yn ganiatâd llawer mwy nag ychwanegu at un sydd â’i enw gofod rhwydwaith ei hun a dim mowntiau gwesteiwr.
Ar gyfer unedau systemd, darllenwch beth sy’n cael ei gymhwyso mewn gwirionedd yn hytrach na beth y mae’r ffeil uned yn ymddangos yn ei ddweud: mae systemctl show -p CapabilityBoundingSet -p AmbientCapabilities yn adrodd y gwerthoedd effeithiol, a all gael eu gosod gan drop-in y gwnaethoch ei anghofio. Gofynnwch am y gwerth effeithiol, byth am yr un bwriadedig. Mae galluoedd ambient yn bwysig oherwydd bod gwasanaeth nad yw’n root yn colli galluoedd ar draws exec hebddynt.
Defnyddiwch osodiad a gefnogir y pecyn neu’r ddelwedd fel gwaelodlin. Peidiwch ag ychwanegu caniatadau soced crai na modd breintiedig am fod tiwtorial arall wedi’u rhestru ar gyfer offeryn arall; nid yw’r rhesymu hwnnw’n trosglwyddo dim ac mae’n costio’r ynysu y gwnaethoch ei dalu amdano. Os ydych mewn amheuaeth, na roddwch ddim a darllenwch nodiadau’r gweithrediad ar gyfer yr union lawdriniaeth sydd ei hangen arnoch.
Gwyliwch beth sy’n digwydd ar ôl i fraint ollwng
Mae llawer o ddemoniaid yn cychwyn yn freintiedig, yn ffurfweddu’r rhyngwyneb, yna’n disgyn i ddefnyddiwr heb fraint ac yn cadw’r twnnel. O’r pwynt hwnnw ni all y broses ychwanegu llwybr, ailysgrifennu rheol mur cadarn neu agor dyfais freintiedig newydd, sy’n iawn nes bod ailgysylltu angen yn union hynny. Gall darllen ffeiliau a gweithredu bachyn yn ddiweddarach fethu am yr un rheswm.
Profwch y cylch bywyd cyfan yn hytrach na’r eiliad gyntaf: cychwyn, adnewyddiad neu ailgysylltiad, a glanhau wrth stopio. Nid yw creu rhyngwyneb yn llwyddiannus y tro cyntaf yn profi y bydd pob llawdriniaeth freintiedig ddiweddarach yn gweithio o hyd, ac mae’r methiant fel arfer yn ymddangos oriau’n ddiweddarach mewn cynhyrchu.
Mae gweithrediadau sy’n cadw’r twnnel ar agor drwy newid defnyddiwr fel arfer yn paru hynny ag opsiynau i barhau’r twnnel a’r allweddi. Ar ochr systemd, y cwestiwn cyfatebol yw a yw set galluoedd yr uned yn goroesi’r newid defnyddiwr a ffurfweddwyd gennych.
Cofnodwch y caniatâd a’i reswm
Ysgrifennwch yr union ganiatâd, y llawdriniaeth y mae’n ei alluogi a’r gwall y gwnaeth ei drwsio. Mae un llinell yn y nodiadau defnyddio — „CAP_NET_ADMIN yn enw gofod rhwydwaith yr uned, sydd ei angen ar gyfer newidiadau llwybr ar ôl ailgysylltu“ — yn ddigon i atal y person nesaf rhag ehangu’r caniatâd eto.
Yna ail-ddarllenwch y set effeithiol ar ôl pob diweddariad. Mae gwerthwyr yn ychwanegu nodweddion, mae delweddau’n newid rhagosodiadau, a gall gallu nad oedd yn angenrheidiol y llynedd ddod yn un sy’n cario pwysau heb i neb sylwi.