sshd_config
sshd_config это основной файл конфигурации SSH демона в Linux, обычно расположенный по пути /etc/ssh/sshd_config. Здесь настраивается, разрешён ли вход по паролю, вход под root и какие шифры допускаются.
Что этот файл на самом деле контролирует
sshd_config управляет почти всеми аспектами поведения SSH, связанными с безопасностью: может ли войти root, принимаются ли пароли, какой порт слушает демон и каким пользователям или группам разрешено подключаться вообще.
Распространённая ошибка
Редактировать этот файл напрямую и перезапускать службу SSH без проверки новой конфигурации в отдельной сессии. Одна опечатка может заблокировать все удалённые сессии на сервере без возможности вернуться, кроме консольного доступа от хостинг-провайдера.
Самые важные директивы sshd_config и безопасный способ их проверки разобраны здесь: руководство по усилению защиты SSH.
Подключаемые файлы и какое значение побеждает
Неожиданность в sshd_config в том, что, согласно руководству sshd_config, для каждого параметра используется первое полученное значение, а не последнее. Это важно из-за директивы Include, которая подключает другие файлы. Совпадения с шаблонами обрабатываются в лексическом порядке, а относительный путь ищется в /etc/ssh. Некоторые дистрибутивы добавляют строку Include в стандартный файл, часто с каталогом sshd_config.d. Если эта строка стоит выше вашей настройки, значение из подключённого файла побеждает ваше, что бы вы ни написали ниже.
Так усиление защиты незаметно перестаёт работать: вы задали PasswordAuthentication no в основном файле, а другой файл, прочитанный раньше, всё ещё говорит yes. Найдите все места, где задан параметр, а затем спросите у демона итог:
grep -n '^Include' /etc/ssh/sshd_config
sudo grep -rniE 'passwordauthentication|permitrootlogin' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
sudo sshd -T | grep -iE '^(passwordauthentication|permitrootlogin) '
Только последняя строка показывает, что будет действовать на самом деле. Делайте эту проверку частью каждого изменения и правьте тот файл, который побеждает, вместо того чтобы добавлять противоречащую строку в другом месте.
Блоки Match и проверка для конкретного пользователя
Строка Match начинает условный блок. По руководству он заканчивается следующей строкой Match или концом файла, а внутри разрешён лишь ограниченный набор параметров, включая AllowUsers, PermitRootLogin и PasswordAuthentication. Если параметр встречается в нескольких подходящих блоках Match, применяется только первое вхождение. Поэтому размещайте Match в самом конце, а общие настройки держите выше. Частая ошибка: строка, задуманная как глобальная, оказывается под Match.
PermitRootLogin no
Match Address 192.0.2.10
PermitRootLogin forced-commands-only
Чтобы увидеть, как правила применяются к конкретному подключению, используйте параметр описания соединения вместе с расширенным тестовым режимом, как сказано в руководстве sshd:
sudo sshd -T -C user=deploy,addr=192.0.2.10,host=server | grep -i permitrootlogin
Без -C у sshd нет данных о соединении для сопоставления, поэтому в выводе ваши блоки Match не учитываются. Перед перезагрузкой всегда запускайте sudo sshd -t, как объясняет руководство по усилению защиты SSH.
Связанные термины: SSH, Вход под root, Аутентификация по ключу, authorized_keys, PermitRootLogin, PasswordAuthentication, MaxAuthTries, AllowUsers, PAM (подключаемые модули аутентификации), SSH X11 forwarding (проброс X11), ssh-keygen (создание ключей OpenSSH).
Часто задаваемые вопросы
Где расположен файл sshd_config?
Почти всегда в /etc/ssh/sshd_config на Debian, Ubuntu, RHEL и большинстве других дистрибутивов Linux.
Как применить изменения после редактирования?
Сначала выполните sshd -t для проверки синтаксиса, затем перезапустите или перезагрузите службу SSH, например через systemctl reload sshd, оставив открытой существующую сессию на случай сбоя.
Какая настройка в этом файле влияет больше всего?
PasswordAuthentication. Установка значения "no" в пользу входа по ключу убирает самую частую цель для brute-force атак на всём сервере.
Важен ли порядок строк в sshd_config?
Да. Для большинства параметров используется первое полученное значение, поэтому настройка, стоящая раньше, в том числе в файле, подключённом строкой Include выше, перекрывает более поздний дубликат. Блоки Match должны идти последними.
Как проверить конфигурацию для конкретного пользователя или IP адреса?
Выполните sshd -T с параметром -C, например sshd -T -C user=deploy,addr=192.0.2.10,host=server. Команда печатает действующую конфигурацию с применёнными подходящими блоками Match.
Хотите увидеть, в каком состоянии ваш сервер?
Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.
Получить бесплатную проверку сервераОткрыть Security Lab