Kannattaako chrootista luopua vai kopioida iproute2 vankilaan?
Puutteellinen vankila epäonnistuu käynnistyksen jälkeen, ei bootissa. Valitse koventamisen löysäämisen ja binäärien sekä kirjastojen uuteen juureen kopioimisen välillä.
Palvelu käynnistyy, asiakas liittyy, eikä palvelimen puolella koskaan näy reittiä. Tai daemon kieltäytyy käynnistymästä ja nimeää komennon, jota se ei pystynyt suorittamaan. Molemmat tulokset seuraavat samoja kolmea riviä, jotka yleensä kopioidaan yhdessä koventamisoppaasta: siirtyminen ei-privilegioituun tilille, ryhmästä luopuminen ja tiedostojärjestelmän juuren vaihtaminen. Vain yksi kolmesta piilottaa tiedostoja, ja vain yksi niistä poistaa oikeuden muuttaa reititystaulukkoa. Niiden erottaminen on tapa oppia, mitä riviä todella haluat.
Mitä vankila poistaa, mitä daemon vielä tarvitsee
Juuren vaihto tapahtuu käynnistyksen jälkeen, joten daemon pitää kaiken jo avaamansa ja menettää kaiken, mitä se avaisi myöhemmin. Jokaisen apurin, jonka yhteys suorittaa tuon pisteen jälkeen, on oltava uuden juuren sisällä, yhdessä lataamiensa jaettujen kirjastojen kanssa. Konfiguraatiotiedostosta ja varmenteesta rakennetussa vankilassa ei ole kumpaakaan.
Siirtyminen ei-privilegioituun tilille on erillinen rajoitus. Prosessi, joka on luopunut rootista, ei välttämättä pysty muuttamaan reittejä tai nostamaan rajapintaa, vaikka binääri olisi aivan siinä, joten molemmat viat on diagnosoitava erikseen.
Kolme ehtoa ratkaisevat, minkä korjauksen tarvitset
Ensimmäinen ehto on, miten buildisi asentaa reittejä. Uudemmat OpenVPN versiot konfiguroivat rajapinnan ja reititystaulukon prosessin sisällä, kun taas vanhemmat paketit ja omat asennukset nojaavat ulkoisiin työkaluihin tai up- ja down-skripteihin. Jos loki nimeää komennon, pelissä on ulkoinen työkalu ja vankila piilottaa sen. Jos loki näyttää sen sijaan käyttöoikeusvirheen, ongelma on tili.
Toinen on ylläpito. Vankila, jossa on kopioidut binäärit, on päivitettävä aina, kun ne tarjoava paketti päivitetään, muuten ensimmäinen päivitys jättää jälkeensä rikkoutuneen tunnelin. Kolmas on, vaatiiko tietty kontrolli todella chrootin; jos vaatimus koskee oikeastaan oikeuksien erottelua, tilin vaihto voi riittää yksinään.
| 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 |
Mitä toimivan vankilan on sisällettävä
Komentoja suorittava vankila tarvitsee binäärin, jokaisen kirjaston, johon se linkittyy, ja jokaisen laitesolmun, jonka daemon avaa myöhään. Kopioi osat ja testaa ne ilman VPN:ää kuvassa:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Ensimmäinen komento listaa riippuvuudet, ja se on se, jonka ihmiset ohittavat. Kopioitu binääri, joka ei löydä kirjastoa, epäonnistuu eri viestillä kuin puuttuva binääri, ja molemmat näyttävät OpenVPN-vialta asiakkaan puolelta luettuna. Komennon suorittaminen käsin vankilassa toistaa vian käynnistämättä palvelua uudelleen.
Kopioi myös konfiguraatio, varmenteet ja mahdollinen CRL vankilaan, koska tiedostoa, jonka daemon odottaa lukevansa uudelleen käynnistyksen jälkeen, ei löydy, kun juuri on vaihtunut. Kirjaa ylös, mitä kopioit, sillä verkkopaketin seuraava päivitys korvaa alkuperäiset ja jättää vankilan vanhalle kopiolle.
Pienennä sen sijaan koventamista
Jos vankila on olemassa vain siksi, että opas niin sanoi, on tuon yhden rivin poistaminen tilin rajoitukset säilyttäen puolustettava lopputulos. Daemon säilyttää näkymänsä tiedostojärjestelmään ja pääsee ongelmasta eroon, ja oikeuksien lasku poistaa edelleen rootin pitkäikäisestä prosessista.
Kirjoita ylös, mitä jää, ja miksi. Konfiguraatio, joka menetti hiljaa kontrollin ilman muistiinpanoa, on tapa, jolla koventaminen ajautuu, ja seuraava auditointi kysyy, miksi rivi katosi.
Jaa kolme riviä ennen valintaa
Kopioi konfiguraatio, poista kaikki kolme direktiiviä käytöstä ja vahvista, että asiakas yhdistää ja että odotetut reitit ilmestyvät. Ota sitten uudelleen käyttöön vain tilirivit ja lopuksi chroot yksinään. Vaihe, jossa tunneli katkeaa, osoittaa rajan, ja vältät vankilan uudelleenrakentamisen, joka ei koskaan ollut syy.
Kun se taas reitittää, aja yksi asiakasistunto suuremmalla yksityiskohtaisuudella ja lue rivi, joka nimeää komennon tai epäonnistuneen oikeuden. Se rivi on arvokkaampi kuin aikakatkaisu, jonka asiakas lopulta raportoi.