Вход с просроченным паролем и ключом SSH с помощью UsePAM да

Вход с просроченным паролем и ключом SSH с помощью UsePAM да

Имеется машина SLES 11. Пользователи входят в систему через SSH и открытый ключ (смешанный, некоторые пользователи используют пароль, некоторые используют ключ SSH).

В sshd_config есть:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

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

Вопрос:Как настроить конфигурацию PAM или sshd так, чтобы пользователи могли входить в систему, если у них есть действительный ключ SSH и срок действия пароля истек?Безвыскакивает сообщение "измените пароль".

ОБНОВЛЕНИЕ №1: Решение не может быть: «UsePAM no»

SERVER:~ # cat /etc/pam.d/sshd 
#%PAM-1.0
auth        requisite   pam_nologin.so
auth        include     common-auth
account     requisite   pam_nologin.so
account     include     common-account
password    include     common-password
session     required    pam_loginuid.so
session     include     common-session
SERVER:~ # 

ОБНОВЛЕНИЕ №2: Решение не может быть таким: установите для пароля пользователя срок действия не ограничен

ОБНОВЛЕНИЕ №3:

SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required    pam_unix2.so    
account required    pam_tally.so
SERVER:/etc/pam.d # 

решение1

Порядок действий, вызывающий запрос об истечении срока действия пароля, следующий:

  • SSH запускает этап PAM account, который проверяет, что учетная запись существует и действительна. accountЭтап замечает, что срок действия пароля истек, и сообщает об этом SSH.
  • SSH выполняет аутентификацию на основе ключей. Для этого ему не нужен PAM, поэтому он не запускает этап auth. Затем он настраивает сеанс входа SSH и запускает sessionэтап PAM.
  • Затем SSH запоминает, что PAM сообщил ему, что срок действия пароля истек, выводит предупреждающее сообщение и просит PAM сменить пароль пользователя. Затем SSH отключается.

Все это делает SSH, и я не вижу никаких опций SSH для настройки этого поведения. Так что если вы не хотите создать собственную версию SSH и/или PAM, единственный вариант, который я вижу, — запретить PAM сообщать SSH об истекшем пароле. Если вы это сделаете,он полностью отключит проверку просроченных паролей по SSH, даже если пользователь входит через SSH с паролем. Другие (не SSH) методы входа все равно будут проверять срок действия пароля.

В вашем текущем pam.d/sshdфайле есть account include common-accountзапись. Я предполагаю, что есть common-accountфайл, который содержит ссылку на pam_unix.so. Это строка, которая проверяет срок действия пароля.

Вероятно, вы не хотите трогать common-accountсам файл, так как он используется для других методов входа. Вместо этого вы хотите удалить includeиз pam.d/sshdфайла. Если в есть другие функции common-accountпомимо pam_unix.so, вы, вероятно, захотите поместить их непосредственно в pam.d/sshd.

Наконец, помните, что это изменение безопасности вашей системы, и вы не должны слепо доверять мне, чтобы я дал вам хороший совет. Почитайте о том, как работает PAM, если вы с ним не знакомы. Некоторые отправные точки могут быть man 7 PAM, man 5 pam.conf, и man 8 pam_unix.

решение2

В pam_unix.so (примерно в феврале 2016 г.) была добавлена ​​опция под названием no_pass_expiry (Исходный код изменить здесьилистраница руководства здесь). По сути, он сообщает pam_unix игнорировать просроченный пароль, если для аутентификации использовалось что-то иное, нежели pam_unix, например, если аутентификацию выполнил sshd.

В результате, если у вас есть версия pam_unix.so, которая содержит эту опцию, вы сможете настроить PAM следующим образом:

  1. По-прежнему предупреждать, но не требовать смены просроченного пароля, если для аутентификации через SSH использовался ключ SSH
  2. Требовать смену пароля с истекшим сроком действия, если для аутентификации через ssh использовался логин/пароль через pam_unix.so
  3. Не влияет на любую другую последовательность аутентификации (например, через службу входа).

Например, я настроил сервер RHEL 7 для выполнения вышеуказанных действий, просто обновив /etc/pam.d/sshd и добавив pam_unix.so no_pass_expiry к типам учетных записей и паролей, например:

account    required    pam_nologin.so
account    sufficient  pam_unix.so no_pass_expiry
account    include     password-auth
password   sufficient  pam_unix.so no_pass_expiry
password   include     password-auth

решение3

  • Возможно, вам не захочется менять PAM или sshd_config из соображений соответствия.
  • Вы можете использоватьПарольАутентификация нетв sshd_config
  • Возможно, у вас случайные пароли.
  • Возможно, вы даже внедрили требования CIS.
  • Ваши пользователи все равно получат приглашение

Затем root может изменить дату смены пароля:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done

Связанный контент