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

Міф: плагін — гэта падтрымоўваны шлях

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

Падобныя артыкулы