Попытка получить SSH с открытым ключом (без пароля) + аутентификатор Google, работающий на Ubuntu 14.04.1

Я использую Ubuntu 14.04.1 (с OpenSSH 6.6 и libpam-google-authenticator 20130529-2).

Я пытаюсь настроить SSH-входы, в которых открытый ключ аутентифицируется (без пароля), а пользователю предлагается ввести код от Google Authenticator.

Следуя / адаптируя эти инструкции, я получил запрос на ввод пароля и запрос на аутентификацию Google:

Я установил пакет, отредактировал мой /etc/ssh/sshd_config а также /etc/pam.d/ssh файлы

В /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
AuthenticationMethods  publickey,keyboard-interactive
UsePAM yes

и в нижней части /etc/pam.d/ssh:

auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")

Я знаю, что PAM зависит от порядка, но sshd_config также?

Что я делаю неправильно? Любая помощь будет оценена.

3 ответа

Решение

Получил это работает хорошо, сначала сделал:

apt-get install libpam-google-authenticator

В /etc/pam.d/sshd Я изменил / добавил следующие строки (вверху):

# @include common-auth
auth required pam_google_authenticator.so

И в /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

Работает хорошо, и теперь я получаю подсказку "Код подтверждения" после аутентификации с открытым ключом. Я не уверен, как разрешить аутентификацию с паролем + токеном ИЛИ ключом + токеном, поскольку теперь я фактически удалил метод аутентификации по паролю из PAM.

Использование Ubuntu 14.04.1 LTS (GNU/Linux 3.8.0-19-generic x86_64) с ssh -v: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 6 января 2014 г.

Ответ Линуса Кендалла должен работать на старых системах, но на более новых машинах Linux это проблематично; на моем веб-сервере arch linux эта конфигурация приводит к тому, что pam запрашивает мой код аутентификатора и мой пароль после получения моего ключа ssh (т.е. мне нужны все 3).

Более простое решение, которое предотвращает эту проблему и должно работать в каждой системе, - это изменить запись в /etc/pam.d/sshd чтобы:

auth sufficient pam_google_authenticator.so

А затем внести те же правки в ``/etc/ssh/sshd`, которые упоминал Линус:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

Это должно спросить вас о вашем токене аутентификатора после того, как сервер примет ваш открытый ключ. Он не должен спрашивать ваш пароль.

В качестве примечания: если вы хотите иметь учетную запись пользователя sftp, вам, вероятно, потребуется обойти аутентификатор google, чтобы заставить его работать. Вот предложение о том, как сделать это безопасно с помощью sftp jail. В etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match User ftp-user
  PasswordAuthentication yes
  AuthenticationMethods password
  ChrootDirectory /path/to/ftp/dir
  ForceCommand internal-sftp

Вам нужно будет сделать разрешения только для записи / path / to / ftp / dir root (например, chown root:root /path/to/ftp/dir, chmod 755 /path/to/ftp/dir, Всем родителям выше этого каталога также необходимы безопасные разрешения. Обычно я делаю это, делая каталог chroot /home/shared/userсоздать каталог там (например, "data") и затем смонтировать любой каталог, которым я хочу поделиться, вот так: sudo mount -o bind /path/to/ftp/dir /home/shared/user/data

Если вы выполните все эти шаги, у вас будет открытый ключ + логин google authenticator для ваших пользователей ssh ​​и функциональная защищенная паролем учетная запись sftp для передачи данных.

Я, наконец, смог заставить это работать, поместив auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok на вершине /etc/pam.d/sshd,

Согласно справочной странице pam.d:

  • success=done означает, что если Google Authenticator выйдет из системы, аутентификация больше не будет выполняться, что означает отсутствие дополнительной подсказки пароля.
  • default=die означает, что если Google Authenticator отклоняет попытку входа в систему, аутентификация сразу же завершится неудачей, пропуская запрос пароля.

Так [success=done new_authtok_reqd=done default=die] это своего рода смесь между sufficient а также requisite управляющие значения, так как мы хотим, чтобы поведение было и тем и другим: в случае успеха немедленно завершить (достаточное), а в случае неудачи также немедленно завершить (необходимое).

Обратите внимание, что nullok Аргумент к pam_google_authenticator.so означает, что если ~/.google_authenticator файл не найден для пользователя, проверка подлинности с открытым ключом проходит как обычно. Это полезно, если я хочу заблокировать только часть своих учетных записей с 2FA.

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