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 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

Č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.

Súvisiace články