Hook-ga wuxuu shaqeeyaa markaad gacanta ku waddo root ahaan oo wuxuu soo celiyaa Operation not permitted isla markii ay adeeggu bilaabayso. Faylku isma beddelin inta u dhexeysa socodkaas; deegaanka ayaa is beddelay. systemd wuxuu habsocodka siinayaa adduun yar: awood yar, /dev kale, waddooyin nidaamka faylka oo akhris-keliya iyo xadka ugu sarreeya ee hawlo. Akhri guuldarada sida xad diiday hal hawl gaar ah, ma aha sida qoraal jabay.

Ka bilow hawshii la diiday

Sadarka log ee sheegaya in unit-ku guuldareystay wax badan kuma sheegayo. Sadarka faa'iidada leh wuxuu magacaabaa wicitaankii la diiday: noodhka qalabka aan la furan karin, galka aan wax lagu qori karin, meesha magacyada aan la abuuri karin. Raadi wicitaankaas ka hor intaadan taaban hal tilmaam, maxaa yeelay mid kastaa wuxuu u dhigmaa xaddidaad kala duwan. Kadib akhri unit-kii dhab ahaan socday, oo ay ku jiraan drop-in, halkii aad akhrin lahayd faylkii xirmadu soo dirtay.

Weedha hoose waxay daabacdaa waddada qaybta, galka drop-in iyo sifooyinka muhiimka u ah diidmada qalab ama nidaam fayl. Akhri dhammaantood ka hor intaadan go'aansan xadka la xiriira:

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'

Waxba kama qoro qaybtaas. Haddii wicitaankii la diiday uu ka maqan yahay joornaalka, hal socod kordhi faahfaahinta macmiilka halkii aad ka qiyaasi lahayd tilmaamaha. Habka socda wuxuu caddeeyaa in unit-ku bilaabmay, ma aha in hook-ku ku socday awoodihii uu u baahnaa.

Meesha magacyada waxay u baahan tahay xuquuqda mount oo qalabka TUN waligiis isticmaalin

Laba hawl oo isku mid u eg gudaha hal hook ayaa leh borofaylal fasax oo kala duwan. /dev/net/tun furista iyo abuurista interface-ka waxay u baahan tahay maamulka shabakadda iyo gelitaanka noodhkaas. Abuurista meel magacyo shabakadeed oo magac leh waxay sidoo kale u baahan tahay shaqo mount, maxaa yeelay qalabka meesha magacyada wuxuu mount ku sameeyaa /sys arag cusub oo wuxuu ku xiraa galka xaaladda meeshiisa. unit-ka macmiilka ee sare si ula kac ah ayuu maamulka mount uga baxayaa qaybta xadkiisa, sidaas darteed tallaabada meesha magacyada waa la diidayaa halka tunnel-ka laftiisu shaqeyn lahaa.

Taasi waa sababta bixinta noodhka qalabka aanay badbaadin qoraalka. Fasaxa qalabku wuxuu ka jawaabaa hal su'aal, in habsocodkani furi karo noodhkan, su'aasha meesha magacyaduna waa mid kale. Isku habee wicitaanka guuldareysta iyo awooddiisa ka hor intaadan wax ballaarin.

Tijaabada shell-kaaga waxay dhaxashaa awood kasta oo uu leeyahay root xaddid la'aan, unit-kuna wuxuu dhaxashaa wixii ay hayso qaybta xadkiisa. Labada socod waa tijaabooyin kala duwan xitaa marka binary-ga isku mid yahay.

Qalabka, waddooyinka la ilaaliyay iyo xadka hawlo

Marka hawshii la diiday la ogaado, saddex kooxood oo tilmaamo ah ayaa sharraxaya inta badan guuldarrooyinka. Gelitaanka qalabka waxaa maamula PrivateDevices, kaas oo beddela /dev oo lagu beddelay shirkad yar oo qalab been abuur ah, iyo DevicePolicy oo la DeviceAllow, kuwaas oo go'aamiya waxa cgroup ogolaado. /dev/net/tun kama mid aha qaybtaas ugu yar, sidaas darteed PrivateDevices=yes leh unit ma furi karo, wax kasta oo siyaasadda qalabka tidhaahdo.

