Mali by ste zrušiť chroot alebo skopírovať iproute2 do väzenia?
Neúplné väzenie zlyhá po štarte, nie pri boote. Vyberte si medzi uvoľnením spevnenia a skopírovaním binárok spolu s knižnicami do nového koreňa.
Služba naštartuje, klient sa pripojí a na strane servera sa nikdy neobjaví trasa. Alebo démon odmietne naštartovať a uvedie príkaz, ktorý nemohol vykonať. Oba výsledky sledujú tie isté tri riadky, ktoré sa zvyčajne kopírujú spoločne z príručky spevnenia: prechod na neprivilegovaný účet, opustenie skupiny a zmena koreňa súborového systému. Len jeden z troch skrýva súbory a len jeden z nich odoberá oprávnenie meniť smerovaciu tabuľku. Ich rozdelenie je spôsob, ako zistíte, ktorý riadok vlastne chcete.
Čo väzenie odoberá a démon to stále potrebuje
Zmena koreňa prebieha po štarte, takže démon si ponechá všetko, čo už otvoril, a stratí všetko, čo by otvoril neskôr. Akýkoľvek pomocník, ktorý spojenie spustí po tomto bode, musí existovať vnútri nového koreňa, spolu so zdieľanými knižnicami, ktoré načítava. Väzenie postavené z konfiguračného súboru a certifikátu nemá ani jedno.
Prechod na neprivilegovaný účet je samostatné obmedzenie. Proces, ktorý sa vzdal roota, možno nedokáže meniť trasy ani zdvihnúť rozhranie, aj keď je binárka priamo tam, preto obe zlyhania treba diagnostikovať oddelene.
Tri podmienky rozhodujú, akú opravu potrebujete
Prvou podmienkou je, ako váš build inštaluje trasy. Novšie OpenVPN vydania konfigurujú rozhranie a smerovaciu tabuľku v procese, zatiaľ čo staršie balíky a vlastné nastavenia sa spoliehajú na externé nástroje alebo na skripty up a down. Ak log uvádza príkaz, je v hre externý nástroj a väzenie ho skrýva. Ak log namiesto toho ukazuje chybu oprávnenia, problémom je účet.
Druhou je údržba. Väzenie so skopírovanými binárkami treba obnovovať pri každej aktualizácii balíka, ktorý ich poskytuje, inak prvá aktualizácia zanechá za sebou rozbitý tunel. Treťou je, či konkrétna kontrola skutočne vyžaduje chroot; ak ide požiadavka v skutočnosti o oddelenie oprávnení, môže samotná zmena účtu stačiť.
| 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 |
Čo musí funkčné väzenie obsahovať
Väzenie, ktoré spúšťa príkazy, potrebuje binárku, každú knižnicu, proti ktorej sa linkuje, a každý uzol zariadenia, ktorý démon otvára neskoro. Skopírujte časti a otestujte ich bez VPN v hre:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Prvý príkaz vypisuje závislosti a je to ten, ktorý ľudia preskakujú. Skopírovaná binárka, ktorá nenájde knižnicu, zlyhá inou správou než chýbajúca binárka, a oboje vyzerá ako závada OpenVPN pri čítaní z klientskej strany. Ručné spustenie príkazu vo väzení zopakuje zlyhanie bez reštartu služby.
Skopírujte do väzenia aj konfiguráciu, certifikáty a prípadný CRL, pretože súbor, ktorý démon chce po štarte znovu prečítať, sa nenájde, keď sa koreň zmení. Zapíšte si, čo ste skopírovali, pretože ďalšia aktualizácia sieťového balíka nahradí originály a ponechá väzenie na starej kópii.
Namiesto toho zmenšite spevnenie
Ak väzenie existuje len preto, že to hovorila príručka, odstránenie toho jediného riadku pri zachovaní obmedzení účtu je obhájiteľný výsledok. Démon si ponechá pohľad na súborový systém a zbaví sa problému a zníženie oprávnení stále odoberá root dlhovekému procesu.
Zapíšte, čo zostáva, a prečo. Konfigurácia, ktorá potichu stratila kontrolu bez poznámky, je spôsob, akým spevnenie driftuje, a ďalší audit sa opýta, prečo riadok zmizol.
Rozdeľte tri riadky, kým sa rozhodnete
Skopírujte konfiguráciu, zakážte všetky tri direktívy a potvrďte, že sa klient pripojí a objavia sa očakávané trasy. Potom znova povoľte len riadky účtu a nakoniec samotný chroot. Krok, kde sa tunel zlomí, určuje hranicu, a vyhnete sa prestavbe väzenia, ktoré nikdy nebolo príčinou.
Keď znova smeruje, spustite jedno klientske sedenie s vyššou podrobnosťou a prečítajte riadok, ktorý uvádza príkaz alebo oprávnenie, ktoré zlyhalo. Ten riadok má väčšiu cenu než časový limit, ktorý klient nakoniec hlási.