Система распространения открытых ключей SSH
У нас много разных систем, которыми управляют несколько человек. Мы решили использовать аутентификацию с открытым ключом SSH для доступа к этим системам. Это прекрасно работает, так как нет необходимости управлять или обмениваться паролями административных учетных записей, не нужно запоминать пароли к различным системам (только парольную фразу для вашего закрытого ключа), не нужно взаимодействовать (вводить пароль) с каждой удаленной командой,
Проблема в том, что открытыми ключами, установленными в системах, нужно как-то управлять. Люди приходят и уходят, ключи могут быть скомпрометированы, обязанности меняются (лицо, уполномоченное войти в одну систему сегодня, может получить право доступа к другой системе завтра). В настоящее время мы управляем этим путем ручного редактирования файлов ~/.ssh/authorized_keys для каждой учетной записи, которая нуждается в этом, но это много работы и подвержено ошибкам.
Есть ли готовый инструмент для управления открытыми ключами в таком сценарии? У вас есть свои решения? Или вся эта идея управления системами таким образом ошибочна?
8 ответов
Как уже упоминалось в Pulegium, любое общее программное обеспечение для управления конфигурацией, такое как Puppet, Chef, Bcfg2 или cfengine, может выполнить эту задачу.
Поскольку файл author_keys не так сложен, вы также можете использовать rsync или (D)SCM, такие как git или hg, для управления этим файлом. У вас есть "главный" файл на одном из ваших серверов, который вы обслуживаете через rsync/git/hg/…. На каждом другом сервере вы запускаете задание cron, которое периодически извлекает главную копию (если она была изменена) и копирует ее в правильное локальное местоположение. Черт, это будет работать даже с чистым HTTP или FTP.
Суть заключается в следующем: имейте одну "основную" копию вашего файла author_keys и обновляйте ее. Позвольте "клиентам" (компьютерам, на которых должен быть установлен текущий файл author_keys) получить его с вашего главного сервера и развернуть его локально.
Для OpenSSH имеется исправление, позволяющее использовать открытые ключи с сервера LDAP, но это действительно имеет смысл, только если проверка подлинности / учетных записей также выполняется на этом сервере LDAP (именно так настроена моя среда). Кроме того, он безопасен только для вашей конфигурации LDAP (поэтому вы хотите использовать SSL и проверочные ключи).
См. http://code.google.com/p/openssh-lpk/ для исправления и получения дополнительной информации. Я не знаю ни одной ОС, которая поставляется с этим патчем по умолчанию, но если вы используете FreeBSD, это дополнительный патч, если вы используете OpenSSH из портов.
Я запускаю очень простое решение, которое делает то же самое с firewall-rules
пример файла 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 и выглядит довольно легко управляемым, поэтому не должно быть слишком сложно от него избавиться и заставить его работать.
У вас есть две (которые обычно превращаются в 3) разные проблемы, которые вы пытаетесь решить:
- Аутентификация (Кто ты?)
- Авторизация (Вам разрешен доступ к этому серверу?)
- Аудит (Что вы делали?)
Аутентификация с открытым ключом - это хороший способ аутентификации, но он вообще не касается авторизации. Мне не нравится аутентификация с открытым ключом, так как очень легко пойти на компромисс (особенно внутри), если у вас нет хороших элементов управления.
Вот где такие решения, как Kerberos, вступают в игру. В мире Windows Active Directory решает эту проблему. В мире Unix существует множество вариантов, и это хорошо и плохо.
Я бы ознакомился с проектом Red Hat FreeIPA, представляющим собой пакет программного обеспечения, который позволяет легко и быстро запустить систему, подобную AD, Kerberos/LDAP/DNS.
Вы можете использовать Bcfg2 с bcfg2-account для распространения authorized_keys
, В качестве дополнительного бонуса у вас будет возможность контролировать пользователей и группы.
Bcfg2 позволяет безболезненно поддерживать /etc/ssh/ssh_known_hosts
с SSHbase также.
Я не уверен, что вы подразумеваете под многими, и я не знаю, готовы ли вы измениться, но Kerberos - это дроид, которого вы ищете. Это изящно решит ваши проблемы и подтвердит подлинность как людей, так и машин.