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

Linux PAM: SSH-ключ + 2FA (аутентификатор Google) + пароль - укажите требования к авторизации для каждого пользователя

Я установил и настроил PAM на моем сервере Ubuntu, который работает правильно. Чтобы войти в систему, я хочу, чтобы был установлен ключ SSH, предоставлен пароль и действительный код из приложения для аутентификации.

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

Например, я хочу применить все эти методы аутентификации для моей учетной записи пользователя, но указать другого пользователя (git - для моей установки GitLab), который будет доступен только с помощью ключа SSH (пароль или код 2FA не требуется), чтобы поведение push и pull работает.

На данный момент я нашел единственный способ обойти это - установить auth required pam_google_authenticator.so nullok в файле /etc/pam.d/sshd, поэтому часть 2FA является необязательной, а также комментирует @include common-auth линия. Однако это означает, что, хотя часть 2FA работает, меня больше не просят ввести пароль для моей основной учетной записи.

Я пытался сделать следующее:

auth [success=1 default=ignore] pam_succeed_if.so user in git
@include common-auth

но это, похоже, не работает.

Что мне нужно сделать, чтобы по умолчанию включить все вышеперечисленные методы аутентификации, но добавить исключения для определенных учетных записей пользователей, например git и т.д?

Давайте немного разберем эти требования.

Настройка SSH

Во-первых, чтобы потребовать открытые ключи и пароль для предоставления, вам необходимо изменить свой /etc/ssh/sshd_config добавив эту строку:

AuthenticationMethods publickey,keyboard-interactive

Таким образом, у каждого должен быть открытый ключ, и у каждого должна быть возможность указать свой пароль при входе в систему.

Чтобы сделать исключения, используйте Match блок. Например, предположим, что пользователи, для которых нет ограничений, находятся в come-as-please группа. Затем добавьте эти строки в конец sshd_config файл:

Match Group come-as-please
    AuthenticationMethods publickey keyboard-interactive

Обратите внимание на отсутствие запятой, что означает, что члены группы могут использовать любой открытый ключ, или клавиатура-интерактивная (парольная) аутентификация.

Настройка гугл-аутентификатора

Чтобы использовать модуль аутентификации Google, вы должны изменить /etc/pam.d/sshd файл. После

@include common-auth

строку, добавьте эту:

auth    required        pam_google_authenticator.so nullok

Кроме того, чтобы включить двухфакторную аутентификацию, вам необходимо изменить свой /etc/ssh/sshd_config файл, добавив эту строку:

ChallengeResponseAuthentication yes

После этого перезапустите демон SSH.

Настройка доступа пользователей

После внесенных выше изменений у вас появятся следующие настройки доступа:

  • Каждый пользователь должен установить открытый ключ и должен введите пароль.
  • Если есть .google_authenticator файл в домашнем каталоге пользователя, то они должен также укажите соответствующий код аутентификатора.
  • Любой, кто является членом come-as-please группа:
    • Если у них установлен открытый ключ, они делают не необходимо указать пароль или код аутентификатора, независимо от того, есть ли у них .google_authenticator файл в их доме или нет,
    • Если у них не установлен открытый ключ, им необходимо указать пароль. Им необходимо предоставить код аутентификатора, если .google_authenticator файл существует в их домашнем каталоге.