Служба запускається, клієнт під'єднується, і на боці сервера маршрут так і не з'являється. Або демон відмовляється запускатися і називає команду, яку не зміг виконати. Обидва результати дотримуються тих самих трьох рядків, які зазвичай копіюють разом із посібника з посилення: перехід на непривілейований обліковий запис, відмова від групи та зміна кореня файлової системи. Лише один із трьох приховує файли, і лише один із них забирає право змінювати таблицю маршрутизації. Розділити їх — це спосіб дізнатися, який рядок вам насправді потрібен.

Що в'язниця прибирає, а демону це все ще потрібно

Зміна кореня відбувається після запуску, тому демон зберігає все, що вже відкрив, і втрачає все, що відкрив би пізніше. Будь-який помічник, який з'єднання запускає після цього моменту, має існувати всередині нового кореня разом із завантажуваними спільними бібліотеками. У в'язниці, зібраній із файлу конфігурації та сертифіката, немає ні того, ні іншого.

Перехід на непривілейований обліковий запис — окреме обмеження. Процес, який відмовився від 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. Крок, на якому тунель ламається, указує межу, і ви уникаєте перебудови в'язниці, яка ніколи не була причиною.

Коли маршрутизація знову працює, запустіть один сеанс клієнта з вищою докладністю і прочитайте рядок, який називає команду або відсутнє право. Цей рядок цінніший за тайм-аут, який клієнт зрештою повідомляє.

Схожі статті