Вопрос или проблема
Я был немного удивлён тем, что пользователь всё ещё может получить 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 играют ключевую роль в этом процессе. Будьте внимательны при внесении изменений и всегда проверяйте, чтобы все модули были правильно настроены. Надеюсь, эти рекомендации помогут вам в решении вашей проблемы.