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

10

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

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

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

Z3r0byte
источник
Ответ на этот комментарий - Надеюсь, это поможет askubuntu.com/a/1051973/846342
Абхиманью

Ответы:

13

Вы можете использовать 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 ...
Jakuje
источник
2
Вероятно, должно быть [success=1 default=ignore]вместо required. Я думаю, что сейчас пользователь, не входящий в группу, приведет к сбою аутентификации. success=1заставит пропустить следующий метод, default=ignoreбудет означать, что пользователи, не входящие в группу, просто перейдут к следующему методу.
Муру
@ Муру да, вы, очевидно, правы. Все еще изучаю детали и всю магию стека PAM :)
Jakuje
Зависит ли это от того, есть ли у вас несколько «AuthenticationMethods» в / etc / ssh / sshd_config? С добавленной выше строкой я по-прежнему получаю сообщение «Отказано в доступе (клавиатура-интерактив)»
Ардж
@Arj это означает, что у вас другая конфигурация, поэтому этот конкретный ответ на вас не распространяется.
Jakuje
1

Некоторые клиенты 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.a) sshd_config_pwdконкретные строки:

    Port 1022
    ...
    PasswordAuthentication yes
    ChallengeResponseAuthentication no
    UsePAM no
    

    2.b) 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
    

Вот и все.

pa4080
источник
Как это отвечает на вопрос? Что вы модифицируете, sshd_configчтобы использовать другой стек PAM и не использовать 2FA?
Jakuje
@Jakuje Я обновил свой ответ.
pa4080
Итак, дело в том, что «не используется PAM». В некоторых случаях это может работать, но PAM - это не только аутентификация, но также настройка сеанса и многое другое, поэтому он может перестать работать изо дня в день. Кроме того, изменение порта очень сбивает с толку, особенно если вы хотите, чтобы третьи лица подключались к вашему серверу. Хотя да, возможное решение.
Jakuje
Да, это просто возможное решение, которое все еще не завершено, потому что я не знаю элегантного способа запуска этих отдельных экземпляров ssh при запуске системы.
pa4080
0

Ниже будет сделать 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 :

nullok

PAM требует как минимум одного ответа SUCCESS от модуля, и nullok заставляет этот модуль сказать IGNORE. Это означает, что если используется эта опция, то, по крайней мере, еще один модуль должен иметь SUCCESS. Один из способов сделать это - добавить требуемый auth pam_permit.so в конец конфигурации PAM.

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

Базилик А
источник