Рейтинг:0

Отключение определенных ключей OpenSSH в OpenBSD: почему соответствующие записи «sshd_config» игнорируются и почему «ssh-keygen -A» генерирует запрещенные ключи?

флаг cn

Я пытаюсь добиться следующего на своих серверах OpenBSD 6.9:

  1. Запрет на использование всех ключей, кроме ssh-ed25519 один на обоих СЕРВЕР и КЛИЕНТ стороны.
  2. Ограничение ssh-кейген -A генерировать ключи только авторизованным ssh-ed25519 Алгоритм и ничего больше.

Чтобы добиться этого, я добавил следующие строки в свой sshd_config:

Ключ хоста /etc/ssh/ssh_host_ed25519_key
CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519

Я также добавил следующие строки в свой ssh_config:

CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519

Я удалил все ключи, кроме авторизованного.

Перезапустил sshd:

# rcctl перезапустить sshd                                                                            
sshd (хорошо)
sshd (хорошо)

После проверки того, используются ли мои настройки, выполнив следующие команды:

# ssh -Q Принятые алгоритмы на основе хоста
# ssh -Q Алгоритмы ключа хоста
# ssh -Q PubkeyAcceptedAlgorithms

К моему удивлению, вот с чем они все возвращаются:

ssh-ed25519
[email protected]
[email protected]
[email protected]
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

Другими словами, ключевые ограничения игнорируются.

На всякий случай я даже перезапустил сервер, но разницы нет.

Потенциальный обходной путь — удалить все ключевые файлы, кроме авторизованного. Тем не менее, сценарий инициализации /etc/rc имеет линию, ssh-кейген -A, который восстанавливает все отсутствующие ключи ssh после каждой перезагрузки системы, прежде чем запустится демон sshd, в том числе запрещенных алгоритмов!

Так что удаление ключей не решает проблему.

В качестве дополнительного обходного пути я мог бы удалить ssh-кейген -A строку из сценария инициализации или заменить ее на мой собственный алгоритм генерации ключей, но это приведет к тому, с чего все началось: необходимость решать эту проблему снова и снова, например. после каждого обновления системы, всякий раз, когда команда OpenBSD выпускает новую версию /etc/rc. Автоматизировать удаление этой строки и протестировать такой небрежный обходной путь на большом количестве серверов сложно, и это может привести к массовому сбою сети, если что-то пойдет не так.

Поэтому я продолжил свое расследование и покопался в исходном коде ssh-keygen. Я обнаружил, что невозможно ограничить поведение переключение снаружи, например. через конфигурационные файлы. Он даже не выполняет предварительную проверку, авторизованы ключи или нет, он просто генерирует ключи в соответствии со списком алгоритмов из жестко запрограммированного массива. Единственный способ избежать этого — отредактировать, перекомпилировать и использовать собственный форк ssh-keygen, но тогда мне придется иметь дело с этим после каждого обновления OpenSSH...

Я нашел частичное решение для других операционных систем, но не для OpenBSD.

Может ли кто-нибудь указать мне правильное решение? Почему мой sshd_config и ssh_config ключевые ограничения игнорируются и как получить ssh-кейген -A перестать генерировать ключи с запрещенными алгоритмами?

Прежде чем кто-либо спросит: все остальные настройки используются в обоих файлах конфигурации OpenSSH, поэтому эти файлы конфигурации действительно загружаются.

Большое спасибо за все полезные ответы.

Michael Hampton avatar
флаг cz
Для ssh-keygen вы должны поговорить с разработчиками OpenSSH через любую систему отслеживания проблем, которую они используют.
Michael Hampton avatar
флаг cz
Кроме того, я бы также пожаловался мейнтейнерам OpenBSD на использование ими ssh-keygen -A в сценариях запуска. В Linux все ключи генерируются отдельно, и генерация каждого из них (например, rsa, ecdsa, ed25519) может быть включена или отключена по желанию независимо от других.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.