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

10

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

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

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

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

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

Фил
источник

Ответы:

4

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

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

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

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

Смена оболочки входа.

(пере) переместить их файл author_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 проверяет только даты истечения срока действия теневой записи, а не содержимого поля хэша пароля». Если это правда, будет ли истечение срока действия учетной записи вместо блокировки делать то, что вам нужно?

Возможно, ответ на ваш вопрос «да, если вы отключаете их где-то, кроме поля пароля»

JohnGH
источник
4

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

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

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

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

Фил
источник
2

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

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

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

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

    KerberosAuthentication yes GSSAPIAuthentication yes GSSAPICleanupCredentials да UsePAM нет

  • Вы используете Kerberized SSH-клиент, например, PuTTY v0.61 или новее.

Мирча Вуцовичи
источник
1
Я не согласен с тем, что аутентификация открытого ключа SSH не зависит от PAM. Добавление account optional pam_echo.so file=/etc/redhat-releaseв /etc/pam.d/sshd приводит к печати содержимого файла при использовании авторизации на основе ключа (попробуйте).
Фил
Я думаю, что PAM используется только для учетной записи (например, для создания домашней папки), а не для аутентификации. Я проверяю это дело сейчас.
Мирча Вутцовичи