Restrângeți autentificările OpenVPN la un singur grup cu o politică PAM
Un serviciu PAM dedicat poate admite doar membrii unui grup VPN fără a atinge regulile de autentificare la nivel de sistem. Îndreptați pluginul auth-pam spre el și testați rezultatele.
Lăsați fiecare cont să se autentifice normal, dar permiteți doar unui grup să folosească VPN-ul. PAM poate exprima această diferență fără un al doilea depozit de parole, iar pluginul OpenVPN poate fi îndreptat spre un serviciu care conține doar verificările dorite. Trucul este să construiți acel serviciu fără a moșteni accidental un stack la nivel de sistem.
Parcursul de aici începe de la numele serviciului pluginului, construiește o politică și apoi testează cele trei rezultate care contează: un membru, un outsider cu o parolă validă și o acreditare greșită.
De ce un serviciu PAM separat
Pluginul auth-pam ia un nume de serviciu ca argument. Acel nume selectează un fișier sub /etc/pam.d, iar stackul din acel fișier este ceea ce rulează în timpul unei autentificări VPN. Dacă transmiteți același nume pe care îl folosește o autentificare la nivel de sistem, moșteniți fiecare decizie din acel stack, inclusiv cele adăugate ulterior din motive nelegate.
Creați în schimb un serviciu dedicat. Porniți de la un stack funcțional care autentifică deja către backendul dorit, cum ar fi un fișier local de parole, SSSD sau un serviciu de director, apoi adăugați regula de eligibilitate. Copierea a două linii într-un fișier gol este greșeala obișnuită: expirarea parolei, blocarea contului și alte verificări pot sta în stackul pe care nu l-ați copiat.
Separarea serviciului limitează și amploarea daunelor. O regulă doar pentru VPN într-un stack partajat poate refuza accesul SSH sau la consolă pentru toată lumea, ceea ce transformă o schimbare de acces într-o întrerupere.
Scrierea regulii de grup
Verificarea eligibilității aparține fazei de cont, după ce acreditarea a fost verificată. O regulă precum account required pam_succeed_if.so user ingroup vpnusers permite procesării să continue doar când utilizatorul autentificat este membru al acelui grup.
Acea linie este un fragment, nu un serviciu complet. Integrați-o acolo unde ajunge fiecare cale acceptată și verificați indicatorii de control din jurul ei. Un control sufficient sau un salt mai sus în stack poate încheia procesarea înainte ca regula dumneavoastră să ruleze, ceea ce transformă restricția într-o sugestie.
Nu adăugați use_uid din obișnuință. Fără el, modulul evaluează utilizatorul care se autentifică; cu el, modulul evaluează contul sub care rulează procesul OpenVPN, care este de obicei root sau un cont de serviciu și deci nu persoana care se autentifică.
Apartenența la grup vine din rezolvarea identității sistemului, nu dintr-un nume pe care îl recunoașteți. Pentru utilizatorii de director, confirmați că același backend răspunde la interogările de grup pentru acel utilizator, deoarece un grup local cu un nume familiar este un alt obiect decât grupul de director cu același nume.
Capcane de ordine și identitate
Plasați regula de grup după stackul de autentificare și după orice verificare care trebuie să se aplice în continuare, dar înaintea sau alături de verificările de cont pe care le păstrați. PAM evaluează modulele în ordinea fișierului, iar valoarea de control de pe fiecare linie decide dacă o eroare este finală.
Atenție la stackurile duplicate. Un model obișnuit este un include care conține deja o regulă de cont, urmat de propria regulă de grup, ceea ce produce două decizii acolo unde așteptați una. Citiți fișierul inclus, nu doar pe cel pe care l-ați editat. O modalitate rapidă de a vedea ordinea efectivă este să citiți fișierul de sus în jos și să notați fiecare valoare de control.
Păstrați intacte celelalte cerințe de admitere. O parolă corectă nu înlocuiește verificările de certificat, un al doilea factor sau autorizarea după conectare, iar această politică nu este un substitut pentru niciuna dintre ele. Decide doar dacă contul este eligibil pentru a fi luat în considerare pentru accesul VPN.
Testarea membrilor, a persoanelor din afară și a parolelor greșite
Testați trei cazuri înainte de a considera politica încheiată. Un membru se conectează cu succes. Un cont valid din afara grupului își autentifică parola, dar i se refuză accesul VPN. O parolă greșită pentru oricare dintre conturi este respinsă în faza de autentificare, nu de regula de grup.
Priviți împreună eroarea vizibilă pentru client și jurnalul serverului, deoarece ambele eșecuri pot părea similare persoanei care se conectează. Distincția contează pentru suport: un outsider cu parola corectă are nevoie de o schimbare de grup, în timp ce o parolă greșită necesită o resetare a acreditării.
Țineți o a doua sesiune deschisă în timp ce editați PAM și verificați și autentificarea SSH obișnuită după modificare. Scopul serviciului dedicat este ca autentificarea sistemului să rămână neafectată, iar singurul mod de a ști este să o testați.
Dacă ceva se strică, restaurați fișierul de serviciu anterior dintr-o copie. Regula pe care o doriți este simplu de enunțat: apartenența face un cont eligibil pentru accesul VPN, iar toate celelalte verificări obligatorii se aplică în continuare.