Система розповсюдження відкритих ключів SSH


26

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

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

Чи є якийсь готовий інструмент для управління відкритими ключами в такому сценарії? У вас є власні рішення? Або вся ця ідея управління системами таким чином хибна?


Я не можу відповісти на ваше запитання, але коли я прочитав його, я просто почув, як він кричить про якусь систему баз даних.
Джон Гарденєр

Дійсно, я можу побачити місце для бази даних на "бекенді" ("сервер ключів"), хоча я вважаю за краще обмежити доступ до бази даних там і мати ключі, розподілені по каналу SSH. Не відкривати жодних інших каналів зв'язку в керованих системах. Насправді я відчуваю себе здатним реалізувати такий інструмент / систему самостійно, хоча я б вважав за краще щось готове та перевірене ефективним.
Яцек Коньєчний

Відповіді:


18

Як уже згадував пулегіум, будь-яке загальне програмне забезпечення для управління конфігурацією, наприклад Puppet , Chef , Bcfg2 або cfengine, може виконати це завдання.

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

Суть полягає в тому, щоб мати одну "головну" копію файлу санкціонованих ключів та оновити його. Нехай "клієнти" (комп'ютери, у яких має бути поточний файл дозволених ключів), витягують його з вашого головного сервера та розгортають його локально.


1
Ми зручно використовуємо маріонетку для управління ~ 200 серверами Linux (паб-ключі - це лише файл, який потрібно застосувати як атрибут користувача).
ForgeMan

1
Я прийму цю відповідь, мабуть, я не стану кращим. Здається, що вибір для мене такий: 1. Зберігайте речі такими, якими вони є зараз. 2. Створіть власну ланцюжок інструментів для керування файлами, що дозволені. 3. Використовуйте деякі існуючі, загальні інструменти для управління серверами, як-от Ляльковий чи Шеф-кухар… Хоча ці інструменти здаються занадто великими для це просте завдання. 4. Використовуйте інший механізм аутентифікації / авторизації (наприклад, Kerberos) ... хоча це також здається занадто складним інструментом для простого завдання. Дякую
Jacek Konieczny

ця система настільки ж безпечна, як і канал, через який витягується головна копія.
yrk

1
Ansible - це дуже легка система CM, яка має модуль для вимкнення авторизованих файлів ключів через ssh. Дивіться ansible.cc/docs/modules.html#authorized-key
RS

11

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

Дивіться http://code.google.com/p/openssh-lpk/ для виправлення та додаткову інформацію. Я не знаю жодної ОС, яка постачає цей патч за замовчуванням, але якщо ви використовуєте FreeBSD, це необов'язковий патч, якщо ви використовуєте OpenSSH з портів.


1
До речі, використання pam_ldap також дозволяє вирішити проблему "хтось, хто має дозвіл на доступ до машини. Сьогодні може бути не дозволено отримати доступ до неї завтра" - читайте на pam_ldap, якщо вас цікавить цей аспект ...
voretaq7

5

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

приклад файлу 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;

ось уся магія :-)


5

Зараз я перевіряю SSH KeyDB . Мається на увазі робити саме це, адмініструвати ролі, сервери та користувачів, поширювати ключі користувачів, збирати хост-ключі тощо. У ньому навіть є щось, що називається "місцезнаходження".

Я ще не все пропрацював, і не впевнений, чи працює він повністю. Однак код знаходиться в python і, здається, досить керований, тому його не слід надто важко запилити і змусити його працювати.


1

Я не впевнений, що ви маєте на увазі під багатьох, і я не знаю, чи готові ви змінити, але Керберос - дроїд, якого ви шукаєте. Це вирішить ваші проблеми елегантно і підтвердить автентичність як людей, так і машин.


1

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

  • Аутентифікація (хто ти?)
  • Авторизація (Чи дозволено ви отримувати доступ до цього сервера?)
  • Аудит (що ви робили?)

Auth відкритого ключа - це нормальний спосіб автентифікації іноді, але взагалі не стосується авторизації. Мені не подобається auth з відкритим ключем, оскільки це дуже легко зробити компроміс (особливо внутрішньо), якщо у вас немає хорошого контролю.

Ось де вживаються такі рішення, як Керберос. У світі Windows Active Directory вирішує цю проблему. У світі Unix існує безліч варіантів вибору, що є і хорошою, і поганою справою.

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


Я розумію різницю між автентифікацією, авторизацією та аудитом. А SSH 'pooblasti_keys' надає як автентифікацію, так і дані авторизації. Це далеко не ідеально, але це просто. А простота часто є великою перевагою, також у безпеці. Kerberos зі складною інфраструктурою може відмовитись у безпеці більше, ніж ssh з файлами, які мають авторизовані ключі. Хоча це не означає, що те чи інше є більш безпечним.
Яцек Коньєчний

Управління файлами санкціонованих_кейсів - це np для декількох серверів, але ви швидко дістаєтесь до точки, коли її неможливо керувати. Я не намагався сказати, що це "погане" рішення. Так само складності в Kerberos є недоцільними для двох серверів ... але інвестиції в розробку / реалізацію kerberos того варті в більш широких умовах.
duffbeer703

1

Ви можете використовувати Bcfg2 з bcfg2-акаунтами для розповсюдження authorized_keys. Як додатковий бонус, ви зможете контролювати користувачів та групи.

Bcfg2 також забезпечує безболісне обслуговування за /etc/ssh/ssh_known_hostsдопомогою SSHbase .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.