8

Я использую Ubuntu.

Мне просто интересно, возможно ли иметь libpam-google-authenticator (который позволяет вам входить в систему с помощью кода, сгенерированного вашим телефоном) И настроить аутентификацию сертификата для совместной работы, и если это возможно, как бы я поступил настраивая это. Таким образом, чтобы войти в мою учетную запись, вам понадобятся мой пароль, мой телефон (и его пароль) И мой сертификат / закрытый ключ и его пароль.

Я заставил обоих работать независимо, но никогда не мог заставить их работать вместе. Я уверен, что как-то это возможно.

Благодарю.

3 ответа3

7

Это можно сделать, связав вместе модули PAM. Но прежде чем я углублюсь в какие-либо детали:

Неправильная настройка PAM может и не позволит вам войти в вашу систему

К счастью, вы всегда можете загрузиться в однопользовательском режиме и устранить проблему, но имейте в виду, что PAM - это не то, с чем вы хотите связываться больше, чем нужно.

В любом случае, идея заключается в том, что можно использовать стекируемые модули PAM, чтобы убедиться, что pam-google-authenticator , pam_unix (это проверяет ваш пароль) и модуль сертификата - все должно успешно работать, чтобы предоставить вам доступ. По умолчанию PAM настроен так, что любой модуль аутентификации может аутентифицировать вас, пропуская остальные.

В /etc/pam.d/common-auth рядом с верхней частью вы увидите строку, которая выглядит примерно так:

auth    [success=2 default=ignore]  pam_unix.so nullok_secure try_first_pass

Это говорит PAM, что в случае успеха pam_unix.so он пропустит следующие два правила (обычно это другой модуль аутентификации, а затем pam_deny.so) и перейдет к дополнительным модулям. Однако, если модуль выйдет из строя, он будет проигнорирован, и управление перейдет к следующему модулю в цепочке. Это продолжается в каждом модуле аутентификации, пока либо элемент управления не перейдет к необязательному блоку, либо PAM не ударит pam_deny.so и не завершится с ошибкой.

Это может быть использовано для обеспечения успешного доступа к pam-google-authenticator , pam_unix.so и вашему PAM-модулю сертификата. Я не знаю названия модуля аутентификатора Google или модуля сертификатов, который вы используете, но вы сможете найти их в своем файле общей аутентификации. Итак, поместив что-то вроде этого вверху:

auth    requisite   pam_unix.so nullok_secure
auth    requisite   pam_google_authenticator.so
auth    requisite   pam_certificate_auth.so
auth    [success=<n>]   pam_permit.so

Заменив <n> числом модулей между модулем pam_permit.so здесь и следующим модулем pam_permit.so - другими словами, это должно быть установлено для самого верхнего модуля auth [success = n default = ignore] + 1. Этот синтаксис немного прикольный, но по существу пропускает модули авторизации после того, как вышеупомянутые модули успешно работают.

Конечно, вам может быть интересно, как ограничить эту трехэтапную аутентификацию только вашей учетной записью. Это можно сделать с помощью модуля pam_succeed_if.so , и его следует вставить над трехэтапным блоком аутентификации, описанным выше:

auth    [success=ignore default=4]  pam_succeed_if.so user = <username>

Где <username> заменяется вашим именем пользователя. Эта строка просто говорит, что если pam_succeed_if.so будет успешным (иначе ваше имя пользователя совпадает с именем пользователя в этой строке), тогда PAM должен перейти к следующим модулям, которые являются трехэтапными модулями аутентификации. В противном случае PAM должен перейти к реальным модулям, которые находятся на расстоянии 4 модулей от этого.

Чтобы сопоставить несколько вещей, например членство в группе вместе с определенным именем пользователя, необходимо использовать несколько строк, например:

auth    [success=1 default=ignore]  pam_succeed_if.so user = <username>
auth    [success=ignore default=4]  pam_succeed_if.so user ingroup <group>

Прежде чем сделать что-либо из этого, я бы сделал резервную копию файла общей аутентификации, а также ознакомился с однопользовательским режимом и тем, как восстановить старый файл в случае чрезвычайной ситуации. Эта конфигурация не была проверена мной, но она должна работать.

Чтобы проверить это в первый раз, получите корневую или две открытые оболочки и просто оставьте их в покое. Они действуют как запасные варианты на случай, если что-то пойдет не так, поскольку вы можете легко заменить обычную аутентификацию резервной копией. Затем внесите эти изменения. Затем попробуйте использовать su для входа в свою учетную запись пользователя - вам необходимо пройти трехэтапный процесс аутентификации.

Полную документацию по модулю pam_succeed_if.so можно найти по адресу http://linux.die.net/man/8/pam_succeed_if.

2

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

По сути, я установил Google Authenticator и пароль в PAM, а затем настроил аутентификацию с открытым ключом в OpenSSH (это обходит два других), и, наконец, OpenSSH потребовал также аутентификации через PAM (последняя строка)

Из /etc /ssh /sshd_conf

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

Только Pubkey + GoogleAuth нужно добавить в начало вашего /etc/pam.d/sshd

#auth    requisite    pam_unix.so nullok_secure #if you want password, too :)
auth    requisite    pam_google_authenticator.so
auth    [success=2]  pam_permit.so

Я полагаю, у вас есть OpenSSH> = 6.2 и sshd_config отредактированы

Для большей безопасности добавьте несколько дополнительных настроек:D

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .