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.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
.