Halten Sie jedes Konto in der Lage, sich normal anzumelden, aber erlauben Sie nur einer Gruppe die Nutzung des VPN. PAM kann diesen Unterschied ohne einen zweiten Passwortspeicher ausdrücken, und das OpenVPN-Plugin kann auf einen Dienst gerichtet werden, der nur die beabsichtigten Prüfungen enthält. Der Trick besteht darin, diesen Dienst aufzubauen, ohne versehentlich einen systemweiten Stack zu erben.

Die folgende Tour beginnt beim Dienstnamen des Plugins, baut eine Richtlinie auf und testet dann die drei Ergebnisse, auf die es ankommt: ein Mitglied, ein Außenseiter mit gültigem Passwort und ein ungültiges Anmeldeinformationspaar.

Warum ein eigener PAM-Dienst

Das auth-pam-Plugin nimmt einen Dienstnamen als Argument. Dieser Name wählt eine Datei unter /etc/pam.d aus, und der Stack in dieser Datei ist das, was bei einer VPN-Anmeldung läuft. Wenn Sie denselben Namen übergeben, den eine systemweite Anmeldung verwendet, erben Sie jede Entscheidung in diesem Stack, einschließlich der später aus unabhängigen Gründen hinzugefügten.

Erstellen Sie stattdessen einen eigenen Dienst. Beginnen Sie mit einem funktionierenden Stack, der bereits gegen das vorgesehene Backend authentifiziert, etwa eine lokale Passwortdatei, SSSD oder einen Verzeichnisdienst, und fügen Sie dann die Berechtigungsregel hinzu. Zwei Zeilen in eine leere Datei zu kopieren ist der häufige Fehler: Passwortablauf, Kontosperrung und andere Prüfungen können in dem Stack liegen, den Sie nicht kopiert haben.

Die Trennung des Dienstes begrenzt auch den Schaden. Eine reine VPN-Regel in einem gemeinsam genutzten Stack kann SSH- oder Konsolenzugriff für alle verweigern, was eine Zugriffsänderung in einen Ausfall verwandelt.

Die Gruppenregel schreiben

Die Berechtigungsprüfung gehört in die Konto-Phase, nachdem die Anmeldeinformationen verifiziert wurden. Eine Regel wie account required pam_succeed_if.so user ingroup vpnusers lässt die Verarbeitung nur dann fortfahren, wenn der authentifizierte Benutzer Mitglied dieser Gruppe ist.

Diese Zeile ist ein Fragment, kein vollständiger Dienst. Binden Sie sie dort ein, wo jeder akzeptierte Pfad sie erreicht, und prüfen Sie die Kontrollflags darum herum. Eine sufficient- oder Sprung-Kontrolle weiter oben im Stack kann die Verarbeitung beenden, bevor Ihre Regel läuft, was die Beschränkung zu einem Vorschlag macht.

Fügen Sie use_uid nicht aus Gewohnheit hinzu. Ohne sie bewertet das Modul den Benutzer, der authentifiziert wird; mit ihr bewertet das Modul das Konto, unter dem der OpenVPN-Prozess läuft, also normalerweise root oder ein Dienstkonto und damit nicht die Person, die sich anmeldet.

Die Gruppenmitgliedschaft stammt aus der Identitätsauflösung des Systems, nicht aus einem Namen, den Sie kennen. Bestätigen Sie bei Verzeichnisbenutzern, dass dasselbe Backend Gruppenabfragen für diesen Benutzer beantwortet, denn eine lokale Gruppe mit vertrautem Namen ist ein anderes Objekt als die Verzeichnisgruppe desselben Namens.

Reihenfolge- und Identitätsfallen

Platzieren Sie die Gruppenregel nach dem Authentifizierungsstack und nach jeder Prüfung, die weiterhin gelten muss, aber vor oder neben den Kontoprüfungen, die Sie behalten. PAM bewertet Module in Dateireihenfolge, und der Kontrollwert jeder Zeile entscheidet, ob ein Fehler endgültig ist.

Achten Sie auf doppelte Stacks. Ein häufiges Muster ist ein Include, das bereits eine Kontoregel enthält, gefolgt von Ihrer eigenen Gruppenregel, was zwei Entscheidungen erzeugt, wo Sie eine erwartet haben. Lesen Sie die eingebundene Datei, nicht nur die bearbeitete. Ein schneller Weg, die effektive Reihenfolge zu sehen, ist, die Datei von oben nach unten zu lesen und jeden Kontrollwert zu notieren.

Halten Sie die übrigen Zulassungsanforderungen intakt. Ein erfolgreiches Passwort ersetzt keine Zertifikatsprüfungen, keinen zweiten Faktor und keine Autorisierung nach der Verbindung, und diese Richtlinie ist kein Ersatz für irgendeine davon. Sie entscheidet nur, ob das Konto für den VPN-Zugriff in Betracht kommt.

Mitglieder, Außenseiter und falsche Passwörter testen

Testen Sie drei Fälle, bevor Sie die Richtlinie als fertig betrachten. Ein Mitglied verbindet sich erfolgreich. Ein gültiges Konto außerhalb der Gruppe authentifiziert sein Passwort, ihm wird aber der VPN-Zugriff verweigert. Ein falsches Passwort für eines der Konten wird in der Authentifizierungsphase abgelehnt, nicht durch die Gruppenregel.

Betrachten Sie den clientseitig sichtbaren Fehler und das Serverprotokoll zusammen, denn beide Fehlschläge können für die verbindende Person ähnlich aussehen. Der Unterschied ist für den Support wichtig: Ein Außenseiter mit korrektem Passwort braucht eine Gruppenänderung, während ein falsches Passwort ein Zurücksetzen der Anmeldeinformationen erfordert.

Halten Sie eine zweite Sitzung offen, während Sie PAM bearbeiten, und prüfen Sie nach der Änderung auch die normale SSH-Anmeldung. Der Sinn des eigenen Dienstes ist, dass die Systemanmeldung unberührt bleibt, und das einzige Mittel, dies zu wissen, ist, es zu testen.

Wenn etwas kaputtgeht, stellen Sie die vorherige Dienstdatei aus einer Kopie wieder her. Die gewünschte Regel ist einfach zu formulieren: Mitgliedschaft macht ein Konto für den VPN-Zugriff berechtigt, und jede andere erforderliche Prüfung gilt weiterhin.

Ähnliche Artikel