Назад | Перейти на главную страницу

Система распространения открытых ключей SSH

У нас много разных систем, которыми управляет несколько человек. Мы решили использовать аутентификацию с открытым ключом SSH для доступа к этим системам. Это отлично работает, так как нет необходимости управлять паролями административных учетных записей или делиться ими, не нужно запоминать пароли к различным системам (только пароль для вашего закрытого ключа), не нужно взаимодействовать (вводить пароль) с каждой удаленной командой. .

Проблема в том, что открытыми ключами, установленными в системах, нужно как-то управлять. Люди приходят и уходят, ключи могут быть скомпрометированы, обязанности меняются (лицо, имеющее право войти в одну систему сегодня, может получить доступ к другой, завтра). В настоящее время мы управляем этим, вручную редактируя файлы ~ / .ssh / authorized_keys для каждой учетной записи, которая в этом нуждается, но это требует много работы и подвержено ошибкам.

Есть ли готовый инструмент для управления открытыми ключами в таком сценарии? У вас есть собственные решения? Или вся эта идея управления системами таким образом ошибочна?

Как уже упоминалось в pulegium, любое универсальное программное обеспечение для управления конфигурацией, такое как Кукольный, Повар, Bcfg2 или cfengine смог выполнить задачу.

Поскольку authorized_keys файл не такой сложный, вы также можете использовать rsync или (D) SCM вроде мерзавец или hg для управления этим файлом. У вас есть "главный" файл на одном из ваших серверов, и вы обслуживаете его через rsync / git / hg /…. На каждом другом сервере вы запускаете задание cron, которое периодически извлекает основную копию (если она была изменена) и копирует ее в правильное локальное расположение. Черт возьми, это будет работать даже с чистым HTTP или FTP.

Суть в следующем: имейте одну «главную» копию вашего файла authorized_keys и обновите ее. Пусть «клиенты» (компьютеры, на которых должен быть текущий файл authorized_keys) получат его с вашего главного сервера и развернут локально.

Для OpenSSH доступен патч, который позволяет ему использовать открытые ключи с сервера LDAP, но это действительно имеет смысл только в том случае, если ваши проверки авторизации / учетной записи также выполняются на этом сервере LDAP (так настроена моя среда). Кроме того, он настолько же безопасен, насколько и ваша конфигурация LDAP (поэтому вы хотите использовать SSL и ключи проверки).

Видеть http://code.google.com/p/openssh-lpk/ за патч и другие подробности. Я не знаю ни одной ОС, которая поставляется с этим патчем по умолчанию, но если вы используете FreeBSD, это необязательный патч, если вы используете OpenSSH из портов.

Я запускаю очень простое решение, которое делает то же самое с правилами брандмауэра

пример файла hosts.conf:

192.168.0.1
192.168.2.99
192.168.2.100

distribute.sh:

#!/bin/bash
for d in `cat ./hosts.conf`; do
  echo "copying to $d ...";
  scp /root/.ssh./authorized_keys root@$d:/root/.ssh./authorized_keys
done;

вот и вся магия :-)

Я сейчас проверяю SSH KeyDB. Он предназначен для того, чтобы делать именно это: администрировать роли, серверы и пользователей, распространять ключи пользователей, собирать ключи хостов и т.д.

Я еще не разобрался со всем этим и не уверен, что он полностью работает. Однако код написан на Python и кажется довольно управляемым, поэтому не должно быть слишком сложно стереть его пыль и заставить работать.

Я не уверен, что вы имеете в виду под многими, и не знаю, готовы ли вы что-то изменить, но Kerberos - это тот дроид, которого вы ищете. Это элегантно решит ваши проблемы и позволит аутентифицировать как людей, так и машины.

У вас есть две (которые обычно превращаются в 3) разные проблемы, которые вы пытаетесь решить:

  • Аутентификация (кто вы?)
  • Авторизация (Вам разрешен доступ к этому серверу?)
  • Аудит (что вы делали?)

Аутентификация с открытым ключом - это иногда нормальный способ аутентификации, но он вообще не обращается к авторизации. Мне не нравится аутентификация с открытым ключом, поскольку ее очень легко скомпрометировать (особенно внутри), если у вас нет хороших элементов управления.

Вот где в игру вступают такие решения, как Kerberos. В мире Windows эту проблему решает Active Directory. В мире Unix существует множество вариантов, что и хорошо, и плохо.

Я бы посмотрел Red Hat FreeIPA project, представляющий собой комплект программного обеспечения, упрощающего быстрое создание и запуск AD-подобной системы Kerberos / LDAP / DNS.

Ты можешь использовать Bcfg2 с участием bcfg2-аккаунты распростронять authorized_keys. В качестве дополнительного бонуса у вас будет возможность управлять пользователями и группами.

Bcfg2 обеспечивает безболезненное обслуживание /etc/ssh/ssh_known_hosts с участием SSHbase также.

Есть также SKM