![Отключение определенных ключей OpenSSH в OpenBSD: почему соответствующие записи «sshd_config» игнорируются и почему «ssh-keygen -A» генерирует запрещенные ключи?](https://rvso.com/image/768908/%D0%9E%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9%20OpenSSH%20%D0%B2%20OpenBSD%3A%20%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%89%D0%B8%D0%B5%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8%20%C2%ABsshd_config%C2%BB%20%D0%B8%D0%B3%D0%BD%D0%BE%D1%80%D0%B8%D1%80%D1%83%D1%8E%D1%82%D1%81%D1%8F%20%D0%B8%20%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%C2%ABssh-keygen%20-A%C2%BB%20%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B8%D1%80%D1%83%D0%B5%D1%82%20%D0%B7%D0%B0%D0%BF%D1%80%D0%B5%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%3F.png)
Я пытаюсь добиться следующего на своих серверах OpenBSD 6.9:
- Запрет на использование всех ключей, кроме
ssh-ed25519
одного на обоихСЕРВЕРиКЛИЕНТстороны. - Ограничение
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 в обоих файлах конфигурации, поэтому эти файлы конфигурации действительно загружаются.
Большое спасибо за все полезные ответы.