Имеется машина 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 следующим образом:
- По-прежнему предупреждать, но не требовать смены просроченного пароля, если для аутентификации через SSH использовался ключ SSH
- Требовать смену пароля с истекшим сроком действия, если для аутентификации через ssh использовался логин/пароль через pam_unix.so
- Не влияет на любую другую последовательность аутентификации (например, через службу входа).
Например, я настроил сервер 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