Elengedjük a chrootot, vagy másoljuk be az iproute2-t a börtönbe?
Egy hiányos börtön indítás után hibázik meg, nem bootkor. Válassz a keményítés lazítása és a binárisok plusz könyvtárak új gyökérbe másolása között.
A szolgáltatás elindul, egy kliens csatlakozik, és a szerver oldalon soha nem jelenik meg útvonal. Vagy a daemon megtagadja az indulást, és megnevez egy parancsot, amelyet nem tudott végrehajtani. Mindkét kimenet ugyanazt a három sort követi, amelyeket általában együtt másolnak egy keményítési útmutatóból: átváltás jogosulatlan fiókra, a csoport elhagyása és a fájlrendszer gyökerének módosítása. A három közül csak egy rejt el fájlokat, és csak egy közülük vonja el az útválasztási tábla módosításának jogosultságát. A szétválasztásukkal tudod megtanulni, melyik sort akarod valójában.
Mit vesz el a börtön, amire a daemonnak még szüksége van
A gyökér módosítása az indítás után történik, így a daemon megtartja mindazt, amit már megnyitott, és elveszíti mindazt, amit később nyitna meg. Minden segédprogramnak, amelyet a kapcsolat e pont után futtat, léteznie kell az új gyökéren belül, a betöltött megosztott könyvtárakkal együtt. Egy konfigurációs fájlból és egy tanúsítványból épült börtönben egyik sincs meg.
A jogosulatlan fiókra váltás külön korlátozás. Egy rootról lemondott folyamat talán nem tud útvonalakat módosítani vagy interfészt felhozni, még akkor sem, ha a bináris éppen ott van, ezért a két hibát külön kell diagnosztizálni.
Három feltétel dönti el, milyen javításra van szükség
Az első feltétel az, hogyan telepíti az útvonalakat a build. Az újabb OpenVPN kiadások a folyamaton belül konfigurálják az interfészt és az útválasztási táblát, míg a régebbi csomagok és saját beállítások külső eszközökre vagy up és down szkriptekre támaszkodnak. Ha a napló parancsot nevez meg, külső eszköz van a játékban, és a börtön elrejti. Ha a napló helyette jogosultsági hibát mutat, a fiók a probléma.
A második a karbantartás. A másolt binárisokat tartalmazó börtönt frissíteni kell minden alkalommal, amikor az azokat biztosító csomag frissül, különben az első frissítés törött alagutat hagy maga után. A harmadik az, hogy egy adott vezérlő valóban igényel-e chrootot; ha a követelmény valójában a jogosultságok szétválasztásáról szól, a fiókváltás önmagában is elég lehet.
| 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 kell tartalmaznia egy működő börtönnek
A parancsokat futtató börtönnek szüksége van a binárisra, minden könyvtárra, amelyhez kapcsolódik, és minden eszközcsomópontra, amelyet a daemon későn nyit meg. Másold be a darabokat, és teszteld őket VPN nélkül a képben:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Az első parancs listázza a függőségeket, és ezt szokták kihagyni az emberek. Egy másolt bináris, amely nem talál egy könyvtárat, más üzenettel hibázik meg, mint egy hiányzó bináris, és mindkettő OpenVPN-hibának tűnik a kliens oldaláról nézve. A parancs kézi futtatása a börtönben reprodukálja a hibát anélkül, hogy újraindítaná a szolgáltatást.
Másold be a konfigurációt, a tanúsítványokat és az esetleges CRL-t is a börtönbe, mert egy fájl, amelyet a daemon az indítás után újra akar olvasni, nem található meg, miután a gyökér megváltozott. Jegyezd fel, mit másoltál, mert a hálózati csomag következő frissítése lecseréli az eredetieket, és a börtönt a régi másolaton hagyja.
Inkább csökkentsd a keményítést
Ha a börtön csak azért létezik, mert egy útmutató így mondta, az az egy sor eltávolítása a fiókkorlátozások megtartása mellett védhető eredmény. A daemon megtartja a fájlrendszer-nézetét, és megszabadul a problémától, a jogosultságcsökkentés pedig továbbra is eltávolítja a rootot a hosszú életű folyamatból.
Írd le, mi marad, és miért. Egy konfiguráció, amely csendben elvesztett egy vezérlőt megjegyzés nélkül, így sodródik a keményítés, és a következő audit megkérdezi, miért tűnt el a sor.
Válaszd szét a három sort, mielőtt döntesz
Másold le a konfigurációt, tiltsd le mindhárom direktívát, és igazold, hogy egy kliens csatlakozik, és megjelennek a várt útvonalak. Ezután csak a fióksorokat engedélyezd újra, majd végül a chrootot egyedül. Az a lépés, ahol az alagút eltörik, jelöli ki a határt, és elkerülöd egy olyan börtön újjáépítését, amely soha nem volt az ok.
Amikor újra route-ol, futtass egy kliens munkamenetet nagyobb részletességgel, és olvasd el a sort, amely megnevezi a parancsot vagy a sikertelen jogosultságot. Az a sor többet ér, mint a timeout, amelyet a kliens végül jelent.