Термін дії пароля та реєстраційний ключ на основі SSH з термінами UsePAM так


12

Є машина SLES 11. Користувачі входять у систему через SSH та паблікі (змішані, деякі користувачі використовують пароль, інші користуються ключем 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: Рішення не може бути: встановіть пароль користувача, щоб він ніколи не закінчувався

ОНОВЛЕННЯ №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це хтось робить, чи ні, але це відчувається як потрібне місце.
Патрік,

1
встановіть обліковий запис користувача, щоб термін його дії не закінчувався :)
Raza

@Raza: Дякую :) чудова ідея, але не може бути рішенням :(
thequestionthequestion

спробуйте ForcedPasswdChange Noце для SSH1
Raza

1
Я зрозумів, що ForcedPasswdChange Noпісля закінчення терміну дії не вийде. ви шукаєте рішення, яке дозволить користувачеві з минулим терміном ввійти
Raza

Відповіді:


10

Порядок операцій, що викликає запит про термін дії, що минув, такий:

  • SSH запускає accountетап PAM , який підтверджує, що обліковий запис існує та дійсний. На 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.


Приємне пояснення порядку операцій, дякую.
M_dk

3

До пам_unix.so (близько лютого 2016 р.) Була додана опція під назвою no_pass_expiry ( зміна вихідного коду тут або людина тут ). В основному це говорить pam_unix проігнорувати минулий пароль, якщо для auth було використано щось інше, ніж pam_unix, наприклад, якщо sshd виконав auth.

Як результат, якщо у вас є версія 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

1
Просто спробував це, і це працює. Ви можете перевірити, чи підтримує ваш PAM цей параметр чи ні, шукаючи "no_pass_expiry", чи існує на сторінці "man 8 pam_unix".
Томофумі

Зміна коду від 2016 року досі не присутня в Ubuntu 18.04 ... :(
ColinM

0
  • Можливо, ви не захочете змінити свою PAM або sshd_config з міркувань відповідності.
  • Ви можете використовувати парольAuthentication no в sshd_config
  • Можливо, у вас є випадкові паролі.
  • Можливо, ви навіть застосували відповідність СНД.
  • Проте ваші користувачі отримують підказку

Тоді root може налаштувати дату, змінену паролем:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.