A duhet ta heqësh chroot ose ta kopjosh iproute2 në burg?
Një burg i paplotë dështon pas nisjes, jo në boot. Zgjidh midis lehtësimit të forcimit dhe kopjimit të binareve bashkë me bibliotekat në rrënjën e re.
Shërbimi niset, një klient lidhet dhe asnjë rrugë nuk shfaqet kurrë në anën e serverit. Ose daemon-i refuzon të niset dhe përmend një komandë që nuk mund ta ekzekutonte. Të dyja rezultatet ndjekin të njëjtat tre rreshta, që zakonisht kopjohen së bashku nga një udhëzues forcimi: kalimi në një llogari pa privilegje, heqja e grupit dhe ndryshimi i rrënjës së sistemit të skedarëve. Vetëm njëra nga të tre fsheh skedarë, dhe vetëm njëra prej tyre heq privilegjin për të ndryshuar tabelën e rrugëzimit. Ndarja e tyre është mënyra si mëson se cili rresht të duhet vërtet.
Çfarë heq burgu që daemon-i ende ka nevojë
Ndryshimi i rrënjës ndodh pas nisjes, kështu që daemon-i mban gjithçka që ka hapur tashmë dhe humbet gjithçka që do të hapte më vonë. Çdo ndihmës që lidhja ekzekuton pas atij pike duhet të ekzistojë brenda rrënjës së re, bashkë me bibliotekat e përbashkëta që ngarkon. Një burg i ndërtuar nga një skedar konfigurimi dhe një certifikatë nuk ka asnjërën.
Kalimi në një llogari pa privilegje është një kufizim i veçantë. Një proces që ka hequr dorë nga root mund të mos jetë në gjendje të ndryshojë rrugët ose të ngrejë një ndërfaqe edhe kur binari është pikërisht aty, prandaj dy dështimet duhet të diagnostikohen veçmas.
Tre kushte vendosin çfarë rregullimi të duhet
Kushti i parë është si i instalon rrugët ndërtimi yt. Versionet e reja të OpenVPN konfigurojnë ndërfaqen dhe tabelën e rrugëzimit brenda procesit, ndërsa paketat më të vjetra dhe konfigurimet e vetë ndërtuara mbështeten në mjete të jashtme ose në skripte up dhe down. Nëse regjistri përmend një komandë, ka një mjet të jashtëm në lojë dhe burgu po e fsheh. Nëse regjistri tregon në vend të kësaj një gabim leje, problemi është llogaria.
I dyti është mirëmbajtja. Një burg me binare të kopjuar duhet rifreskuar sa herë përditësohet paketa që i siguron, përndryshe përditësimi i parë lë pas një tunel të thyer. I treti është nëse një kontroll i caktuar kërkon vërtet një chroot; nëse kërkesa ka të bëjë në fakt me ndarjen e privilegjeve, ndryshimi i llogarisë mund të mjaftojë vetëm.
| Signal in the log | Other side of the boundary | Repair direction |
|---|---|---|
| Command not found after startup | Binary and its libraries absent inside the new root | Populate the jail, or drop the chroot line |
| Operation not permitted | Account lost the privilege to edit routes | Keep the account privileged, or pre-create routes elsewhere |
| No such device | Jail lacks the tun device node | Create the node inside, or open it before the root change |
Çfarë duhet të përmbajë një burg që funksionon
Një burg që ekzekuton komanda ka nevojë për binarin, çdo bibliotekë me të cilën lidhet dhe çdo nyje pajisjeje që daemon-i hap vonë. Kopjo pjesët dhe testoi pa VPN në pamje:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Komanda e parë liston varësitë, dhe është ajo që njerëzit anashkalojnë. Një binar i kopjuar që nuk gjen një bibliotekë dështon me një mesazh ndryshe nga një binar që mungon, dhe të dyja duken si një defekt i OpenVPN kur lexohen nga ana e klientit. Ekzekutimi i komandës me dorë brenda burgut riprodhon dështimin pa rinisur shërbimin.
Kopjo edhe konfigurimin, certifikatat dhe çdo CRL brenda burgut, sepse një skedar që daemon-i pret ta rilexojë pas nisjes nuk do të gjendet pasi të ketë ndryshuar rrënja. Shkruaj çfarë kopjove, pasi përditësimi i radhës i paketës së rrjetit zëvendëson origjinalet dhe e lë burgun në kopjen e vjetër.
Zvogëlo forcimin në vend të kësaj
Nëse burgu ekziston vetëm sepse kështu tha një udhëzues, heqja e atij rreshti të vetëm duke mbajtur kufizimet e llogarisë është një përfundim i mbrojtshëm. Daemon-i mban pamjen e sistemit të skedarëve dhe e humb problemin, dhe ulja e privilegjeve ende heq root nga procesi jetëgjatë.
Shkruaj çfarë mbetet, dhe pse. Një konfigurim që humbi në heshtje një kontroll pa një shënim është mënyra si rrjedh forcimi, dhe auditimi i radhës do të pyesë pse u zhduk rreshti.
Ndaj tre rreshtat përpara se të zgjedhësh
Kopjo konfigurimin, çaktivizo të tre direktivat dhe konfirmo që një klient lidhet dhe që shfaqen rrugët e pritura. Pastaj riaktivizo vetëm rreshtat e llogarisë, dhe më pas chroot vetëm. Hapi ku thyhet tuneli identifikon kufirin, dhe shmang rindërtimin e një burgu që nuk ishte kurrë shkaku.
Pasi të rrugëzojë përsëri, ekzekuto një sesion klienti me folshmëri më të lartë dhe lexo rreshtin që përmend komandën ose lejen që dështoi. Ai rresht vlen më shumë se afati kohor që klienti raporton në fund.