Порядок настроек в sshd_config
Гуляй рука — балдей писюн!
Как на самом деле работает порядок настроек в sshd_config
Собственно тут и есть важный нюанс, который зачастую не укладывается в головах людей, либо они просто вслепую используют то, что используют.
В большинстве конфигов работает понятная логика — последнее значение параметра переопределяет предыдущее.
sshd_config важнее не последнее объявление параметра, а первое.читать первым в телеграм читать первым в макс
Но в sshd_config для большинства параметров, всё так, но наоборот — используется первое найденное значение. Охуеть? Именно!
Рассмотри пример:
Создаём файл: /etc/ssh/sshd_config.d/00-security.conf с содержимым:
PermitRootLogin no
А рядом создаем: /etc/ssh/sshd_config.d/01-somename.conf и прописываем:
PermitRootLogin yes
Можно предположить, что второй файл переопределит первый, потому что он обрабатывается позже. Но хуй там плавал! Этого не произойдёт.
Файлы, подходящие под маску /etc/ssh/sshd_config.d/*.conf, обрабатываются в лексикографическом порядке:
00-security.conf
01-somename.conf
10-bashdays.conf
50-linuxfactory.conf
Сначала SSH прочитает PermitRootLogin no, значение параметра уже будет установлено, а когда позже встретится PermitRootLogin yes, оно будет проигнорировано, потому что для PermitRootLogin уже найдено первое значение.
И итоговая настройка останется такой PermitRootLogin no.
Но всегда есть НО. В основном файле /etc/ssh/sshd_config директива Include тоже обрабатывается в том месте, где она указана.
Например, такой вариант будет работать:
Include /etc/ssh/sshd_config.d/*.conf
PermitRootLogin yes
Сначала будет прочитан 00-security.conf с PermitRootLogin no, после этого объявление из основного конфига уже ничего не изменит:
PermitRootLogin yes
В итоге всё равно будет PermitRootLogin no. Но если порядок обратный:
PermitRootLogin yes
Include /etc/ssh/sshd_config.d/*.conf
то первым найденным значением станет PermitRootLogin yes, а настройка из 00-security.conf уже не сможет её переопределить.
То есть файл 00-security.conf — рабочее решение, но только при соблюдении двух условий:
- Директива
Include /etc/ssh/sshd_config.d/*.confнаходится раньше других объявленийPermitRootLoginв основном конфиге. - До
00-security.confнет другого подключаемого файла, который уже задаёт этот параметр.
Проверять результат лучше не глазами по файлам, а через сам sshd:
sshd -T | grep permitrootlogin
В ожидаемых результатах увидишь permitrootlogin no/yes. Также перед перезапуском ssh стоит проверить синтаксис:
sshd -t
По-любому ты такое игнорируешь, просто возьми за правило, это как с nginx -t после каждой правки конфигов. Тут даже ключ -t запоминать не нужно.
Главный вывод:
В sshd_config важнее не последнее объявление параметра, а первое. Поэтому настройки безопасности нужно размещать как можно раньше — и среди подключаемых файлов, и относительно директив в основном конфиге.
Такие вот дела, ставь лайк, пиши коммент…
