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

Как запретить доступ отключенным учетным записям AD через kerberos в pam_krb5?

У меня есть рабочий каталог AD / Linux / LDAP / KRB5 и настройка аутентификации с одной небольшой проблемой. Когда учетная запись отключена, аутентификация с открытым ключом SSH по-прежнему позволяет пользователю входить в систему.

Понятно, что клиенты kerberos могут идентифицировать отключенную учетную запись, поскольку kinit и kpasswd возвращают «Учетные данные клиента отозваны» без дальнейшего пароля / взаимодействия.

Можно ли настроить PAM (с "UsePAM yes" в sshd_config), чтобы запретить вход в систему для отключенных учетных записей, где аутентификация выполняется с помощью открытого ключа? Кажется, это не работает:

account     [default=bad success=ok user_unknown=ignore] pam_krb5.so

Пожалуйста, не вводите winbind в свой ответ - мы его не используем.

Сделал еще домашнее задание и отвечаю на свой вопрос.

В pam_krb5 от RedHat (pam_krb5-2.3.14-1/src/acct.c), если модуль не участвовал в этапе аутентификации, функция pam_sm_acct_mgmt () возвращает либо PAM_IGNORE, либо PAM_USER_UNKNOWN в зависимости от конфигурации модуля. Следовательно, для того, чтобы делать то, что я хочу, потребуется внести изменения в код pam_krb5.

Ответ JohnGH - хорошее решение; использование атрибутов «прокси» для передачи того же значения, например, нарушение оболочки или добавление в группу «отключенных пользователей».

Другой обходной путь (частично протестированный) - установить дату истечения срока действия учетной записи в прошлом и использовать такой модуль, как pam_unix, чтобы не пройти проверку учетной записи. При этом используется LDAP, а не KRB5, но запросы к тому же централизованно управляемому каталогу пользователей.

Я читал в другом месте, что другие люди просили "исправить" SSH, чтобы заблокированные учетные записи не могли войти через SSH. (см. ошибку Debian 219377) Этот запрос был отклонен как патч, «потому что он нарушает некоторые ожидания пользователей, [которые] использовали passwd -l только для блокировки пароля». (см. ошибку Debian 389183), например. Некоторые люди ХОТЕЛИ иметь возможность блокировать учетные записи при входе в систему с паролем, но при этом разрешать доступ по SSH-ключу.

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

Я понимаю, что запись хэша пароля неявно проверяется во время pam_authenicate (), а не во время pam_acct_mgmt (). pam_unix.so pam_sm_acct_mgmt () вообще не проверяет хэш пароля, а pam_authenticate () не вызывается во время аутентификации с открытым ключом.

Если вы собираетесь централизованно отключать вход в учетные записи, существуют другие возможные обходные пути, в том числе:

Изменение оболочки входа в систему.

(повторное) перемещение их файла authorized_keys.

Другой вариант отказа в доступе может заключаться в использовании DenyGroups или AllowGroups в sshd_config. (затем добавление пользователя в группу «sshdeny» или удаление его из группы «sshlogin», чтобы запретить им вход в систему.) (прочтите здесь: https://help.ubuntu.com/8.04/serverguide/user-management.html )

Из http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuL Я прочитал: «Проблема в том, что pam_unix проверяет только даты истечения срока действия теневой записи, а не содержимое поля хэша пароля». Если это правда, будет ли истекающий учетную запись, а не блокировку, делайте то, что вам нужно?

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

Аутентификация на основе ключа SSH не зависит от PAM. У вас есть следующие решения:

  • отключить аутентификацию на основе ключей в sshd_config
  • измените и перекомпилируйте sshd и добавьте ловушку, чтобы аутентификация на основе ключей также проверяла, действительна ли учетная запись через pam.

Если вы хотите использовать беспарольный вход через Kerberos, вы должны убедиться, что:

  • вы не используете pam для sshd
  • у вас правильно настроен керберос. Например. ты можешь сделать kinit -k host/server1.example.com@DOMAIN
  • ваш sshd настроен на использование gssapi:

    KerberosAuthentication да GSSAPIAuthentication да GSSAPICleanupCredentials да UsePAM нет

  • вы используете керберизованный клиент ssh, например PuTTY v0.61 или новее.