Рейтинг:4

Аутентификация с открытым ключом SSH с помощью аутентификатора Google по-прежнему запрашивает пароль

флаг de

Я пытаюсь включить 2FA с помощью ssh, используя libpam-google-authenticator. Не всем пользователям требуется включенный аутентификатор. Все используют открытые ключи ssh, и ни у кого нет пароля. Я использую Debian buster, а также пробовал libpam-google-authenticator от Bullseye.

Моя проблема в том, что независимо от того, что я добавляю в конфигурацию PAM, пользователи без включенного аутентификатора никогда не входят в систему напрямую, но всегда запрашивают пароль.

Я установил libpam-google-authenticator и настроил /etc/ssh/sshd_config с помощью:

ПарольАутентификация нет
ВызовОтветАутентификация да
Методы аутентификации с открытым ключом, интерактивной клавиатурой
ПарольАутентификация нет
PermitEmptyPasswords нет

Мне не удалось разработать правильную конфигурацию PAM, чтобы пользователи без файла .google_authenticator по-прежнему входили в систему. В зависимости от того, что я использую, пользователям либо предлагается ввести пароль (у них его нет), либо нет. пустили вообще.

В /etc/pam.d/sshd я пробовал (вот так Попытка получить SSH с открытым ключом (без пароля) + аутентификатор Google работает на Ubuntu 14.04.1):

#@include общая аутентификация
требуется авторизация pam_google_authenticator.so отладка nullok

В этом случае пользователи без настройки аутентификатора будут отклонены со следующей отладкой;

05 августа, 15:11:18 <хост> sshd(pam_google_authenticator)[746624]: отладка: запуск google_authenticator для "<user>"
05 августа 15:11:18 <хост> sshd(pam_google_authenticator)[746624]: отладка: конец google_authenticator для "<user>" Результат: возвращаемое значение должно игнорироваться диспетчером PAM
05 августа 15:11:18 <хост> sshd[746620]: ошибка: PAM: разрешение отклонено для <пользователя> с <IP>

Является pam_permit необходимо настроить резервный случай?

Я также пробовал различные комбинации требуется авторизация и достаточно авторизации до и после @include общая аутентификация но все они приводят к тому, что у пользователей без аутентификатора запрашивается пароль, а иногда у пользователей с аутентификатором также запрашивается пароль.

У кого-нибудь есть рецепт, как заставить это работать?

флаг in
Хорошо, я думаю, что наконец лучше понимаю вашу проблему. Я немного почитал, и теперь у меня есть вопрос. Все ли пользователи, которым нужен pubkey+totp, входят в определенную группу или могут быть в группе? Или, возможно, наоборот.Все пользователи, которые являются pubkey, только в группе? Вы можете установить различные директивы `AuthenticationMethod` в разделе `match` в файле sshd_config.
Hamish Moffatt avatar
флаг de
Я мог заставить это работать. Однако, чтобы усложнить ситуацию, после того, как я заработаю, я хочу попытаться сделать требование TOTP зависимым от того, где я подключаюсь с помощью `pam_access` - если я подключаюсь с IP-адреса VPN, я хочу обойти TOTP. Хотя похоже, что я мог бы также проверить IP, используя `match`, а не `pam_access`, так что, возможно, это все-таки сработает.
Рейтинг:2
флаг de

Вот моя рабочая конфигурация. У некоторых пользователей включен аутентификатор, а у некоторых нет, и разрешены только входы в систему SSH с открытыми ключами, а не пароли.

В /etc/ssh/sshd_config,

ИспользоватьPAM да
ПарольАутентификация нет
ВызовОтветАутентификация да
Методы аутентификации с открытым ключом, интерактивной клавиатурой
PermitEmptyPasswords нет

В /etc/pam.d/sshd,

# Стандартная аутентификация Un*x.
#@include общая аутентификация

# Требовать аутентификатор, если он не настроен, то разрешить
требуется авторизация pam_google_authenticator.so отладка nullok
требуется авторизация pam_permit.so

@include общая аутентификация должен быть отключен, потому что он включает pam_unix, который я не хочу использовать. Тогда вам нужно pam_permit сделать аутентификацию успешной для пользователей без аутентификатора (для которых pam_google_authenticator возвращает игнорировать, а не передать).

Это по-прежнему не позволяет root войти в систему с ключом ssh; журналы sshd

sshd [1244501]: фатальная: внутренняя ошибка: аутентификация PAM прошла успешно, хотя должна была завершиться ошибкой

Это обсуждается на Google Authenticator PAM на SSH блокирует вход root без 2FA .

Получив это, как указано выше, я думаю, что на самом деле лучше применять 2FA для определенных групп, используя конфигурацию SSH, как предложил @zoredache. Это легко позволяет вам внести в белый список определенные IP-адреса как не требующие 2FA. В этом случае sshd_config говорит, например,

