Есть машина SLES 11. Пользователи входят в систему через SSH и pubkey (смешанные, некоторые используют пароль, некоторые используют ключ ssh)
Sshd_config имеет:
UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes
Проблема: если срок действия пароля истекает для пользователя, который использует вход в систему с использованием открытого ключа, пользователю будет предложено сменить пароль.
Вопрос: Как мы можем настроить конфигурацию PAM или sshd, чтобы пользователи могли войти в систему, если у них есть действительный ключ SSH и срок действия пароля истек? - Не выскакивая «смени пароль».
ОБНОВЛЕНИЕ № 1: Решение не может быть: «UsePAM нет»
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: Решение не может быть: установить пароль пользователя, чтобы никогда не истек
UPDATE # 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 #
pam_unix.so
изsession
раздела/etc/pam.d/sshd
(и замените его на,pam_lastlog.so
если его там нет. Я не уверен,pam_unix.so/session
что тот делает это или нет, но кажется, что это правильное место.ForcedPasswdChange No
это для SSH1ForcedPasswdChange No
не будет работать после истечения срока. Вы ищете решение, которое позволит просроченному пользователю войти в системуОтветы:
Порядок операций, вызывающих запрос пароля с истекшим сроком действия, следующий:
account
этап PAM , который проверяет, что учетная запись существует и является действительной. Наaccount
уведомления сценические , что срок действия пароля истек, и позволяет SSH знать.auth
сцене. Затем он устанавливает сеанс входа в систему SSH и запускаетsession
этап PAM .Все это делает 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
.источник
В pam_unix.so была добавлена опция (около февраля 2016 г.), которая называется no_pass_expiry ( здесь можно изменить исходный код или страницу руководства ). По сути, он говорит pam_unix игнорировать просроченный пароль, если для аутентификации использовалось что-то отличное от pam_unix, например, если sshd выполнил аутентификацию.
В результате, если у вас есть версия pam_unix.so, содержащая эту опцию, вы сможете настроить PAM для:
Например, я сконфигурировал сервер RHEL 7 для выполнения вышеизложенного, просто обновив /etc/pam.d/sshd и добавив pam_unix.so no_pass_expiry как к типу учетной записи, так и к типу пароля, например
источник
Затем root может настроить дату изменения пароля:
источник