Den Hook schafft, wann Dir en mat der Hand als root ausféiert, a gëtt zréck Operation not permitted de Moment wou de Service en start. D'Datei huet sech tëscht dësen Ausféierungen net geännert; d'Ëmwelt huet. systemd gëtt dem Prozess eng méi kleng Welt: manner Capacitéiten, en aneren /dev, Weeër vum Dateisystem nëmme fir ze liesen an eng Uewergrenz fir Aufgaben. Liest de Feeler als eng Grenz, déi eng spezifesch Operatioun ofgeleent huet, net als e Skript, dat futt gaangen ass.

Fänkt bei der Operatioun un, déi ofgeleent gouf

Eng Logzeil déi seet, d'Unit wier feelgeschloen, seet Iech bal näischt. Déi nëtzlech Zeil nennt den Opruff, deen ofgeleent gouf: en Apparatknued deen net opgaang ass, en Dossier an deen net konnt geschriwwe ginn, en Nummraum deen net konnt erstallt ginn. Fannt dësen Opruff ier Dir eng eenzeg Direktiv beréiert, well jiddweree mat enger anerer Beschränkung entsprécht. Liest duerno d'Unit déi wierklech gelaf ass, Drop-ins abegraff, amplaz vun der Datei déi de Pak geliwwert huet.

D'Ufro hei drënner dréckt de Fragmentwee, d'Drop-in-Dossieren an d'Eigenschaften aus, déi bei enger Oflehnung vun Apparat oder Dateisystem wichteg sinn. Liest se all ier Dir entscheet, wéi eng Grenz relevant ass:

systemctl show "[email protected]" -p FragmentPath -p DropInPaths -p PrivateDevices -p DevicePolicy -p DeviceAllow -p ProtectHome -p ProtectSystem -p TasksMax
journalctl -u "[email protected]" -b --no-pager | grep -iE 'operation not permitted|permission denied|cannot open|failed'

Näischt an deem Block schreift. Wann den ofgeleenten Opruff am Journal feelt, erhéicht d'Ausféierlechkeet vum Client fir eng Ausféierung amplaz Direktiven ze roden. En lafende Prozess beweist, datt d'Unit gestart ass, net datt den Hook mat de noutwenden Rechter gelaf ass.

En Nummraum brauch Mount-Rechter, déi en TUN-Apparat ni benotzt

Zwee Operatiounen déi bannen engem Hook gläich ausgesinn, hunn ënnerschiddlech Berechtegungsprofile. D'Opmaache vum /dev/net/tun an d'Uleeë vum Interface brauch Netzverwaltung plus Zougang zu deem Knued. En Nummraum fir Netz mat Numm ze schafen brauch och Mount-Aarbecht, well d'Nummeraum-Wierkzeug eng frësch /sys Vue mount a setzt en Zoustands-Dossier op seng Plaz. Client-Unit aus dem Upstream léisst d'Mount-Verwaltung bewosst baussenzeg vu sengem Bounding-Set, dofir gëtt de Nummraum-Schrëtt ofgeleent, wärend den Tunnel selwer funktionéiert hätt.

Dofir rett d'Gewannen vum Apparatknued d'Skript net. Eng Apparaterlaabnes äntwert op eng Fro, ob dëse Prozess dëse Knued dierf opmaachen, an d'Fro vum Nummraum ass eng aner. Passt den Opruff dee fällt un seng Capacitéit un, ier Dir eppes erweidert.

En Test an Ärer Shell ierft all Capacitéit déi en onbeschränkte root huet, an d'Unit ierft dat wat hire Bounding-Set behalen huet. Déi zwou Ausféierungen sinn ënnerschiddlech Experimenter och wann d'Binär identesch ass.

Apparater, geschützt Weeër an Uewergrenze fir Aufgaben

Wann déi ofgeleenten Operatioun bekannt ass, erklären dräi Gruppe vun Direktive déi meeschte Feeler. Den Apparatzougang regléiert PrivateDevices, deen /dev duerch eng minimal Rei vun Pseudo-Apparate ersetzt, an DevicePolicy mat DeviceAllow, déi entscheeden wat d'cgroup zoulooss. /dev/net/tun ass net Deel vun där minimaler Rei, dofir kann eng Unit mat PrivateDevices=yes en net opmaachen, egal wat d'Apparatpolitik seet.

