Дали да се откажете од chroot или да копирате iproute2 во затворот?
Нецелосен затвор паѓа по стартувањето, не при бутирањето. Изберете помеѓу олабавување на зацврстувањето и копирање на бинарните датотеки заедно со библиотеките во новиот корен.
Услугата стартува, клиент се поврзува и од страната на серверот никогаш не се појавува рута. Или демонот одбива да стартува и именува наредба што не можел да ја изврши. Двата исхода ги следат истите три линии, кои обично се копираат заедно од водич за зацврстување: премин на непривилегирана сметка, откажување од групата и промена на коренот на датотечниот систем. Само една од трите крие датотеки и само една од нив го одзема правото да се менува табелата за рутирање. Нивното разделување е начинот да научите која линија навистина ви треба.
Што затворот одзема, а на демонот сѐ уште му треба
Промената на коренот се случува по стартувањето, затоа демонот го задржува сето што веќе го отворил и го губи сето што би го отворил подоцна. Секој помошник што врската ќе го изврши по тој момент мора да постои внатре во новиот корен, заедно со споделените библиотеки што ги вчитува. Затвор изграден од конфигурациска датотека и сертификат нема ниту едно од двете.
Преминот на непривилегирана сметка е одделно ограничување. Процес што се откажал од root можеби не може да менува рути или да подигне интерфејс дури и кога бинарната датотека е токму таму, затоа двете дефекти треба да се дијагностицираат одделно.
Три услови одлучуваат каква поправка ви треба
Првиот услов е како вашата градба инсталира рути. Поновите OpenVPN изданија го конфигурираат интерфејсот и табелата за рутирање во процесот, додека постарите пакети и сопствените поставки се потпираат на надворешни алатки или на up и down скрипти. Ако дневникот именува наредба, вклучена е надворешна алатка и затворот ја крие. Ако дневникот наместо тоа покажува грешка за дозволи, проблемот е сметката.
Вториот е одржувањето. Затвор со копирани бинарни датотеки мора да се освежува секогаш кога пакетот што ги обезбедува се надградува, инаку првото надградување остава скршен тунел зад себе. Третиот е дали одредена контрола навистина бара chroot; ако барањето всушност е за разделување на привилегии, промената на сметката може да биде доволна сама.
| 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 |
Што мора да содржи работен затвор
Затвор што извршува наредби бара бинарната датотека, секоја библиотека со која се поврзува и секој јазол на уред што демонот го отвора доцна. Копирајте ги деловите и тестирајте ги без VPN во сликата:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Првата наредба ги наведува зависностите и токму неа луѓето ја прескокнуваат. Копирана бинарна датотека што не најде библиотека паѓа со поинаква порака од отсутна бинарна датотека и двете изгледаат како дефект на OpenVPN кога се читаат од страната на клиентот. Извршувањето на наредбата рачно во затворот го репродуцира дефектот без рестартирање на услугата.
Копирајте во затворот и конфигурацијата, сертификатите и секој CRL, зашто датотека што демонот очекува повторно да ја прочита по стартувањето нема да биде најдена откако коренот ќе се смени. Запишете што сте копирале, бидејќи следното надградување на мрежниот пакет ги заменува оригиналите и го остава затворот на старата копија.
Наместо тоа намалете го зацврстувањето
Ако затворот постои само затоа што така рекол водичот, отстранувањето на таа една линија додека ограничувањата на сметката остануваат е одбранлив исход. Демонот го задржува својот поглед на датотечниот систем и се ослободува од проблемот, а намалувањето на привилегиите сѐ уште го отстранува root од долготрајниот процес.
Запишете што останува и зошто. Конфигурација што тивко загубила контрола без белешка е начинот на кој зацврстувањето дрифтува и следниот одит ќе праша зошто линијата исчезнала.
Поделете ги трите линии пред да изберете
Копирајте ја конфигурацијата, оневозможете ги трите директиви и потврдете дека клиент се поврзува и се појавуваат очекуваните рути. Потоа повторно овозможете ги само линиите за сметка, а потоа самиот chroot. Чекорот каде тунелот се крши ја означува границата, и избегнувате преизградба на затвор што никогаш не бил причината.
Кога повторно рутира, стартувајте една клиентска сесија со поголема деталност и прочитајте ја линијата што ја именува наредбата или неуспешната дозвола. Таа линија вреди повеќе од тајмаутот што клиентот на крајот го пријавува.