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

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

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

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

Чтобы добиться этого, я добавил в свой sshd_config:

HostKey /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 restart sshd                                                                            
sshd(ok)
sshd(ok)

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

# ssh -Q HostbasedAcceptedAlgorithms
# ssh -Q HostKeyAlgorithms
# 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]

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

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

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

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

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

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

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

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

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

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

Связанный контент