Отключить модуль PAM для группы

Недавно я включил двухфакторную аутентификацию с помощью google-authenticator на моем SSH-сервере. Однако сейчас я сталкиваюсь с проблемой:

У меня есть другая группа пользователей на моем сервере, которую я использую для SFTP, но эта группа больше не может войти, так как 2FA не настроен для пользователей в группе. Можно ли отключить модуль google-authenticator для этой группы? Включение этого для пользователей в группе не вариант, потому что несколько пользователей будут использовать эту учетную запись.

PS: пользуюсь openssh-server

2 ответа

Решение

Ты можешь использовать pam_succeed_if модуль (см. страницу руководства) перед pam_google_authenticator чтобы пропустить эту часть для вашей группы:

# 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 ...

Некоторые клиенты SFTP могут обрабатывать 2FA. Например, я использую 2FA с FileZilla и WinSCP, и они работают. Также у меня есть настройка аутентификации по ssh-ключу, и она работает вместе с 2FA.

Однако ваш вопрос интересен, и я сделал небольшой опрос. Я нашел этот ответ.

Таким образом, можно (и легко) запускать отдельные экземпляры ssh. Я уже проверил это.

  1. Сделайте отдельные копии sshd_config файл.

    $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_pwd
    $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_2fa
    
  2. Редактировать эти новые config файлы. Одна из вещей, которую вы должны изменить, это порт shh. По примеру:

    2.а) sshd_config_pwd конкретные строки:

    Port 1022
    ...
    PasswordAuthentication yes
    ChallengeResponseAuthentication no
    UsePAM no
    

    2б) sshd_config_2fa конкретные строки:

    Port 2022
    ...
    PasswordAuthentication no
    ChallengeResponseAuthentication yes
    UsePAM yes
    
  3. Откройте необходимые порты в брандмауэре. По примеру:

    $ sudo ufw limit 1022
    $ sudo ufw limit 2022
    
  4. Запустите новые экземпляры ssh:

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

Вот и все.

Ниже будет сделать Google 2fa обязательным для всех пользователей,
кроме пользователей, принадлежащих к SUDO и администратору группе
(то есть, если пользователь из группы Суда или администратора не 2fa настроен, он будет аутентифицировать его / ее на основе их открытого ключа):

Файл: /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

Файл: /etc/ssh/sshd_config

AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
ChallengeResponseAuthentication yes

Полученные результаты:

          |  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)

Согласно документации Google Authenticator README.md:

нуллок

PAM требует от модуля как минимум одного ответа УСПЕХ, и nullok заставляет этот модуль сказать ИГНОРИРОВАТЬ. Это означает, что если используется эта опция, по крайней мере, еще один модуль должен сообщить УСПЕХ. Один из способов сделать это - добавить auth required pam_permit.so в конец конфигурации PAM.

Это позволяет использовать nullok здесь безопасно.

Другие вопросы по тегам