Hokker Linux-fermogens hat jo VPN-proses nedich?
Interface-ynstelling, rûtes, apparaattagong en gewoane sockets binne aparte privileezjes. Neam de bewurking dy't mislearre foardat jo CAP_NET_ADMIN jouwe.
In VPN-daemon hat privilezjearre netwurkbewurkings nedich, ek al iepenje gewoane programma's útgeande sockets sûnder hokker privileezje dan ek. Yn dat gat begjinne de measte fermogensflaters: ien sjocht in tastimmingsflater, jout de hiele set en de tsjinst wurket om redenen dy't nimmen letter útlizze kin. De trochgong hjirûnder begjint by de bewurking dy't mislearre, keppelt dy oan ien foech en kontrolearret dan de kontekst wêryn't it proses echt draait. Draaie as ûnbeheinde root is foar guon ymplemintaasjes in jildich antwurd, mar it moat in beslissing wêze en gjin standertwearde.
Begjin by de bewurking dy't mislearre
Lês de flater foardat jo in hantlieding lêze. „Bewurking net tastien“ by in interfaceferoaring, in wegering om in apparaatknooppunt te iepenjen en in bind-flater op in leech port binne trije ferskillende problemen mei trije ferskillende taskenningen. As it proses start en allinnich by de earste rûteferoaring mislearret, seit dat ek dat it oanmeitsjen fan de interface al slagge is, wat it antwurd flink ferringt.
Reprodusearje de flater mei de tsjinst stoppe en start it dan op 'e foargrûn ûnder deselde brûker as de ymplemintaasje dat tastiet. In flater dy't jo sjen kinne is better as in logrigel dy't jo riede moatte, en it makket it ferskil tusken in fermogensprobleem en in SELinux- of AppArmor-wegering dúdlik.
Keppelje elke bewurking oan ien foech
De tabel is in begjinkaart, gjin ferfanging foar de dokumintaasje fan 'e ymplemintaasje:
| 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 |
De twa rigen yn dy tabel binne dejinge dy't minsken trochinoar helje. It iepenjen fan /dev/net/tun is in kwestje fan triemrjochten; de kernel freegje om te konfigurearjen wat jo iepene hawwe is in kwestje fan fermogens. CAP_NET_ADMIN jaan reparearret gjin apparaatknooppunt dat jo tsjinstbrûker net lêze kin, en it knooppunt reparearje jout jo gjin rûtefoech. Kontrolearje beide foardat jo ien fan beiden feroarje.
Kernel-WireGuard en tunnelprogramma's yn brûkersromte hawwe ek gjin deselde easken. It kernelmodulepaad konfigurearret in besteand interface fia netlink, wylst in ymplemintaasje yn brûkersromte ek it apparaat nedich wêze kin en, foar guon ferfier, rûge sockets.
Lês de kontekst: tsjinst, kontener of shell
In fermogen yn 'e netwurknammeromte fan 'e host kin folle mear beynfloedzje as deselde bewurking yn in bewust isolearre steapel. In konteneromjouwing begjint meastentiids mei in ferlytse grinstset; NET_ADMIN tafoegje oan in kontener dy't it hostnetwurk dielt is in folle gruttere taskenning as it tafoegje oan ien mei syn eigen netwurknammeromte en gjin hostmounts.
Lês foar systemd-units wat der wier tapast wurdt, net wat it unitbestân skynber seit: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities rapportearret de effektive wearden, dy't ynsteld wêze kinne troch in drop-in dy't jo fergetten binne. Freegje om 'e effektive wearde, nea om 'e bedoelde. Ambient-fermogens binne wichtich, omdat in tsjinst sûnder root fermogens ferliest oer exec sûnder har.
Brûk de stipe ynstelling fan it pakket of de ôfbylding as basisline. Foegje gjin rûge-socketrjochten of privilezjearre modus ta omdat in oare hantlieding se foar oare helpmiddels neamd hat; dy redenearring draacht neat oer en kostet jo de isolaasje dy't jo betelle hawwe. By twifel jou dan neat en lês de notysjes fan 'e ymplemintaasje foar de krekte bewurking dy't jo nedich hawwe.
Sjoch wat der bart neidat privileezjes sakje
In protte daemons starte privilezjearre, konfigurearje it interface en geane dan oer nei in net-privilezjearre brûker en hâlde de tunnel. Fan dat punt ôf kin it proses gjin rûte mear tafoegje, gjin firewallregel oerskriuwe of in nij privilezjearre apparaat iepenje, wat goed is oant in werferbining krekt dat nedich hat. Lettere triemlêzen en hook-útfiering kinne om deselde reden mislearje.
Test de hiele libbenssyklus ynstee fan 'e earste sekonde: opstart, in fernijing of werferbining en opromming by stopjen. In earste suksesfolle interface-oanmeitsjen bewiist net dat elke lettere privilezjearre bewurking noch wurket, en de flater ferskynt meast oeren letter yn produksje.
Ymplemintaasjes dy't de tunnel iepen hâlde oer in brûkerswiksel keppelje dat meast oan opsjes om de tunnel en kaai te bewarjen. Oan 'e systemd-kant is de lykweardige fraach oft de fermogensset fan 'e unit de brûkerswiksel oerlibbet dy't jo konfigurearre hawwe.
Skriuw de taskenning en har reden op
Skriuw de krekte taskenning op, de bewurking dy't it mooglik makket en de flater dy't it reparearre. Ien rigel yn 'e ymplemintaasjenotysjes — „CAP_NET_ADMIN yn 'e netwurknammeromte fan 'e unit, nedich foar rûteferoarings nei werferbining“ — is genôch om de folgjende persoan te stopjen de taskenning wer út te wreidzjen.
Lês dan nei elke upgrade de effektive set op 'e nij. Leveransiers foegje funksjes ta, ôfbyldingen feroarje standertwearden, en in fermogen dat ferline jier oerstallich wie kin dragend wurde sûnder dat immen it merkt.