Пример модуля PAM, демонстрирующий двухфакторную аутентификацию для регистрации в серверах через SSH, OpenVPN и т. Д.
Этот проект не о входе в систему Google, Facebook или другие системы второго фактора TOTP/HOTP, даже если они рекомендуют использовать приложения Google Authenticator.
Одноразовый пароль на основе HMAC (HOTP) указан в RFC 4226, а одноразовый пароль на основе времени указан в RFC 6238.
./bootstrap.sh
./configure
make
sudo make installЕсли у вас нет доступа к «sudo», вы должны вручную стать «корнем» перед вызовом «сделать установку».
Для получения наибольшей безопасности убедитесь, что запрашиваются как пароль, так и OTP, даже если пароль и/или OTP неверны. Это означает, что , по крайней мере, первый из pam_unix.so (или любой другой модуль используется для проверки паролей) и pam_google_authenticator.so следует установить по required , не requisite . Вероятно, не повредит, чтобы оба required , но это может зависеть от остальной части вашей конфигурации PAM.
Если вы используете HOTP (на основе счетчика, в отличие от времени на основе времени), добавьте опцию no_increment_hotp , чтобы убедиться, что счетчик не увеличен для неудачных попыток.
Добавьте эту строку в файл конфигурации PAM:
auth required pam_google_authenticator.so no_increment_hotp
Запустите двоичный файл google-authenticator , чтобы создать новый секретный ключ в вашем домашнем каталоге. Эти настройки будут храниться в ~/.google_authenticator .
Если ваша система поддерживает библиотеку "libqrencode", вам будет показан QRCode, который вы можете сканировать с помощью приложения Android "Authenticator" Google.
Если в вашей системе нет этой библиотеки, вы можете либо следовать URL-адресу, который выходит google-authenticator , или вам нужно вручную ввести буквенно-цифровой секретный ключ в приложение Android «Authenticator».
В любом случае, после того, как вы добавили ключ, нажмите и держате, пока не покажет контекстное меню. Затем убедитесь, что значение проверки ключа соответствует (эта функция может быть недоступна во всех сборках приложения Android).
Каждый раз, когда вы входите в свою систему, теперь вам будет предложено код TOTP (однократное слово на основе времени) или HOTP (на основе счетчиков), в зависимости от параметров, предоставленных google-authenticator , после введения вашего обычного идентификатора пользователя и ваш обычный пароль учетной записи Unix.
Во время начального процесса развертывания вы можете обнаружить, что еще не все пользователи создали секретный ключ. Если вы все еще хотите, чтобы они могли войти в систему, вы можете передать опцию «Nullok» в командной строке модуля:
auth required pam_google_authenticator.so nullok
Если ваша система шифрует домашние каталоги до тех пор, пока ваши пользователи не введут свой пароль, вам либо нужно переоценить записи в файле конфигурации PAM для расшифровки домашнего каталога до запроса кода OTP, либо вам нужно сохранить секретный файл в нестандартное место:
auth required pam_google_authenticator.so secret=/var/unencrypted-home/${USER}/.google_authenticator
был бы возможным выбором. Обязательно установите соответствующие разрешения. Вы также должны сообщить своим пользователям вручную перемещать свой файл .google_authenticator в это место.
В дополнение к «$ {user}», опция secret= также распознает как «~», так и ${HOME} как короткие ручки для домашнего каталога пользователя.
При использовании опции secret= , возможно, вы также захотите установить опцию user= . Последний заставляет модуль PAM переключаться на выделенный идентификатор пользователя с твердым кодированием перед выполнением каких-либо файловых операций. При использовании опции user= вы не должны включать «~» или «$ {Home}» в имя файла.
Опция user= также может быть полезна, если вы хотите аутентифицировать пользователей, у которых нет традиционных учетных записей UNIX в вашей системе.
См. «Зашифрованные домашние каталоги», выше.
Переопределяет подсказку по умолчанию. Если вы хотите включить пробелы в приглашение, оберните весь аргумент в квадратные скобки:
auth required pam_google_authenticator.so [authtok_prompt=Your secret token: ]
Заставьте модуль PAM переключиться на жесткий идентификатор пользователя, прежде чем выполнять какие-либо операции с файлами. Обычно используется с secret= .
Опасный вариант!
По умолчанию модуль PAM требует, чтобы файл Secrets должен был принадлежать пользователю в систему (или если user= указан, принадлежащий этому пользователю). Эта опция отключает эту проверку.
Эта опция может использоваться, чтобы демоны не работали, поскольку root по -прежнему обрабатывают файлы конфигурации, не принадлежащие этому пользователю, например, принадлежащий самим пользователям.
Опасный вариант!
По умолчанию модуль PAM требует, чтобы файл Secrets был удобочитался только владельцем файла (режим 0600 по умолчанию). В ситуациях, когда модуль используется в конфигурации без декорации, администратору может понадобиться больше снисходительных разрешений на файл или конкретную настройку для их использования.
Включите больше словесных сообщений журнала в системном журнале.
Некоторые клиенты PAM не могут предложить пользователю больше, чем просто пароль. Чтобы обойти эту проблему, этот модуль PAM поддерживает укладку. Если вы передаете опцию forward_pass , модуль pam_google_authenticator запросит пользователя как для системного пароля, так и для кода проверки в одной приглашке. Затем он пересылает системный пароль в следующий модуль PAM, который должен быть настроен с опцией use_first_pass .
В свою очередь, модуль pam_google_authenticator также поддерживает как стандартные параметры use_first_pass и try_first_pass . Но большинству пользователей не нужно было бы устанавливать их на pam_google_authenticator .
Если вы обнаружите, что ваш код TOTP никогда не работает, это чаще всего является результатом того, что часы на вашем сервере отличаются от того, который на вашем устройстве Android. Модуль PAM предпринимает попытку компенсировать время перекоса времени. Вы можете научить это о количестве перекоса, которое вы испытываете, пытаясь записать его три раза подряд. Убедитесь, что вы всегда ждали 30 -е годы (но не больше), чтобы получить три различных кода TOTP.
Некоторые администраторы предпочитают, чтобы время времени не скорректирована автоматически, так как это приводит к немного менее безопасной конфигурации системы. Если вы хотите отключить его, вы можете сделать это в командной строке модуля:
auth required pam_google_authenticator.so noskewadj
Не увеличивайте счетчик для неудачных попыток Hotp. Обычно вы должны установить это, поэтому неудачные попытки пароля злоумышленника без токена не блокируют авторизованного пользователя.
Позвольте пользователям входить в систему без OTP, если они еще не настраивают OTP.
Пэм требует, по крайней мере, одного ответа SUCCESS от модуля, и nullok заставляет этот модуль сказать IGNORE . Это означает, что если эта опция используется, по крайней мере, один другой модуль должен был сказать SUCCESS . Один из способов сделать это - добавить auth required pam_permit.so к концу конфигурации PAM.
По умолчанию модуль PAM не повторяет код проверки, когда он вводится пользователем. В некоторых ситуациях администратор может предпочесть другое поведение. Передайте опцию echo_verification_code в модуль, чтобы включить Echoing.
Если вам нужны коды проверки, которые основаны на противоположных условиях, вместо того, чтобы на основе времени, используйте двоичный файл google-authenticator , чтобы сгенерировать секретный ключ в вашем домашнем каталоге с соответствующей опцией. В этом режиме перекоса часов не имеет значения, а опция размера окна теперь относится к тому, сколько кодов за пределами текущих будет принято, чтобы уменьшить проблемы синхронизации.
Если он присутствует и ненулевой, предоставьте льготный период, в течение которого второй код проверки не будет запрашивается. Попробуйте установить секунды до 86400, чтобы разрешить полный день между запросом кодов; или 3600 за час.
Это работает путем добавления (IP-адреса, временной метки) в файл безопасности после успешного одноразового входа в пассу; Только последние десять отдельных IP -адресов отслеживаются.
Опасный вариант!
С помощью этой опции злоумышленник, способный заполнить файловую систему (сервер наводнений с помощью веб-запросов, или если у них есть учетная запись, просто заполняющая диск), может вызвать ситуацию, когда можно повторно использоваться одноразовыми словами, побеждая цель » один раз".
По умолчанию, если опция grace_period определен, модуль PAM требует некоторого свободного места для хранения IP -адреса и временной метки последнего входа. Это может предотвратить доступ, если у сервера нет свободного места или в случае ошибки файла конфигурации обновления. С помощью параметра allow_readonly вы можете игнорировать любые ошибки, которые могут возникнуть во время обновления файла конфигурации.