Ilaalinta nidaamka faylku wuxuu ka jawaabaa su'aal labaad. ProtectHome=yes wuxuu ka dhigaa /home, /root iyo /run/user aan la gaari karin, iyo ProtectSystem=full wuxuu ka dhigaa /usr, /boot iyo /etc akhris-keliya. Sidaas darteed hook-ga qoraa agagaarka faylkiisa habeynta wuxuu ku shaqeeyaa shell-kaaga oo wuxuu ku guuldareystaa unit-ka hoostiisa, isla qaabka fasaxa ee awood maqan. U rar gelinta la qori karo waddo ay siyaasaddu ogolaato, ama ku dar qayb ReadWritePaths= cidhiidhi ah.

Xadka kheyraadka waa kooxda saddexaad, iyo tan ugu muuqata yar. TasksMax= wuxuu xaddidaa inta hawlo ee unit-ku abuuri karo, xadka qoraal-qaadayaasha faylkuna isla sidaas ayuu u dhaqmaa sockets iyo gacmo. Daabacaad ka weynaatey xadka waxay ku guuldareysataa khalad kheyraad halkii khalad fasax, taasina waa sababta farriinta saxan ay weli muhiim tahay.

Ka saar tallaabada meesha magacyada hook-ga

Diyaargarowga u baahan awood aan macmiilku lahaan karin waxay ku deelqaafaa unit-kiisa. Oneshot ka socda macmiilka ka hor, natiijadiisa hayaa oo la habeeyay xiriirka ka hor ayaa siinaya tallaabada meesha magacyada wixii ay u baahan tahay iyada oo aan xuquuqdaas u dhiibin habsocodka tunnel-ka. Kadib macmiilku wuxuu tixraacaa unit-kaas halkii uu qoraalka uga yeedhi lahaa hook-kiisa up.

Qaabka hoose waa qaab bilow, ma aha wax la codsado isagoo aan la akhrin. Wuxuu diyaargarowga ku hayaa halka awooddu ku nooshahay oo wuxuu unit-ka tunnel-ka uga tagaa aan la taaban:

# /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

Ku dar habaysnaanta drop-in halkii aad tafatir lahayd unit-ka xirmaysan, si casriyeyn aanu si aamusnaan ah u tuurin beddelkaaga. Galku wuxuu ku xiran yahay magaca tusaalaha, sidaas darteed borofaylka labaad wuxuu u baahan yahay faylkiisa:

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

Ku celi isla wicitaanka beddelka kadib

Dayactirka waxaa la xaqiijiyaa kaliya marka isla wicitaanku soo saaro natiijo kale. Dib u bilow labada unit, samee hawshii guuldareystay, oo isbarbardhig natiijadeeda iyo sadarka joornaalka ee aad kaydsatay beddelka ka hor. Unit-ka bilaabma inta hook-ku waligiis mar dambe soconayn ma aha dayactir.

Taxanaha hoose wuxuu daacad ka dhigayaa isbarbardhigga, maxaa yeelay wuxuu baarayaa wicitaankii la diiday ee ma aha midabka unit-ka. Kaydi wax soo saarkiisa sadarka joornaalka ee aad qabatay beddelka ka hor:

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

Tiri diidmada halkii aad akhrin lahayd sadarka ugu dambeeya, maxaa yeelay hook wuu ku guuldareysan karaa, dib u tijaabin karaa oo guulaysan karaa, tiradu kaligeed ayaa muujisa haddii xadku dhaqaaqay. Ku reeb faallo drop-in-ka oo magacaabaya tilmaanta aad dabcisay iyo sababta, maadaama casriyeynta xigta ay isbarbardhigayso habeyntaada iyo waxa xirmadu caadi ahaan dhigtay. Unit-ka kaliya bilaabma marka dhammaan ilaalinta la damiyay lama hagaajin.

Maqaallo la xiriira