Houd elk account in staat normaal in te loggen, maar sta alleen één groep het gebruik van de VPN toe. PAM kan dat verschil uitdrukken zonder een tweede wachtwoordopslag, en de OpenVPN-plugin kan op een service worden gericht die alleen de controles bevat die je bedoelt. De truc is die service te bouwen zonder per ongeluk een systeembrede stack te erven.

De wandeling hier begint bij de servicenaam van de plugin, bouwt een beleid en test vervolgens de drie uitkomsten die ertoe doen: een lid, een buitenstaander met een geldig wachtwoord en ongeldige inloggegevens.

Waarom een aparte PAM-service

De auth-pam-plugin neemt een servicenaam als argument. Die naam selecteert een bestand onder /etc/pam.d, en de stack in dat bestand is wat er tijdens een VPN-login draait. Geef je dezelfde naam als een systeembrede login gebruikt, dan erf je elke beslissing in die stack, inclusief beslissingen die later om onverwante redenen zijn toegevoegd.

Maak in plaats daarvan een aparte service. Begin bij een werkende stack die al authenticeert tegen de bedoelde backend, zoals een lokaal wachtwoordbestand, SSSD of een directoryservice, en voeg dan de geschiktheidsregel toe. Twee regels in een leeg bestand kopiëren is de veelgemaakte fout: wachtwoordverloop, accountvergrendeling en andere controles kunnen in de stack staan die je niet hebt gekopieerd.

Het scheiden van de service beperkt ook de schade. Een regel die alleen voor VPN geldt in een gedeelde stack kan SSH- of consoletoegang voor iedereen weigeren, wat een toegangswijziging in een storing verandert.

De groepsregel schrijven

De geschiktheidscontrole hoort in de accountfase, nadat de inloggegevens zijn geverifieerd. Een regel zoals account required pam_succeed_if.so user ingroup vpnusers laat de verwerking alleen doorgaan wanneer de geauthenticeerde gebruiker lid is van die groep.

Die regel is een fragment, geen volledige service. Integreer hem waar elk geaccepteerd pad hem bereikt, en controleer de stuurvlaggen eromheen. Een sufficient- of sprongbesturing eerder in de stack kan de verwerking beëindigen voordat jouw regel loopt, wat de beperking tot een suggestie maakt.

Voeg use_uid niet uit gewoonte toe. Zonder die optie beoordeelt de module de gebruiker die wordt geauthenticeerd; met die optie beoordeelt de module het account waaronder het OpenVPN-proces draait, dat meestal root of een serviceaccount is en dus niet de persoon die inlogt.

Groepslidmaatschap komt uit de identiteitsresolutie van het systeem, niet uit een naam die je herkent. Bevestig voor directorygebruikers dat dezelfde backend groepsquery's voor die gebruiker beantwoordt, want een lokale groep met een bekende naam is een ander object dan de directorygroep met dezelfde naam.

Valkuilen van volgorde en identiteit

Plaats de groepsregel na de authenticatiestack en na elke controle die nog moet gelden, maar vóór of naast de accountcontroles die je houdt. PAM evalueert modules in bestandsvolgorde, en de stuurwaarde op elke regel bepaalt of een fout definitief is.

Let op dubbele stacks. Een veelvoorkomend patroon is een include die al een accountregel bevat, gevolgd door je eigen groepsregel, wat twee beslissingen oplevert waar je er één verwachtte. Lees het inbegrepen bestand, niet alleen het bestand dat je hebt bewerkt. Een snelle manier om de effectieve volgorde te zien is het bestand van boven naar beneden te lezen en elke stuurwaarde te noteren.

Houd de andere toelatingseisen intact. Een geslaagd wachtwoord vervangt geen certificaatcontroles, tweede factor of autorisatie na de verbinding, en dit beleid is geen vervanging voor een van die. Het bepaalt alleen of het account in aanmerking komt voor VPN-toegang.

Leden, buitenstaanders en foute wachtwoorden testen

Test drie gevallen voordat je het beleid als klaar beschouwt. Een lid maakt verbinding. Een geldig account buiten de groep authenticeert zijn wachtwoord maar krijgt geen VPN-toegang. Een verkeerd wachtwoord voor een van beide accounts wordt in de authenticatiefase geweigerd, niet door de groepsregel.

Bekijk de fout die de client ziet en de serverlog samen, omdat beide fouten voor de verbindende persoon op elkaar kunnen lijken. Het onderscheid is belangrijk voor ondersteuning: een buitenstaander met het juiste wachtwoord heeft een groepswijziging nodig, terwijl een verkeerd wachtwoord een reset van de inloggegevens vereist.

Houd een tweede sessie open terwijl je PAM bewerkt, en verifieer na de wijziging ook de gewone SSH-login. Het punt van de aparte service is dat de systeemlogin onaangetast moet blijven, en de enige manier om dat te weten is het testen.

Als er iets stukgaat, herstel dan het vorige servicebestand uit een kopie. De regel die je wilt is eenvoudig te zeggen: lidmaatschap maakt een account geschikt voor VPN-toegang, en elke andere vereiste controle blijft gelden.

Gerelateerde artikelen