Wéi eng Linux-Capabilities brauch Äre VPN-Prozess?
D'Interface-Arichtung, d'Routen, den Zougang zu Geräter an déi gewéinlech Sockelen sinn ënnerschiddlech Privilegien. Nennt déi Operatioun, déi feelgeschloen huet, ier Dir CAP_NET_ADMIN gitt.
En VPN-Daemon brauch privilegiéiert Netzwierkoperaftiounen, obwuel gewéinlech Applikatiounen ausgoend Sockelen ouni all Privileg opmaachen. An dësem Lach fänken déi meescht Capability-Feeler un: een gesäit eng Berechtegungsfeeler, gëtt de ganze Saz a lëscht, an de Service funktionéiert aus Grënn, déi spéider keen erkläre kann. De Wee hei drënner fänkt bei der Operatioun un, déi feelgeschloen huet, mappt se op eng eenzeg Befuugnuss an iwwerpréift dann de Kontext, an deem de Prozess tatsächlech leeft. Als onbegrenzten root lafen ass fir verschidden Deployementer eng valabel Äntwert, awer et sollt eng Decisioun sinn an net e Standardwäert.
Fänkt bei der Operatioun un, déi feelgeschloen huet
Liest de Feeler, ier Dir en Tutorial liest. „Operatioun net erlaabt“ bei enger Interface-Ännerung, eng Refus fir en Apparatsknuet opzemaachen an eng Bind-Feeler op engem nidderegen Port sinn dräi verschidde Problemer mat dräi verschiddene Berechtegunge. Wann de Prozess starte kann an nëmmen beim éischte Routen-Ännerung feelgeet, heescht dat och, datt d'Interface scho geschaf gouf, wat d'Äntwert staark aspärrt.
Reproduzéiert de Feeler mam Service gestoppt a startt en duerno am Virdergrond ënner deem selwechte Benotzer, wann d'Implementatioun et erlaabt. E Feeler, deen Dir gesitt, ass besser wéi eng Logzeil, déi Dir raten musst, an et mécht den Ënnerscheed tëscht engem Capability-Problem an enger Oflehnung vum SELinux oder AppArmor kloer.
Mappt all Operatioun op eng eenzeg Befuugnuss
D'Tabell ass eng Startkaart, kee Ersatz fir d'Dokumentatioun vun der Implementatioun:
| 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 |
Déi zwou Zeilen an där Tabell sinn déi, déi d'Leit verwiesselen. /dev/net/tun opzemaachen ass eng Fro vun Dateiberechtegung; de Kernel ze froen, dat opzemaachen wat Dir opgemaach hutt, ass eng Fro vun Capabilities. CAP_NET_ADMIN ze ginn reparéiert keen Apparatsknuet, deen Äre Service-Benotzer net liese kann, an de Knuet ze reparéieren gëtt Iech keng Routebefuugnuss. Préift béides, ier Dir eng vun deenen zwee ännert.
Kernel-WireGuard a Tunnelprogrammer am Benotzerraum hunn och net déi selwecht Fuerderungen. De Kernelmodul-Wee konfiguréiert en existéierend Interface iwwer netlink, wärend eng Implementatioun am Benotzerraum och den Apparat brauch an, fir verschidden Transporten, roh Sockelen.
Liest de Kontext: Service, Container oder Shell
Eng Capability am Netzwierknammraum vum Host kann vill méi bewierken wéi déiselwecht Operatioun an engem bewosst isoléierte Stack. Eng Container-Laufzäit fänkt typesch mat engem reduzéierte Bounding-Set un; NET_ADMIN engem Container ze ginn, deen den Hostnetz deelt, ass eng vill méi grouss Vergaab wéi et engem mat engem eegene Netzwierknammraum an ouni Host-Mounts ze ginn.
Liest bei systemd-Units, wat tatsächlech ugewannt gëtt, an net wat d'Unit-Datei ze soen schéngt: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities mellt déi effektiv Wäerter, déi vun engem drop-in gesat kënne ginn, deen Dir vergiess hutt. Frot den effektive Wäert, ni den intendéierten. Ambient-Capabilities si wichteg, well e Service ouni root d'Capabilities iwwer exec verléiert, wann en se net huet.
Hëlt d'ënnerstëtzten Ariichtung vum Pak oder vum Image als Basis. Füügt keng Roh-Socket-Berechtegungen oder privilegiéierte Modus bäi, just well en aneren Tutorial se fir en anert Wierkzeug opgelëscht huet; dës Argumentatioun iwwerdréit näischt a kascht Iech d'Isolatioun, fir déi Dir bezuelt hutt. Wann Dir am Zweiwel sidd, gitt näischt a liest d'Notizen vun der Implementatioun fir déi genee Operatioun, déi Dir braucht.
Kuckt wat geschitt, nodeems d'Privilegien falen
Vill Daemone starten privilegiéiert, konfiguréieren d'Interface, ginn duerno op ee Benotzer ouni Privilegien an halen den Tunnel. Vun deem Punkt un kann de Prozess keng Route méi bäifügen, keng Firewall-Reeg nei schreiwen oder en neit privilegiéiert Gerät opmaachen, wat esouguer ass, bis eng Reconnexion genau dat brauch. Spéider Dateiliesen an d'Ausféiere vu Hooks kënne aus dem selwechte Grond feelgoen.
Test de ganze Liewenszyklus an net déi éischt Sekonn: Start, en Erneierung oder Reconnexion an d'Oprume beim Stoppen. Eng éischte gelungen Interface-Erstellung beweist net, datt all spéider privilegiéiert Operatioun nach funktionéiert, an de Feeler erschéngt meeschtens Stonnen méi spéit an der Produktioun.
Implementatiounen, déi den Tunnel iwwer e Benotzerwiessel op halen, kombinéieren dat meeschtens mat Optiounen, den Tunnel an d'Schlësselen ze behalen. Op der systemd-Säit ass déi gläichwäerteg Fro, ob de Capability-Set vun der Unit de Benotzerwiessel iwwerlieft, deen Dir konfiguréiert hutt.
Schreift d'Vergaab an hire Grond op
Schreift déi genee Vergaab op, d'Operatioun, déi se erméiglecht, an de Feeler, deen se behuewen huet. Eng Zeil an den Deployementsnotizen — „CAP_NET_ADMIN am Netzwierknammraum vun der Unit, néideg fir Routen-Ännerungen no enger Reconnexion“ — genüügt, fir déi nächst Persoun ze verhënneren, d'Vergaab nach eng Kéier auszebauen.
Liest duerno no all Upgrade deen effektive Set nach eng Kéier. Hiersteller fügen Funktiounen bäi, Images änneren Standardwäerter, an eng Capability, déi d'lescht Joer iwwerflësseg war, ka droend ginn, ouni datt een et mierkt.