Включите auth-nocache, и предупреждение о кэшировании пароля исчезает вместе с копией учётных данных, которую OpenVPN держал для следующего пересогласования. Станет ли это запросом, тихой повторной попыткой или оборванным туннелем, зависит от того, откуда учётные данные возьмутся во второй раз. Поэтому это сравнение форм развёртывания, а не приговор этой опции. Прочитайте ту форму, которую вы действительно используете, прежде чем править любой профиль.

Откуда должен взяться второй набор учётных данных

OpenVPN применяет auth-nocache к секретам, которые собирают auth-user-pass и askpass: после использования процесс отбрасывает их вместо того, чтобы хранить до следующего рукопожатия. Пересогласование приходит по таймеру, по умолчанию раз в час, поэтому второй запрос приходит спустя много времени после того, как человек, вводивший пароль, уже ушёл. Этот разрыв — вся суть. Если кэш оставлен включённым, клиент воспроизводит сохранённую копию, никого не спрашивая; если выключен, ему приходится искать секрет в другом месте или терпеть неудачу.

Поэтому перечислите все места, откуда секрет может взяться в этот момент, и честно скажите, какие из них есть на хосте. Человек за терминалом, файл, который могут прочитать auth-user-pass или askpass, или выданный сервером токен сеанса — вот три, которые здесь важны. Если ни одного из них нет, пересогласование срывается через час после изменения, а не в тот момент, когда вы его сделали.

Три формы, три точки отказа

Настольный клиент с человеком перед ним — мягкий случай: запрос возвращается, кто-то снова вводит пароль, и цена — внимание. Служба, контейнер или маршрутизатор, запускающий OpenVPN без терминала, — жёсткий случай: отвечать некому, и соединение, которое раньше было тихим, теперь обрывает туннель. Гибрид находится между ними и ведёт себя как настольный случай, пока не исчезнет сеанс, который мог ответить на запрос. Их разделяет не наличие GUI, а наличие источника учётных данных в момент пересогласования.

Отнесите своё развёртывание к одной из этих трёх форм, прежде чем что-то менять, потому что совет, который вы найдёте в интернете, почти всегда написан для первой. Применить настольный ответ к службе без терминала — это способ, которым туннель, работавший месяцами, начинает падать каждый час.

Директива или флаг: выберите одно и знайте, что именно использовали

Внутри профиля auth-nocache — отдельная строка; в вызове, который явно называет профиль, это флаг в этой командной строке, и руководство OpenVPN перечисляет обе формы. Обе делают одно и то же с сохранением учётных данных, и ни одна не трогает тип интерфейса и не исправляет постороннее предупреждение в том же журнале. Разница в стойкости: флаг охватывает только тот запуск, поэтому служба, перезапущенная из unit-файла или скрипта-обёртки, не получит его, если обёртка тоже его не передаст.

auth-nocache
openvpn --config /path/client.ovpn --auth-nocache

Решите, какой артефакт владеет настройкой, измените её там и больше нигде. Профиль, отредактированный на ноутбуке, плюс unit systemd, который перекрывает его флагом, — та самая пара, дающая противоречивое поведение после перезагрузки.

Файл учётных данных переносит секрет, а не удаляет его

Указание auth-user-pass на файл даёт источник каждому последующему пересогласованию и кладёт пароль туда, где он переживает перезагрузки. Спросите, кто может читать этот файл, сможет ли демон прочитать его после отказа от привилегий и что будет, если файловая система смонтирована только для чтения или представление контейнера скрывает путь. Секрет на диске и секрет в памяти — разные проблемы, и решение одной оставляет другую на месте. Ротация — тот шаг, который пропускают: пароль, изменённый на сервере, но не в файле, даёт сбой, который читается как сетевая неисправность.

Держите файл во владении учётной записи, запускающей демон, недоступным для чтения никому другому и вне резервных копий, покидающих хост. Серверная опция OpenVPN auth-gen-token выдаёт клиенту токен сеанса после успешного входа, а это меньшая вещь, которую можно оставить лежать, чем пароль учётной записи. Запишите шаг ротации рядом с файлом в любом случае, потому что файл обычно переживает человека, создавшего его.

Растягивание пересогласования переносит цену, но не убирает её

Другое предложение — поднять reneg-sec, пока запрос не станет достаточно редким, чтобы его игнорировать. Это переписывает график ротации ключей сеанса и отодвигает ту же проблему учётных данных в более поздний и менее предсказуемый момент; источник учётных данных оно не создаёт. Политику, которая по какой-то причине обновляет ключи по графику, не стоит ослаблять только ради того, чтобы не вводить пароль.

Проверяйте переподключение, а не сеанс, в котором сидите, потому что живой сеанс ничего не доказывает. Уроните туннель со стороны сервера или перезапустите клиентскую службу и посмотрите, что сделает следующее пересогласование, когда за клавиатурой никого нет. Если он переподключается, назовите механизм, который выдал секрет; если нет, вы нашли реальную цену этой опции на данном хосте. Любой исход даёт ответ, который держится во время сбоя, а не тот, что держался во время тестирования.

В управляемом парке владелец развёртывания должен уметь назвать три вещи: откуда берутся учётные данные, где они хранятся и кто их ротирует. Если любой из этих ответов — человек, настраивавший хост, опция там пока не безопасна.

Похожие статьи