Wyłącz moduł PAM dla grupy

10

Niedawno włączyłem uwierzytelnianie dwuskładnikowe za pomocą uwierzytelniacza google na moim serwerze SSH. Jednak mam teraz problem:

Mam inną grupę użytkowników na moim serwerze, której używam dla SFTP, ale ta grupa nie jest już w stanie się zalogować, ponieważ 2FA nie jest skonfigurowany dla użytkowników w grupie. Czy można wyłączyć moduł uwierzytelniania Google dla tej grupy? Włączenie go dla użytkowników w grupie nie jest opcją, ponieważ wielu użytkowników będzie korzystać z tego konta.

PS: Używam openssh-server

Z3r0byte
źródło
Odpowiedzi udzielone w tym komentarzu - Mam nadzieję, że to pomoże askubuntu.com/a/1051973/846342
Abhimanyu Garg

Odpowiedzi:

13

Możesz użyć pam_succeed_ifmodułu (patrz strona instrukcji) przed, pam_google_authenticatoraby pominąć tę część dla swojej grupy:

# the other authentication methods, such as @include common-auth
auth [success=1 default=ignore] pam_succeed_if.so user ingroup group
auth required pam_google_authenticator ...
Jakuje
źródło
2
Prawdopodobnie powinno być [success=1 default=ignore]zamiast required. W tej chwili, myślę, że użytkownik spoza grupy doprowadzi do niepowodzenia uwierzytelnienia. success=1spowoduje, że pominie następną metodę, default=ignoreoznacza , że użytkownicy spoza grupy po prostu przejdą do następnej metody.
muru
@muru tak, oczywiście masz rację. Wciąż uczę się szczegółów i całej magii stosu PAM :)
Jakuje
Czy zależy to od tego, czy w pliku / etc / ssh / sshd_config masz wiele „AuthenticationMethods”? Po dodaniu powyższej linii nadal otrzymuję komunikat „Odmowa zezwolenia (klawiatura interaktywna)”
Arj
@Arj oznacza to, że masz inną konfigurację, więc ta konkretna odpowiedź nie dotyczy Ciebie.
Jakuje
1

Niektórzy klienci SFTP mogą obsługiwać 2FA. Na przykład używam 2FA z FileZilla i WinSCP i one działają. Mam też skonfigurowane uwierzytelnianie za pomocą klucza SSH i działa ono razem z 2FA.

Jednak twoje pytanie jest interesujące i przeprowadziłem krótką ankietę. Znalazłem tę odpowiedź .

Możliwe jest (i łatwe) uruchamianie osobnych instancji ssh. Już to przetestowałem.

  1. Wykonaj osobne kopie sshd_configpliku.

    $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_pwd
    $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_2fa
    
  2. Edytuj te nowe configpliki. Jedną z rzeczy, które musisz zmienić, jest port shh. Zgodnie z przykładem:

    2.a) sshd_config_pwdokreślone wiersze to:

    Port 1022
    ...
    PasswordAuthentication yes
    ChallengeResponseAuthentication no
    UsePAM no
    

    2.b) sshd_config_2faokreślone wiersze to:

    Port 2022
    ...
    PasswordAuthentication no
    ChallengeResponseAuthentication yes
    UsePAM yes
    
  3. Otwórz niezbędne porty do zapory. Zgodnie z przykładem:

    $ sudo ufw limit 1022
    $ sudo ufw limit 2022
    
  4. Uruchom nowe instancje ssh:

    $ sudo /usr/sbin/sshd -f /etc/ssh/sshd_config_pwd
    $ sudo /usr/sbin/sshd -f /etc/ssh/sshd_config_2fa
    

Otóż ​​to.

pa4080
źródło
Jak to odpowiada na pytanie? Co modyfikujesz, sshd_configaby używać innego stosu PAM i nie używać 2FA?
Jakuje
@Jakuje Zaktualizowałem swoją odpowiedź.
pa4080
Ok, więc chodzi o to, że „nie używa PAM”. W niektórych przypadkach może to działać, ale PAM to nie tylko uwierzytelnianie, ale także konfigurowanie sesji i wiele więcej, dlatego może przestać działać z dnia na dzień. Również zmiana portu jest bardzo myląca, szczególnie jeśli chcesz, aby osoby trzecie łączyły się z twoim serwerem. Chociaż tak, możliwe rozwiązanie.
Jakuje
Tak, to tylko możliwe rozwiązanie, które wciąż jest niekompletne, ponieważ nie znam eleganckiego sposobu uruchamiania tych oddzielnych instancji ssh podczas uruchamiania systemu.
pa4080
0

Poniższe spowoduje, że Google 2FA będzie obowiązkowy dla wszystkich użytkowników
z wyjątkiem użytkowników należących do sudo i grupy administracyjnej
(co oznacza, że ​​jeśli użytkownik z grupy sudo lub administrator nie ma skonfigurowanego 2FA, uwierzytelni go / ją na podstawie ich klucza publicznego):

Plik: /etc/pam.d/sshd

auth required pam_google_authenticator.so nullok
auth optional pam_succeed_if.so user ingroup sudo
auth optional pam_succeed_if.so user ingroup admin

Plik: /etc/ssh/sshd_config

AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
ChallengeResponseAuthentication yes

Wyniki:

          |  Belongs to sudo or  |  Has 2FA Already Setup      |  Authentication Result
          |  admin group         |  in ~/.google_authenticator | 
----------+----------------------+-----------------------------+------------------------
User A    |          NO          |       NO                    | DENIED LOGIN UNTIL 2FA IS SETUP
User B    |          YES         |       NO                    | CAN LOGIN (PRIVATE/PUBLIC KEY USED)

User C    |          NO          |       YES                   | CAN LOGIN (PRIVATE/PUBLIC KEY AND 2FA USED)

User D    |          YES         |       YES                   | CAN LOGIN (PRIVATE/PUBLIC KEY AND 2FA USED)

Zgodnie z dokumentacją README.md Google Authenticator :

nullok

PAM wymaga co najmniej jednej odpowiedzi SUKCESU z modułu, a nullok powoduje, że moduł mówi IGNORE. Oznacza to, że jeśli ta opcja jest używana, przynajmniej jeden inny moduł musi mieć napisane SUKCES. Jednym ze sposobów na to jest dodanie wymaganego uwierzytelnienia pam_permit.so na końcu konfiguracji PAM.

Dzięki temu korzystanie z nulloktego miejsca jest bezpieczne.

Basil A
źródło