SSH без пароля или 50-cloud-init.conf
Пришёл алерт от хостинга, что на VPS заканчивается место. А там ничего такого нет, что съедало бы диск. Полез смотреть.
Вспухли системные логи и логи авторизаций — начали перебирать пользователей и брутфорсить пароли, чтобы по ssh войти на сервер. Что очень странно, потому что в самом начале я отключал авторизацию по паролю, оставив только по SSH-ключу.
Лезу в /etc/ssh/sshd_config, там всё чётко:
PasswordAuthentication noПри этом в логах в реальном времени продолжают срать неудачные авторизации.
Оказывается, в папке /etc/ssh/sshd_config.d/ могут лежать другие конфигурации, которые имеют больший приоритет! И конечно же там был конфиг с одной строчкой
PasswordAuthentication yesИ файл датирован днём создания сервера.
Структура папки sshd_config.d
В Ubuntu 22.04 и других версиях, папка /etc/ssh/sshd_config.d/ используется для хранения дополнительных файлов конфигурации SSH, которые дополняют или переопределяют настройки основного файла конфигурации SSH /etc/ssh/sshd_config. Этот каталог был введен для упрощения управления конфигурацией SSH, особенно в случае использования автоматических инструментов развертывания и управления конфигурацией.
В этом каталоге могут находиться файлы, которые содержат фрагменты конфигурации SSH. Например, здесь могут быть файлы с такими именами:
50-cloud-init.conf99-custom-settings.conf
Каждый из этих файлов может содержать конфигурационные параметры, как и основной файл sshd_config. Параметры из этих файлов будут загружены и применены сервером SSH (sshd) при запуске.
Это удобно: файл
sshd_configсодержит все возможные параметры SSH, и искать в нём директивы при редактировании — так себе.
Что такое 50-cloud-init.conf
50-cloud-init.conf - это файл, который создаётся и управляется инструментом cloud-init. Инструмент часто используется для инициализации виртуальных машин и серверов в облачных средах. Мой VPS как раз подходит под эту категорию. Провайдер виртуальных машин/серверов задаёт конфигурацию по умолчанию.
В нашем кейсе по умолчанию как раз нужно уметь подключиться к машине по SSH с паролем для первоначальной настройке.
Приоритет цифр в начале имени файла
Цифры в начале имени файла в каталоге /etc/ssh/sshd_config.d/ определяют порядок их загрузки и применения. Файлы загружаются в порядке возрастания чисел. Это означает, что:
50-cloud-init.confбудет загружен раньше, чем99-custom-settings.conf- Параметры, указанные в файлах с более высоким числом, могут переопределять параметры из файлов с более низким числом.
Пример
Рассмотрим пример:
/etc/ssh/sshd_config.d/50-cloud-init.confсодержит строкуPermitRootLogin no/etc/ssh/sshd_config.d/99-custom-settings.confсодержит строкуPermitRootLogin yes
В этом случае, окончательное значение параметра PermitRootLogin будет yes, так как файл 99-custom-settings.conf загружается позже и переопределяет значение из файла 50-cloud-init.conf.