ИспользоватьPAM да
ПарольАутентификация нет
ВызовОтветАутентификация да
#Методы аутентификации любые # по умолчанию
PermitEmptyPasswords нет

Совпадение с адресом группового администратора *,!172.16.1.0/24
    Методы аутентификации с открытым ключом, интерактивной клавиатурой

и /etc/pam.d/ssh говорит

 Стандартная аутентификация Un*x.
#@include общая аутентификация

# Требовать аутентификатор; SSH не должен допускать ни одного пользователя, у которого его нет
достаточно аутентификации pam_google_authenticator.so отладить nullok
реквизиты авторизации pam_deny.so
NeverEndingQueue avatar
флаг cn
Спасибо, ни в одном из руководств, которые я нашел, не упоминалось: настройка `pam_permit`, чтобы сделать 2FA необязательным для пользователей.
Рейтинг:0
флаг in

Я не думаю, что вам нужно или хотите комментировать @include общая аутентификация. Или, по крайней мере, я этого не делал, и это, казалось, работало правильно. Но я все еще в основном тестирую это.

У кого-нибудь есть рецепт, как заставить это работать?

У меня нет времени переводить его для вас в сценарий оболочки, но это отрывок из ansible playbook, который, похоже, работает для меня.Я подозреваю, что вы должны быть в состоянии следить за тем, что это делает, даже если вы не используете ansible.

- хосты: linux_systems
  задачи:

  - имя: Добавить группу «totp»
    группа:
      имя: топп
      состояние: присутствует
      система: да

  - имя: Создать каталог для секретов totp
    файл:
      состояние: каталог
      путь: /var/lib/google-authenticator
      владелец: "0"
      группа: "0"
      режим: "0700"

  - имя: установить libpam-google-authenticator
    подходящий:
      update_cache: да
      cache_valid_time: '{{ apt_cache_valid_time | по умолчанию (7200) }}'
      состояние: присутствует
      имя:
      - libpam-google-аутентификатор

  - имя: Создать секрет для «пользователя-примера»
    аргументы:
      создает: /var/lib/google-authenticator/example-user
    оболочка: |
      TOTP_USER=пример пользователя; \
      гугл-аутентификатор \
        --force --quiet\
        --аварийные коды=10 \
        --на основе времени \
        --qr-mode=нет \
        --разрешить повторное использование \
        --размер окна=3 \
        --rate-limit=4 --rate-time=30 \
        --secret=/var/lib/google-authenticator/${TOTP_USER}

  - имя: обновить пэм
    линейный файл:
      вставить после: '^@включить общий-пароль'
      путь: /etc/pam.d/логин
      строка: 'Требуется аутентификация pam_google_authenticator.so nullok user=root secret=/var/lib/google-authenticator/${USER}'

  - имя: обновить пэм
    линейный файл:
      вставить после: '^@включить общий-пароль'
      путь: /etc/pam.d/sshd
      строка: 'Требуется аутентификация pam_google_authenticator.so nullok user=root secret=/var/lib/google-authenticator/${USER}'

  - имя: обновить sshd ChallengeResponseAuthentication
    уведомить: перезапустить sshd
    линейный файл:
      путь: /etc/ssh/sshd_config
      регулярное выражение: '^ChallengeResponseAuthentication .*'
      строка: 'ChallengeResponseAuthentication yes'

  обработчики:

  - имя: Перезапустить sshd
    оказание услуг:
      имя: сшд
      состояние: перезапущен
Hamish Moffatt avatar
флаг de
Спасибо. Это похоже на то, что у меня есть, за исключением того, что вы добавили модуль позже в файл - фактически в конец. Вы также изменили AuthenticationMethods в sshd_config, чтобы добавить интерактивную клавиатуру? Я никогда не получаю никаких запросов на ввод кода подтверждения без него. Но с ним и модулем проверки подлинности в конце меня просят ввести пароль. Ваша общая аутентификация не изменена?
флаг in
Насколько я помню, эти изменения — это все, что мне нужно от полностью стандартной установки Debian buster.
Hamish Moffatt avatar
флаг de
Я не получаю никаких попыток проверки TOTP без изменения AuthenticationMethods в sshd_config. Другая документация, которую я видел, например https://blog.geoghegan.me/linux/setting-up-google-auth-2fa-on-debian, также включает этот шаг.
флаг in
Вы правы, документы говорят, что для ssh. Большая часть моего тестирования для этого заключалась в тестировании локальных входов в систему. Теперь я не уверен, тестировал ли я когда-либо SSH. Мой SSH в основном основан только на ключах, и я не беспокоился о ssh для своей тестовой учетной записи, поскольку он не получил никаких ключей.
Hamish Moffatt avatar
флаг de
Хорошо, спасибо за ответы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.