Pozwól każdemu kontu logować się normalnie, ale zezwól na korzystanie z VPN tylko jednej grupie. PAM może wyrazić tę różnicę bez drugiego magazynu haseł, a wtyczkę OpenVPN można skierować do usługi zawierającej tylko zamierzone kontrole. Sztuczka polega na zbudowaniu tej usługi bez przypadkowego odziedziczenia systemowego stosu.

Ten przewodnik zaczyna od nazwy usługi wtyczki, buduje politykę, a następnie testuje trzy wyniki, które mają znaczenie: członka, osobę z zewnątrz z prawidłowym hasłem i błędne dane logowania.

Dlaczego osobna usługa PAM

Wtyczka auth-pam przyjmuje nazwę usługi jako argument. Ta nazwa wybiera plik w /etc/pam.d, a stos w tym pliku jest tym, co działa podczas logowania VPN. Jeśli podasz tę samą nazwę, której używa logowanie systemowe, odziedziczysz każdą decyzję w tym stosie, łącznie z dodanymi później z niepowiązanych powodów.

Zamiast tego utwórz dedykowaną usługę. Zacznij od działającego stosu, który już uwierzytelnia wobec zamierzonego backendu, na przykład lokalnego pliku haseł, SSSD lub usługi katalogowej, a następnie dodaj regułę kwalifikowalności. Kopiowanie dwóch linii do pustego pliku to częsty błąd: wygaśnięcie hasła, blokada konta i inne kontrole mogą znajdować się w stosie, którego nie skopiowano.

Oddzielenie usługi ogranicza też zakres szkód. Reguła tylko dla VPN we wspólnym stosie może odmówić dostępu SSH lub konsoli wszystkim, co zmienia zmianę dostępu w awarię.

Pisanie reguły grupy

Sprawdzenie kwalifikowalności należy do fazy konta, po weryfikacji danych logowania. Reguła taka jak account required pam_succeed_if.so user ingroup vpnusers pozwala kontynuować przetwarzanie tylko wtedy, gdy uwierzytelniony użytkownik jest członkiem tej grupy.

Ta linia to fragment, a nie kompletna usługa. Zintegruj ją tam, gdzie dociera każda akceptowana ścieżka, i sprawdź flagi sterujące wokół niej. Sterowanie sufficient lub skok wcześniej w stosie może zakończyć przetwarzanie, zanim uruchomi się twoja reguła, co zamienia ograniczenie w sugestię.

Nie dodawaj use_uid z przyzwyczajenia. Bez tego moduł ocenia użytkownika, który się uwierzytelnia; z tym moduł ocenia konto, pod którym działa proces OpenVPN, czyli zwykle root lub konto usługi, a więc nie osobę logującą się.

Członkostwo w grupie pochodzi z rozwiązywania tożsamości w systemie, a nie z nazwy, którą rozpoznajesz. Dla użytkowników katalogu potwierdź, że ten sam backend odpowiada na zapytania grupowe dla tego użytkownika, ponieważ lokalna grupa o znanej nazwie to inny obiekt niż grupa katalogowa o tej samej nazwie.

Pułapki kolejności i tożsamości

Umieść regułę grupy po stosie uwierzytelniania i po każdej kontroli, która nadal musi obowiązywać, ale przed kontrolami konta, które zachowujesz, lub obok nich. PAM ocenia moduły w kolejności pliku, a wartość sterująca w każdym wierszu decyduje, czy błąd jest ostateczny.

Uważaj na podwójne stosy. Częsty wzorzec to include, który już zawiera regułę konta, a po nim twoja własna reguła grupy, co daje dwie decyzje tam, gdzie oczekiwałeś jednej. Czytaj dołączony plik, nie tylko ten, który edytowałeś. Szybkim sposobem na zobaczenie faktycznej kolejności jest czytanie pliku od góry do dołu i notowanie każdej wartości sterującej.

Zachowaj nienaruszone pozostałe wymagania wstępu. Pomyślne hasło nie zastępuje kontroli certyfikatu, drugiego czynnika ani autoryzacji po połączeniu, a ta polityka nie zastępuje żadnego z nich. Decyduje tylko, czy konto kwalifikuje się do rozważenia pod kątem dostępu VPN.

Testowanie członków, osób z zewnątrz i błędnych haseł

Przetestuj trzy przypadki, zanim uznasz politykę za gotową. Członek łączy się poprawnie. Prawidłowe konto spoza grupy uwierzytelnia swoje hasło, ale odmawia się mu dostępu VPN. Błędne hasło dla dowolnego konta jest odrzucane na etapie uwierzytelniania, a nie przez regułę grupy.

Oglądaj błąd widoczny dla klienta i dziennik serwera razem, ponieważ oba niepowodzenia mogą wyglądać podobnie dla łączącej się osoby. Rozróżnienie ma znaczenie dla wsparcia: osoba z zewnątrz z poprawnym hasłem potrzebuje zmiany grupy, a błędne hasło wymaga zresetowania danych logowania.

Trzymaj otwartą drugą sesję podczas edycji PAM i po zmianie sprawdź także zwykłe logowanie SSH. Sensem dedykowanej usługi jest to, że logowanie systemowe powinno pozostać nienaruszone, a jedynym sposobem, by to wiedzieć, jest przetestowanie tego.

Jeśli coś się zepsuje, przywróć poprzedni plik usługi z kopii. Reguła, której chcesz, jest łatwa do sformułowania: członkostwo czyni konto kwalifikującym się do dostępu VPN, a wszystkie inne wymagane kontrole nadal obowiązują.

Powiązane artykuły