Услугата стартира, клиент се свързва и от страната на сървъра никога не се появява маршрут. Или демонът отказва да стартира и посочва команда, която не е могъл да изпълни. И двата изхода следват същите три реда, които обикновено се копират заедно от ръководство за втвърдяване: преминаване към непривилегирован акаунт, отказ от групата и смяна на корена на файловата система. Само един от трите скрива файлове и само един от тях отнема правото да се променя таблицата за маршрутизация. Разделянето им е начинът да научите кой ред всъщност искате.

Какво затворът отнема, а демонът все още има нужда от него

Смяната на корена се случва след стартиране, затова демонът запазва всичко, което вече е отворил, и губи всичко, което би отворил по-късно. Всеки помощник, който връзката изпълни след този момент, трябва да съществува вътре в новия корен, заедно със споделените библиотеки, които зарежда. Затвор, изграден от конфигурационен файл и сертификат, няма нито едно от двете.

Преминаването към непривилегирован акаунт е отделно ограничение. Процес, който се е отказал от root, може да не успее да променя маршрути или да вдигне интерфейс дори когато двоичният файл е точно там, затова двете повреди трябва да се диагностицират поотделно.

Три условия решават какво поправяне ви трябва

Първото условие е как вашата компилация инсталира маршрути. По-нови OpenVPN издания конфигурират интерфейса и таблицата за маршрутизация в процеса, докато по-старите пакети и собствените настройки разчитат на външни инструменти или на up и down скриптове. Ако журналът посочи команда, замесен е външен инструмент и затворът го скрива. Ако журналът вместо това показва грешка за права, проблемът е акаунтът.

Второто е поддръжката. Затвор с копирани двоични файлове трябва да се обновява при всяко обновяване на пакета, който ги предоставя, иначе първото обновяване оставя след себе си счупен тунел. Третото е дали конкретен контрол наистина изисква chroot; ако изискването всъщност е за разделяне на привилегии, смяната на акаунта може да е достатъчна сама.

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

Какво трябва да съдържа работещ затвор

Затвор, който изпълнява команди, се нуждае от двоичния файл, всяка библиотека, към която се свързва, и всеки възел на устройство, който демонът отваря късно. Копирайте частите и ги тествайте без 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. Стъпката, при която тунелът се чупи, посочва границата, и избягвате преизграждане на затвор, който никога не е бил причината.

Когато отново маршрутизира, стартирайте една клиентска сесия с по-висока подробност и прочетете реда, който посочва командата или неуспешното право. Този ред струва повече от изтичането на времето, което клиентът в крайна сметка съобщава.

Подобни статии