Назад | Перейти на главную страницу

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

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

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

Следуя этим инструкциям / адаптируя их, я получил запрос пароля, а также запрос Google Auth:

Я установил пакет, отредактировал свой /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 также?

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

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

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

Я наконец смог заставить это работать, разместив 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.

Ответ Линуса Кендалла должен работать на старых системах, но на новых машинах 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 write (например, 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 для ваших пользователей ssh ​​и функциональная защищенная паролем учетная запись sftp для передачи данных.