Абмежаваць уваходы OpenVPN адной групай з дапамогай палітыкі PAM
Асобная служба PAM можа дапускаць толькі ўдзельнікаў групы VPN, не закранаючы агульнасістэмныя правілы ўваходу. Накіруйце плагін auth-pam на яе і праверце вынікі.
Дазвольце кожнаму ўліковаму запісу ўваходзіць звычайна, але толькі адна група можа карыстацца VPN. PAM можа выказаць гэтую розніцу без другога сховішча пароляў, а плагін OpenVPN можна накіраваць на службу, якая змяшчае толькі тыя праверкі, якія вы маеце на ўвазе. Хітрасць у тым, каб пабудаваць гэтую службу, не ўспадкаваўшы выпадкова агульнасістэмны стек.
Гэты разбор пачынаецца з імя службы плагіна, будуе палітыку, а затым правярае тры вынікі, якія маюць значэнне: удзельнік, старонні чалавек з правільным паролем і благія ўліковыя даныя.
Навошта асобная служба PAM
Плагін auth-pam прымае імя службы як свой аргумент. Гэтае імя выбірае файл у /etc/pam.d, і менавіта стек з гэтага файла выконваецца падчас уваходу праз VPN. Калі вы перадасце тое ж імя, што выкарыстоўвае агульнасістэмны ўваход, вы ўспадкуеце кожнае рашэнне з гэтага стэка, уключаючы тыя, што былі дададзены пазней з незвязаных прычын.
Стварыце замест гэтага асобную службу. Пачніце з працоўнага стэка, які ўжо правярае патрэбны backend, напрыклад лакальны файл пароляў, SSSD або службу каталога, затым дадайце правіла дапушчальнасці. Капіраванне двух радкоў у пусты файл — распаўсюджаная памылка: тэрмін дзеяння пароля, блакіроўка ўліковага запісу і іншыя праверкі могуць знаходзіцца ў стэку, які вы не скапіявалі.
Аддзяленне службы таксама абмяжоўвае зону ўплыву. Правіла толькі для VPN у агульным стэку можа забараніць доступ па SSH або праз кансоль для ўсіх, і гэта ператварае змяненне доступу ў збой.
Напісанне правіла групы
Праверка дапушчальнасці належыць да фазы ўліковага запісу, пасля праверкі ўліковых даных. Правіла накшталт account required pam_succeed_if.so user ingroup vpnusers дазваляе апрацоўцы працягвацца, толькі калі пацверджаны карыстальнік з'яўляецца ўдзельнікам гэтай групы.
Гэты радок — фрагмент, а не поўная служба. Убудуйце яго туды, дзе да яго даходзіць кожны дапушчаны шлях, і праверце кіравальныя сцягі вакол яго. Кіраванне sufficient або пераход раней у стэку могуць скончыць апрацоўку да таго, як ваша правіла выканаецца, і гэта ператварае абмежаванне ў прапанову.
Не дадавайце use_uid па звычцы. Без яго модуль ацэньвае карыстальніка, які праходзіць праверку; з ім модуль ацэньвае ўліковы запіс, пад якім працуе працэс OpenVPN, а гэта звычайна root або службовы ўліковы запіс, і таму не той чалавек, які ўваходзіць.
Удзельніцтва ў групе паходзіць з сістэмнага вырашэння ідэнтычнасці, а не з імя, якое вы ведаеце. Для карыстальнікаў каталога пацвердзіце, што той жа backend адказвае на групавыя запыты для гэтага карыстальніка, бо лакальная група са знаёмым імем — іншы аб'ект, чым група каталога з тым жа імем.
Пасткі парадку і ідэнтычнасці
Змесціце правіла групы пасля стэка аўтэнтыфікацыі і пасля любой праверкі, якая павінна заставацца ў сіле, але перад праверкамі ўліковага запісу, якія вы захоўваеце, або побач з імі. PAM ацэньвае модулі ў парадку файла, і кіравальнае значэнне ў кожным радку вырашае, ці з'яўляецца збой канчатковым.
Сцеражыцеся дубляваных стэкаў. Распаўсюджаны шаблон — уключэнне, якое ўжо змяшчае правіла ўліковага запісу, а затым ваша ўласнае правіла групы, што дае два рашэнні там, дзе вы чакалі адно. Чытайце ўключаны файл, а не толькі той, які вы рэдагавалі. Хуткі спосаб убачыць фактычны парадак — чытаць файл зверху ўніз і адзначаць кожнае кіравальнае значэнне.
Захавайце іншыя патрабаванні допуску нязменнымі. Паспяховы пароль не замяняе праверку сертыфіката, другі фактар або аўтарызацыю пасля злучэння, і гэтая палітыка не з'яўляецца заменай ні аднаго з іх. Яна вырашае толькі, ці можа ўліковы запіс разглядацца для доступу да VPN.
Праверка ўдзельнікаў, старонніх і благіх пароляў
Праверце тры выпадкі, перш чым лічыць палітыку гатовай. Удзельнік паспяхова падключаецца. Сапраўдны ўліковы запіс па-за групай пацвярджае свой пароль, але атрымлівае адмову ў доступе да VPN. Няправільны пароль для любога з запісаў адхіляецца на этапе аўтэнтыфікацыі, а не правілам групы.
Глядзіце на памылку, бачную кліенту, і журнал сервера разам, бо абодва збоі могуць выглядаць падобна для чалавека, які падключаецца. Розніца важная для падтрымкі: старонняму чалавеку з правільным паролем патрэбна змяненне групы, а няправільны пароль патрабуе скіду ўліковых даных.
Трымайце другую сесію адкрытай, пакуль рэдагуеце PAM, і праверце таксама звычайны ўваход па SSH пасля змены. Сэнс асобнай службы ў тым, што сістэмны ўваход павінен заставацца незакранутым, і адзіны спосаб даведацца гэта — праверыць.
Калі нешта зламалася, аднавіце папярэдні файл службы з копіі. Правіла, якое вам патрэбна, проста сфармуляваць: удзельніцтва робіць запіс дапушчальным для доступу да VPN, і ўсе астатнія абавязковыя праверкі па-ранейшаму дзейнічаюць.