De Schutz vum Dateisystem äntwert op eng zweet Fro. ProtectHome=yes mécht /home, /root an /run/user onzougänglech, an ProtectSystem=full mécht /usr, /boot an /etc nëmme liesbar. Dofir schafft en Hook dee niewent senger eegener Konfiguratiounsdatei schreift an Ärer Shell a fällt ënner der Unit duerch, mat der selwechter Form vun Erlaabnes wéi eng fehlend Capacitéit. Verréckelt den Input dee ka geschriwwe ginn op e Wee deen d'Politik erlaabt, oder setzt en enke ReadWritePaths= Agang dobäi.

Ressourcengrenze sinn déi drëtt Grupp, an déi mannst offensichtlech. TasksMax= begrenzt wéi vill Aufgaben d'Unit dierf schafen, an eng Uewergrenz fir Dateideskriptoren hält sech fir Sockets an Handgrëffer d'selwecht. Eng Installatioun déi iwwer d'Grenz gewuess ass, fällt mat engem Ressourcefeeler duerch amplaz engem Erlaabnesfeeler, an dofir zielt déi genee Meldung nach ëmmer.

Zitt den Nummraum-Schrëtt aus dem Hook eraus

D'Virbereedung déi e Recht brauch dat de Client net dierf hunn, gehéiert an eng eegen Unit. En Oneshot dee virum Client leeft, säin Resultat behält a virun der Verbindung geuerdnet ass, gëtt dem Nummraum-Schrëtt wat en brauch, ouni déi Rechter un den Tunnelprozess ze iwwerginn. De Client referenzéiert duerno déi Unit amplaz d'Skript aus sengem Up-Hook ze ruffen.

D'Schabloun hei drënner ass eng Ufanksform, net eppes wat een ongelies uwenn. Si hält d'Virbereedung do wou d'Recht lieft an léisst d'Tunnel-Unit onberouert:

# /etc/systemd/system/[email protected]
[Unit]
Description=Namespace preparation for %i
Before=openvpn-client@%i.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/netns-up.sh %i
CapabilityBoundingSet=CAP_NET_ADMIN CAP_SYS_ADMIN
[Install]
WantedBy=multi-user.target

Setzt d'Uerdnung mat engem Drop-in dobäi amplaz d'verpackt Unit ze editéieren, sou datt en Update Är Ännerung net stëll ka fale loossen. Den Dossier ass un den Numm vun der Instanz gebonnen, dofir brauch en zweet Profil seng eegen Datei:

sudo mkdir -p /etc/systemd/system/[email protected]
sudo tee /etc/systemd/system/[email protected]/10-namespace.conf >/dev/null <<'CONF'
[Unit]
[email protected]
[email protected]
CONF
sudo systemctl daemon-reload

Widderhëlt deeselwechten Opruff no der Ännerung

Eng Reparatur ass just confirméiert wann deeselwechten Opruff en aneren Resultat gëtt. Start béid Uniten nei, féiert d'Operatioun aus déi futt gaangen ass, a vergläicht hire Resultat mat der Logzeil déi Dir virun der Ännerung gespäichert hutt. Eng Unit déi start wärend den Hook ni méi leeft, ass keng Reparatur.

D'Sequenz hei drënner hält de Verglach éierlech, well se den ofgeleenten Opruff kontrolléiert an net d'Faarf vun der Unit. Späichert hir Ausgab niewent der Logzeil déi Dir virun der Ännerung agefaangen hutt:

sudo systemctl restart "[email protected]" "[email protected]"
systemctl status "[email protected]" --no-pager
journalctl -u "[email protected]" -b --no-pager | grep -c 'Operation not permitted'
ip -brief addr show tun0

Zielt d'Oflehnungen amplaz déi lescht Zeil ze liesen, well en Hook ka futt goen, nei probéieren an duerchkommen, an just d'Zuel weist ob d'Grenz sech geréckelt huet. Loosst e Kommentar am Drop-in deen d'Direktiv nennt déi Dir geléisdert hutt an de Grond, well den nächsten Update Är Konfiguratioun mat dem verpackte Standard vergläicht. Eng Unit déi just start nodeem all Schutz ausgeschalt ass, ass net reparéiert.

Ähnlech Artikelen