Ograniczanie logowania do kont przy użyciu LDAP i PAM

14

Miałem nadzieję, że niektórzy guru PAM / LDAP mogą mi pomóc tutaj. Niedawno skonfigurowałem katalog LDAP na Ubuntu Server, aby przechowywać konta zarówno dla moich klientów (do użytku z systemami internetowymi), jak i pracowników (którzy będą musieli zalogować się przez SSH).

Uwierzytelnianie LDAP działa idealnie. Jednak nie mogę dostać pracy ograniczenia konta: Konta pracownicy będą mieli identyfikatory między 2001a 2999i będzie członkiem ssh-usersgrupy, aby umożliwić ich do logowania do serwerów.

Ograniczenia te zostały wydane w /etc/ldap.conf, i to pam_min_uid, pam_max_uidi pam_groupdn.

pam_groupdnzawiera pełną nazwę wyróżniającą dla mojej ssh-usersgrupy. pam_min_uid= 2000i pam_max_uid= 2999.

Teraz udało mi się je uruchomić, dodając:

account [success=1 default=ignore] pam_ldap.so

powyżej pam_unix.solinii w /etc/pam.d/common-account. Jednak lokalne konta Unix NIE mogą się zalogować: serwer SSH przerywa połączenie, gdy tylko spróbują.

Ustawiłem pam_ldap.somoduł na sufficientw powyższym pliku, ale wtedy niepoprawni użytkownicy otrzymują komunikat, że nie mogą się zalogować, ale i tak je rejestruje.

Jak więc ustawić te ograniczenia konta dla użytkowników LDAP, jednocześnie umożliwiając użytkownikom UNIX logowanie się?

Jak zapewne domyślacie się, jestem nowicjuszem w PAM, chociaż udało mi się uruchomić moduł „automatycznie twórz katalogi domowe” :-)

Wielkie dzięki, Andy

Andy Shellam
źródło

Odpowiedzi:

11

PAM ma możliwość ograniczenia dostępu na podstawie listy kontroli dostępu (przynajmniej na Ubuntu), która, podobnie jak odpowiedź kubanskamac (+1), traktuje grupy jako grupy posiksowe, niezależnie od tego, czy są przechowywane w LDAP, /etc/groupczy w NIS.

/etc/security/access.confto plik listy dostępu. W moim pliku umieszczam na końcu:

-:ALL EXCEPT root sysadmin (ssh-users):ALL

Zaprzecza to każdemu oprócz root, sysadmin oraz w grupie ssh-users (która jest w LDAP), gdziekolwiek się zalogują (drugi ALL).

Następnie w moim pliku konta PAM (jest to moduł konta) dodaję na samym końcu:

account required pam_access.so

co każe PAM użyć tego pliku. Działa uczta :-)

Andy Shellam
źródło
Warto zauważyć, że może być konieczne umieszczenie pam_access.so na samym początku pliku konta PAM, aby zadziałało.
crb
5

Po prostu bym użył

auth required    pam_listfile.so   sense=accept item=group file=/etc/groups.allow onerr=fail

zezwalać tylko na określone grupy (zarówno dla grup lokalnych, jak i LDAP). W ten sposób nie musisz nic wpisywać ldap.conf.

Jeśli chcesz zachować autoryzację na swój sposób, nie powinieneś filtrować użytkowników po przepustce „konto”. Uważam, że powinieneś to zrobić raczej po przejściu „auth”. Po drugie, jak możesz się przekonać, pam_unix przetwarza zarówno konta lokalne, jak i LDAP (przynajmniej na karcie „konto”), więc wydaje się, że pam_ldap wcale nie jest potrzebny.

EDYCJA: Po trzecie, jeśli nalegasz na posiadanie rzeczy związanych z „przejściem” na konto (które moim zdaniem mogą mieć dziwne skutki uboczne), twoja sekwencja powinna kończyć się: ..., „wystarczająca pam_ldap”, „wymagana pam_localuser”, „wymagana pam_unix” . Mam na myśli, jeśli masz jakieś inne moduły, przenieś je przed pam_ldap - w przeciwnym razie zostaną zignorowane dla kont LDAP z powodu klauzuli „wystarczającej” liczby.

kubańczyk
źródło
Myślę, że pam_unix używa wywołań getent do pobierania informacji o koncie - który używa LDAP jak w /etc/nsswitch.conf. Te wiersze zostały dodane do plików konfiguracyjnych PAM przez instalatora pakietu libpam-ldap. Domyślna akcja pam_groupdn nic nie robiła, a podczas wyszukiwania odpowiedzi ktoś powiedział, że nie zadziała, dopóki moduł pam_ldap.so nie zostanie użyty podczas przejścia „konto”. Jeśli to możliwe, wolę zachować ustawienia w ldap.conf, ponieważ jest to związane konkretnie z LDAP.
Andy Shellam,
(1) Masz rację co do pam_unix. (2) Aktualizuję swoją odpowiedź poradami pam_localuser.
kubańczyk
Wszystko, co czytam o PAM, wskazuje, że konto jest odpowiednią sekcją do tego. auth - Identyfikuje użytkownika i uwierzytelnia konto konta - Sprawdza cechy konta użytkownika, takie jak starzenie się hasła, ograniczenia czasu logowania i ograniczenia zdalnego logowania To nie jest problem z uwierzytelnianiem - ponieważ nazwa użytkownika / hasło jest prawidłowe, a użytkownik może zidentyfikowane. Jest to ograniczenie konta, ponieważ nie chcę, aby niektóre konta mogły się zalogować.
Andy Shellam
0

Aby dodać do @ andy-shellam, oto mój common-accountplik:

account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore]            pam_ldap.so
account requisite                     pam_deny.so
account required                      pam_access.so
account required                      pam_permit.so
Motek
źródło