Как предотвратить доступ по ssh после истечения срока действия учетной записи Linux?

Вопрос или проблема

Я был немного удивлён тем, что пользователь всё ещё может получить ssh-доступ к машине под управлением Linux (Ubuntu 18.04.6 LTS), где его учётная запись истекла.

Я настроил дату истечения учётной записи с помощью chage:

sudo chage -l xxxx
Последнее изменение пароля               : 10 окт, 2024
Пароль истекает                         : никогда
Пароль становится неактивным            : никогда
Учётная запись истекает                  : 5 ноя, 2024
Минимальное количество дней между изменениями пароля : 0
Максимальное количество дней между изменениями пароля : 99999
Количество дней предупреждения до истечения пароля : 7

Учётная запись истекла 05.11.2024, но пользователь всё ещё может подключаться через ssh.

Есть ли какая-либо конфигурация в sshd сервере или PAM, чтобы обеспечить истечение учётной записи?

Насколько мне известно, sshd имеет UsePAM yes, и PAM должен предотвращать вход, но единственное, что он делает, это выводит Ваша учётная запись истекла; пожалуйста, свяжитесь с администратором системы в баннере ssh.

Я получаю то же самое, если выполняю sudo su xxxx, я получаю Ваша учётная запись истекла; пожалуйста, свяжитесь с администратором системы, но я получаю приглашение оболочки в любом случае.

PAM — это модульная система; она полностью полагается на конфигурацию в /etc/pam.d/, чтобы определить, какие модули вызываются и как их результаты учитываются в общем результате вызова PAM.

Например, каждый модуль может быть загружен как ‘обязательный’, где его возвращаемый код ошибки в конечном итоге влияет на результат, или как ‘критичный’, где код ошибки является немедленным отказом, или как ‘необязательный’, где ошибки этого модуля просто игнорируются, или несколько других вариантов (см. pam(8) и pam.conf(5)).

Истечение срока действия в соответствии с данными /etc/shadow обрабатывается модулем pam_unix.so в секции account (авторизация) конфигурации PAM. Если вы получаете сообщение “Учётная запись истекла” от pam_unix, но это не останавливает процесс, то это похоже на то, что модуль был (случайно или по другим причинам) определён как необязательный вместо обязательного.

Когда sshd обрабатывает соединение, он использует модули из /etc/pam.d/sshd; когда выполняется su, используются su или su-l. Эти модули часто включают общую /etc/pam.d/system-auth или аналогичную. Просмотрите все эти конфигурации, пока не найдёте неправильно настроенный модуль и не измените его на ‘обязательный’.

$ grep -r account.*pam_unix /etc/pam.d
system-auth:16:account    required                    pam_unix.so

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

  • Секция ‘auth’ обрабатывает проверку паролей конкретно (например, pam_unix проверяет пароли по /etc/shadow); эта секция пропускается для входа без пароля, как SSH-ключи.
  • Секция ‘account’ отвечает за общий контроль доступа (независимо от метода аутентификации), поэтому именно здесь pam_unix осуществляет проверки истечения и блокировки.
  • Секция ‘session’ отвечает за настройку сессии, где тот же модуль pam_unix просто записывает бесполезное сообщение в syslog.
  • Секция ‘password’ обрабатывает изменения пароля с использованием команды passwd.

Ответ или решение

Чтобы предотвратить доступ по SSH к учетной записи Linux после истечения срока ее действия, важно правильно настроить систему PAM (Pluggable Authentication Modules) и конфигурацию SSH-сервера. Давайте подробно рассмотрим шаги, необходимые для решения данной проблемы, с учетом специфики вашей ситуации.

1. Проверка настроек PAM

PAM является модульной системой, которая использует конфигурацию в директории /etc/pam.d/ для определения последовательности и логики вызовов модулей. Как было упомянуто, если вы получаете сообщение об истечении срока действия учетной записи, но процесс не завершается, это указывает на неверную конфигурацию модуля.

Задачи:

  • Откройте файл конфигурации для SSH, который обычно находится в /etc/pam.d/sshd.
  • Убедитесь, что строка с pam_unix.so в секции account имеет статус required, а не optional.
grep -r 'account.*pam_unix' /etc/pam.d/

Если вы видите строки, где pam_unix.so задан как optional, измените их на required. Пример правильной конфигурации:

account required pam_unix.so

2. Проверка конфигурации SSH

Убедитесь, что в конфигурации вашего SSH-сервера включены необходимые параметры. Откройте файл конфигурации SSH, который находится по адресу /etc/ssh/sshd_config, и проверьте следующее:

UsePAM yes

Этот параметр позволяет использовать модули PAM для управления доступом.

3. Применение других методов

Если проблема сохраняется даже после настройки PAM и SSH, можно рассмотреть дополнительные меры:

  • Установка ограничения по времени: Используйте usermod для ограничения доступных часов входа пользователя, что поможет предотвратить доступ вне рабочего времени.
sudo usermod -e 2024-11-05 имя_пользователя
  • Блокировка учетной записи: Вы также можете временно заблокировать учетную запись с помощью:
sudo usermod -L имя_пользователя

4. Обновление системных логов

Не забудьте проверить системные журналы для получения дополнительной информации о причинах, по которым учетная запись все еще может быть доступна. Вы можете использовать команду tail или less для просмотра последних записей журнала:

sudo tail -f /var/log/auth.log

Заключение

В соответствии с вышеописанными шагами, вы сможете эффективно управлять доступом пользователей по SSH с учетом истечения срока действия их учетных записей. Настройка PAM и конфигурация SSH играют ключевую роль в этом процессе. Будьте внимательны при внесении изменений и всегда проверяйте, чтобы все модули были правильно настроены. Надеюсь, эти рекомендации помогут вам в решении вашей проблемы.

Оцените материал
Добавить комментарий

Капча загружается...