Повезивање RADIUS-а са OpenVPN-ом: прикључак или скрипт-кука?
Стари RADIUS прикључак је везан за сборку сервера за коју је састављен. Замењује га кука auth-user-pass-verify, али поверење преноси у вашу скрипту.
Прикључак се још препоручује у темама старијим од тренутних сборки, а на серверу састављеном јуче не успева при учитавању. Ово није грешка у конфигурацији која се поправља путем. Прикључак и скрипт-кука решавају исти проблем на различитим слојевима, а прелазак са једног на други мења шта треба инсталирати, шта ради са серверским привилегијама и шта вам неуспела пријава заправо каже.
Мит: прикључак је подржани пут
Прикључак је заједнички објекат учитан у процес OpenVPN-а, зато мора да одговара интерфејсу који тај процес излаже. Сборке се мењају, паковање се мења, а библиотека састављена за старији интерфејс једноставно одбија да се учита. Ништа у серверској конфигурацији не може да премости тај јаз, зато савет „само инсталирај radiusplugin“ завршава сервером који се не подиже.
Скрипт-кука наместо тога стоји изван процеса. OpenVPN извршава програм, даје му акредитиве и чита пресуду назад. Управо то одвајање јој омогућава да преживи надоградње, а такође је чини вашом одговорношћу на начин на који прикључак никада није био.
Ниједан приступ није безбеднији по својој конструкцији. Један извршава туђи код унутар демона; други извршава ваш код поред њега са акредитивима у руци. Право питање је који од та два ризика заиста можете да управљате.
Шта је прикључак повезивао
Прикључак је носио сопствену конфигурациону датотеку са RADIUS домаћином, заједничком тајном, бројем покушаја и временским ограничењем, а серверска конфигурација га је наводила једним редом. Руковање акредитивима остајало је у серверском процесу, што значи да лозинка никада није прешла границу процеса коју је администратор морао да обезбеди.
Цена је била повезаност. Свака надоградња OpenVPN-а ризиковала је некомпатибилан интерфејс, а свака дистрибуција која поново гради пакет ризиковала је библиотеку која више не одговара. Када се то догоди, отказ је гласан и тренутан, и то је једина милост дизајна.
Ако се такав прикључак још учитава на вашој сборци, он може бити мања оперативна површина. Потврдите интерфејс за који је направљен, држите га прикованог за сборку коју сте тестирали и третирајте сваку надоградњу као промену која захтева пун тест пријаве, а не као рутинско ажурирање пакета.
Чему скрипт-кука заиста верује
Кука се конфигурише са auth-user-pass-verify и механизмом достављања: променљивим окружења или привременом датотеком. У форми окружења OpenVPN захтева script-security 3, документовани ниво који дозвољава излагање лозинке скриптама. Тај ниво је намерно слабљење подразумеваног и треба га третирати као дозволу са приложеним образложењем.
Све чега скрипта дотакне наслеђује то поверење. Мора бити у власништву root-а, не сме бити уписива за групу или остале, мора бити наведена апсолутном путањом и без места где непоуздана вредност стиже до љуске. Ставите сваку променљиву у наводнике, одбијте неочекиване знакове и никада не градите команду од датог корисничког имена. Скрипта која ради као root при сваком покушају пријаве заслужује један преглед управо због та четири својства.
ls -l /usr/local/sbin/radius-auth.sh
stat -c '%U %a' /usr/local/sbin/radius-auth.sh
Форма достављања датотеком избегава проблем наслеђивања окружења и предаје акредитиве скрипти преко привремене датотеке са ограниченим дозволама. Ако ваш клијент то подржава, обично је боље подразумевано, иако при отказу додаје још један објекат за чишћење.
Излазни кодови одлучују да ли ћете пропасти отворено
Излазни статус скрипте је пресуда: нула прихвата, не-нула одбија. Образац који ствара проблеме је shell скрипта која прихвата само када одговор RADIUS-а садржи одређени токен прихватања и враћа неуспех за све остало, јер то спаја три различита догађаја у један одговор. Погрешна лозинка, недоступан сервер и деформисан одговор постају исти одбијање.
Одвојте те случајеве у скрипти иако кука може да врати само прихвати или одбиј. Записујте резултат позадинског система одвојено, алармирајте за временска ограничења и транспортне грешке и учините јасним у надзору када аутентификација пада зато што услуга не ради, а не зато што корисници погрешно куцају.
Две навике одржавају остатак разумним. Ако је RADIUS ауторитет, требало би да буде једино место где се лозинка проверава, јер табела сенке ствара два одговора на исто питање, а други је нападна површина коју нико не надгледа. И запамтите да се кука поново позива при сваком покушају, па спора скрипта са нестрпљивим клијентом постаје појачивач за погађање лозинки, осим ако додате одлагање или политику на страни RADIUS-а.
Чега се одричете када сертификат нестане
Многа распоређивања овог облика потпуно искључују проверу клијентског сертификата, остављајући корисничко име и лозинку као целу тврдњу клијента. Оно што нестаје са тим подешавањем је идентитет заснован на сертификату. Канал остаје шифрован, али једино што именује клијента је пресуда RADIUS-а. Све низводно што се раније ослањало на субјекат сертификата сада мора да се ослања на корисничко име.
Задржите заштиту контролног канала да неаутентификовани партнер не може да истражује или преплави руковање, и користите username-as-common-name када конфигурација по кориснику зависи од заједничког имена. Управљани пролази то често решавају другачије, завршавајући аутентификацију сертификатом на пролазу који говори EAP-TLS са RADIUS-ом, и у том случају ниједна од ових серверских директива не важи. Копирајте модел који документује ваша платформа, а не онај суседног производа. Важне директиве се довољно разликују да њихово мешање даје конфигурацију која се парсира и затим никог не аутентификује.