Begränsa OpenVPN-inloggningar till en grupp med en PAM-princip
En dedikerad PAM-tjänst kan släppa in bara medlemmar i en VPN-grupp utan att röra systemövergripande inloggningsregler. Peka auth-pam-insticksmodulen på den och testa resultaten.
Håll varje konto kapabelt att logga in normalt, men låt bara en grupp använda VPN. PAM kan uttrycka den skillnaden utan ett andra lösenordslager, och OpenVPN-insticksmodulen kan pekas mot en tjänst som bara innehåller de kontroller du avser. Knepet är att bygga den tjänsten utan att av misstag ärva en systemövergripande stack.
Genomgången här börjar vid insticksmodulens tjänstenamn, bygger en princip och testar sedan de tre utfall som spelar roll: en medlem, en utomstående med giltigt lösenord och en dålig inloggningsuppgift.
Varför en egen PAM-tjänst
auth-pam-insticksmodulen tar ett tjänstenamn som argument. Namnet väljer en fil under /etc/pam.d, och stacken i den filen är det som körs vid en VPN-inloggning. Om du anger samma namn som en systemövergripande inloggning använder ärver du varje beslut i den stacken, inklusive de som lades till senare av orelaterade skäl.
Skapa i stället en dedikerad tjänst. Börja från en fungerande stack som redan autentiserar mot den avsedda backend, till exempel en lokal lösenordsfil, SSSD eller en katalogtjänst, och lägg sedan till behörighetsregeln. Att kopiera två rader till en tom fil är det vanliga misstaget: lösenordsutgång, kontolåsning och andra kontroller kan ligga i stacken du inte kopierade.
Att separera tjänsten begränsar också skadans omfattning. En regel som bara gäller VPN i en delad stack kan neka SSH- eller konsolåtkomst för alla, vilket gör en åtkomständring till ett avbrott.
Skriva gruppregeln
Behörighetskontrollen hör till kontofasen, efter att inloggningsuppgiften verifierats. En regel som account required pam_succeed_if.so user ingroup vpnusers låter behandlingen fortsätta bara när den autentiserade användaren är medlem i den gruppen.
Den raden är ett fragment, inte en fullständig tjänst. Integrera den där varje accepterad väg når den, och kontrollera styrflaggorna runt den. En sufficient- eller hoppkontroll tidigare i stacken kan avsluta behandlingen innan din regel körs, vilket gör begränsningen till ett förslag.
Lägg inte till use_uid av vana. Utan den utvärderar modulen användaren som autentiseras; med den utvärderar modulen kontot som OpenVPN-processen körs under, vilket vanligtvis är root eller ett tjänstekonto och därför inte personen som loggar in.
Gruppmedlemskap kommer från systemets identitetsuppslagning, inte från ett namn du känner igen. För kataloganvändare, bekräfta att samma backend svarar på gruppfrågor för den användaren, eftersom en lokal grupp med ett känt namn är ett annat objekt än katalogruppen med samma namn.
Fällor i ordning och identitet
Placera gruppregeln efter autentiseringsstacken och efter varje kontroll som fortfarande måste gälla, men före eller bredvid de kontokontroller du behåller. PAM utvärderar moduler i filordning, och styrvärdet på varje rad avgör om ett fel är slutgiltigt.
Se upp för dubblerade stackar. Ett vanligt mönster är en include som redan innehåller en kontoregel, följd av din egen gruppregel, vilket ger två beslut där du förväntade dig ett. Läs den inkluderade filen, inte bara den du redigerade. Ett snabbt sätt att se den effektiva ordningen är att läsa filen uppifrån och ned och anteckna varje styrvärde.
Håll de andra antagningskraven intakta. Ett lyckat lösenord ersätter inte certifikatkontroller, en andra faktor eller auktorisering efter anslutning, och denna princip är inte en ersättning för någon av dem. Den avgör bara om kontot är kvalificerat att övervägas för VPN-åtkomst.
Testa medlemmar, utomstående och fel lösenord
Testa tre fall innan du anser principen klar. En medlem ansluter. Ett giltigt konto utanför gruppen autentiserar sitt lösenord men nekas VPN-åtkomst. Ett fel lösenord för något av kontona avvisas i autentiseringsfasen, inte av gruppregeln.
Titta på felet som är synligt för klienten och serverloggen tillsammans, eftersom båda felen kan se likadana ut för personen som ansluter. Skillnaden är viktig för support: en utomstående med rätt lösenord behöver en gruppändring, medan ett fel lösenord kräver en återställning av inloggningsuppgifterna.
Håll en andra session öppen medan du redigerar PAM, och verifiera även vanlig SSH-inloggning efter ändringen. Poängen med den dedikerade tjänsten är att systeminloggningen ska vara opåverkad, och det enda sättet att veta det är att testa det.
Om något går sönder, återställ den tidigare tjänstefilen från en kopia. Regeln du vill ha är enkel att formulera: medlemskap gör ett konto kvalificerat för VPN-åtkomst, och alla andra nödvändiga kontroller gäller fortfarande.