SSH без пароля или 50-cloud-init.conf

9 мая 2024 г. в Заметки

Пришёл алерт от хостинга, что на VPS заканчивается место. А там ничего такого нет, что съедало бы диск. Полез смотреть.

Вспухли системные логи и логи авторизаций — начали перебирать пользователей и брутфорсить пароли, чтобы по ssh войти на сервер. Что очень странно, потому что в самом начале я отключал авторизацию по паролю, оставив только по SSH-ключу.

Лезу в /etc/ssh/sshd_config, там всё чётко:

PasswordAuthentication no

При этом в логах в реальном времени продолжают срать неудачные авторизации.

Оказывается, в папке /etc/ssh/sshd_config.d/ могут лежать другие конфигурации, которые имеют больший приоритет! И конечно же там был конфиг с одной строчкой

50-cloud-init.conf
PasswordAuthentication yes

И файл датирован днём создания сервера.

Структура папки sshd_config.d

В Ubuntu 22.04 и других версиях, папка /etc/ssh/sshd_config.d/ используется для хранения дополнительных файлов конфигурации SSH, которые дополняют или переопределяют настройки основного файла конфигурации SSH /etc/ssh/sshd_config. Этот каталог был введен для упрощения управления конфигурацией SSH, особенно в случае использования автоматических инструментов развертывания и управления конфигурацией.

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

  • 50-cloud-init.conf
  • 99-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.