Paslauga paleidžiama, klientas prisijungia, ir serverio pusėje niekada neatsiranda maršrutas. Arba diegonas atsisako paleisti ir nurodo komandą, kurios negalėjo įvykdyti. Abu rezultatai vadovaujasi tomis pačiomis trimis eilutėmis, kurios paprastai kopijuojamos kartu iš sukietėjimo vadovo: perėjimas prie neprivilegijuotos paskyros, grupės atsisakymas ir failų sistemos šaknies pakeitimas. Tik viena iš trijų slepia failus, ir tik viena iš jų atima teisę keisti maršrutizavimo lentelę. Jų atskyrimas yra būdas sužinoti, kurios eilutės jums iš tikrųjų reikia.

Ką kalėjimas atima, ko diegonui dar reikia

Šaknies pakeitimas įvyksta po paleidimo, todėl diegonas išlaiko viską, ką jau atidarė, ir praranda viską, ką atidarytų vėliau. Bet kuri pagalbinė programa, kurią ryšys vykdo po to momento, turi egzistuoti naujoje šaknyje kartu su įkeliamomis bendrinėmis bibliotekomis. Kalėjimas, pastatytas iš konfigūracijos failo ir sertifikato, neturi nei vieno, nei kito.

Perėjimas prie neprivilegijuotos paskyros yra atskiras apribojimas. Procesas, kuris atsisakė root, gali negalėti keisti maršrutų ar pakelti sąsajos net tada, kai binarinis failas yra visai šalia, todėl abu gedimus reikia diagnozuoti atskirai.

Trys sąlygos nusprendžia, kokio taisymo jums reikia

Pirmoji sąlyga yra tai, kaip jūsų build įdiegia maršrutus. Naujesnės OpenVPN laidos konfigūruoja sąsają ir maršrutizavimo lentelę proceso viduje, o senesni paketai ir savos konfigūracijos remiasi išorinėmis priemonėmis arba up ir down scenarijais. Jei žurnalas nurodo komandą, dalyvauja išorinė priemonė ir kalėjimas ją slepia. Jei žurnalas vietoj to rodo leidimų klaidą, problema yra paskyra.

Antroji yra priežiūra. Kalėjimą su nukopijuotais binariniais failais reikia atnaujinti kiekvieną kartą, kai atnaujinamas juos teikiantis paketas, kitaip pirmas atnaujinimas palieka sulaužytą tunelį. Trečioji yra tai, ar konkreti kontrolė tikrai reikalauja chroot; jei reikalavimas iš tikrųjų susijęs su privilegijų atskyrimu, gali pakakti vien paskyros pakeitimo.

Signal in the logOther side of the boundaryRepair direction
Command not found after startupBinary and its libraries absent inside the new rootPopulate the jail, or drop the chroot line
Operation not permittedAccount lost the privilege to edit routesKeep the account privileged, or pre-create routes elsewhere
No such deviceJail lacks the tun device nodeCreate the node inside, or open it before the root change

Ką turi turėti veikiantis kalėjimas

Kalėjimui, kuris vykdo komandas, reikia binarinio failo, kiekvienos bibliotekos, su kuria jis susietas, ir kiekvieno įrenginio mazgo, kurį diegonas atidaro vėlai. Nukopijuokite dalis ir išbandykite jas be VPN vaizde:

ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up

Pirmoji komanda išvardija priklausomybes, ir būtent jos žmonės praleidžia. Nukopijuotas binarinis failas, kuris neranda bibliotekos, sugenda su kita žinute nei trūkstamas binarinis failas, ir abu atrodo kaip OpenVPN gedimas, skaitant iš kliento pusės. Komandos vykdymas kalėjime rankiniu būdu atkuria gedimą neperkraunant paslaugos.

Nukopijuokite į kalėjimą ir konfigūraciją, sertifikatus bei galimą CRL, nes failo, kurį diegonas tikisi perskaityti po paleidimo, nebus galima rasti, kai šaknis pasikeis. Užsirašykite, ką nukopijavote, nes kitas tinklo paketo atnaujinimas pakeis originalus ir paliks kalėjimą su sena kopija.

Vietoj to sumažinkite sukietėjimą

Jei kalėjimas egzistuoja tik todėl, kad taip sakė vadovas, tos vienos eilutės pašalinimas išsaugant paskyros apribojimus yra pateisinamas rezultatas. Diegonas išlaiko savo failų sistemos vaizdą ir atsikrato problemos, o privilegijų sumažinimas vis tiek pašalina root iš ilgaamžio proceso.

Užsirašykite, kas lieka, ir kodėl. Konfigūracija, kuri tyliai prarado kontrolę be pastabos, yra būdas, kuriuo sukietėjimas dreifuoja, o kitas auditas paklaus, kodėl eilutė dingo.

Padalinkite tris eilutes prieš rinkdamiesi

Nukopijuokite konfigūraciją, išjunkite visas tris direktyvas ir patvirtinkite, kad klientas prisijungia ir atsiranda laukiami maršrutai. Tada vėl įjunkite tik paskyros eilutes, o paskui vien chroot. Žingsnis, kuriame tunelis lūžta, nurodo ribą, ir išvengiate kalėjimo, kuris niekada nebuvo priežastis, perstatymo.

Kai jis vėl maršrutizuoja, paleiskite vieną kliento sesiją su didesniu išsamumu ir perskaitykite eilutę, kurioje nurodoma komanda arba nepavykęs leidimas. Ta eilutė verta daugiau nei laiko limitas, kurį klientas galiausiai praneša.

Susiję straipsniai