Ali naj opustite chroot ali kopirate iproute2 v ječo?
Nepopolna ječa odpove po zagonu, ne ob zagonu sistema. Izberite med popuščanjem utrjevanja in kopiranjem binarnih datotek skupaj s knjižnicami v novi koren.
Storitev se zažene, odjemalec se pridruži in na strežniški strani se nikoli ne pojavi pot. Ali pa se daemon noče zagnati in navede ukaz, ki ga ni mogel izvesti. Oba izida sledita istim trem vrsticam, ki se običajno kopirajo skupaj iz vodnika za utrjevanje: prehod na neprivilegiran račun, opustitev skupine in sprememba korena datotečnega sistema. Le ena od treh skriva datoteke in le ena od njih odvzame pravico do spreminjanja usmerjevalne tabele. Njihova ločitev je način, da se naučite, katero vrstico v resnici želite.
Kaj ječa odvzame, kar daemon še potrebuje
Sprememba korena se zgodi po zagonu, zato daemon obdrži vse, kar je že odprl, in izgubi vse, kar bi odprl pozneje. Vsak pomočnik, ki ga povezava zažene po tej točki, mora obstajati znotraj novega korena, skupaj z deljenimi knjižnicami, ki jih nalaga. Ječa, sestavljena iz konfiguracijske datoteke in potrdila, nima ne enega ne drugega.
Prehod na neprivilegiran račun je ločena omejitev. Proces, ki se je odpovedal rootu, morda ne more spreminjati poti ali dvigniti vmesnika, tudi ko je binarna datoteka prav tam, zato je treba obe napaki diagnosticirati ločeno.
Trije pogoji odločajo, katero popravilo potrebujete
Prvi pogoj je, kako vaša gradnja namešča poti. Novejše OpenVPN izdaje konfigurirajo vmesnik in usmerjevalno tabelo znotraj procesa, medtem ko se starejši paketi in lastne nastavitve zanašajo na zunanja orodja ali na skripte up in down. Če dnevnik navede ukaz, je v igri zunanje orodje in ječa ga skriva. Če dnevnik namesto tega pokaže napako dovoljenja, je problem račun.
Drugi je vzdrževanje. Ječo s kopiranimi binarnimi datotekami je treba osvežiti vsakič, ko se paket, ki jih zagotavlja, nadgradi, sicer prva nadgradnja za seboj pusti pokvarjen tunel. Tretji je, ali določena kontrola res zahteva chroot; če se zahteva v resnici nanaša na ločevanje pravic, lahko zadošča že sprememba računa.
| 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 |
Kaj mora vsebovati delujoča ječa
Ječa, ki izvaja ukaze, potrebuje binarno datoteko, vsako knjižnico, na katero se povezuje, in vsako vozlišče naprave, ki ga daemon odpre pozno. Kopirajte dele in jih preizkusite brez VPN v sliki:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Prvi ukaz navede odvisnosti in to je tisti, ki ga ljudje preskočijo. Kopirana binarna datoteka, ki ne najde knjižnice, odpove z drugačnim sporočilom kot manjkajoča binarna datoteka, in oboje je videti kot okvara OpenVPN, ko se bere z odjemalske strani. Ročna izvedba ukaza v ječi ponovi okvaro brez ponovnega zagona storitve.
V ječo kopirajte tudi konfiguracijo, potrdila in morebitni CRL, ker datoteke, ki jo daemon po zagonu želi znova prebrati, po spremembi korena ne bo mogoče najti. Zapišite, kaj ste kopirali, saj naslednja nadgradnja omrežnega paketa nadomesti izvirnike in pusti ječo na stari kopiji.
Namesto tega zmanjšajte utrjevanje
Če ječa obstaja samo zato, ker je tako rekel vodnik, je odstranitev te ene vrstice ob ohranitvi omejitev računa zagovorljiv izid. Daemon obdrži svoj pogled na datotečni sistem in se znebi težave, znižanje pravic pa še vedno odvzame root dolgoživemu procesu.
Zapišite, kaj ostane, in zakaj. Konfiguracija, ki je tiho izgubila kontrolo brez opombe, je način, kako utrjevanje drsi, in naslednja revizija bo vprašala, zakaj je vrstica izginila.
Razdelite tri vrstice, preden izberete
Kopirajte konfiguracijo, onemogočite vse tri direktive in potrdite, da se odjemalec poveže in da se pojavijo pričakovane poti. Nato znova omogočite samo vrstice računa in nazadnje chroot sam. Korak, v katerem se tunel zlomi, označi mejo, in se izognete ponovni gradnji ječe, ki nikoli ni bila vzrok.
Ko znova usmerja, zaženite eno odjemalsko sejo z višjo podrobnostjo in preberite vrstico, ki navede ukaz ali dovoljenje, ki ni uspelo. Ta vrstica je vredna več kot časovna omejitev, ki jo odjemalec na koncu sporoči.