Чи є центральним місцем для авторизованих ключів хороша ідея?


29

Я зараз налаштовую хмарний сервер для запуску наступного стека: Ruby, Passenger, Apache; під Ubuntu 10.04 (Lucid Lynx).

У процесі хочу, щоб зробити сервер легше керувати, я налаштовував ключі RSA root, і www-dataя міг перейти sshна сервер. Те , що я не зробив , як було то , що www-data«s .sshкаталог сидів в /var/wwwякому налаштований каталог по замовчуванням для Apache. Мене хвилює те, що якщо apache не налаштований належним чином, .sshкаталог може бути відкритий.

Я натрапив на рішення , щоб перемістити ~/.ssh/authorized_keysфайл в центрі міста, змінюючи AuthorizedKeysFileв /etc/ssh/sshd_config. Сюди входять два плюси: єдине розташування ключів, і не потрібно турбуватися про погану конфігурацію апаша. Єдине, про що я можу подумати, - це те, що зараз кожен користувач доступний для входу на сервер (очевидно, двошаровий меч центрального ключа файлу.)

Чи є щось, що я пропустив у цій конфігурації? Я над цим піддався, чи це краще рішення, ніж окремі authorized_keysфайли?

Я зелений, коли справа стосується управління сервером, але я повністю готовий називатися поганими іменами за те, що робити погані справи. : D


1
Принаймні, відкриті відкриті ключі (лише для читання) в Інтернеті не є найбільшим ризиком ... (Це може дозволити зловмисникам побачити, чи можуть вони увійти в сервер із приватним ключем, який вони отримали в іншому місці, але це не було б Я не дозволяю їм увійти, просто отримавши це ...) (Серйозні проблеми, якщо є id_rsaфайл ~/.sshі вони встигають прочитати це)
Герт ван ден Берг

Відповіді:


51

Усі файли ключів можна централізувати в одному каталозі і не змішувати в одному файлі.

Просто налаштуйте sshd_configфайл так:

AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

На вашому сервері:

  • Клавіші www-даних будуть увімкнено /etc/ssh/authorized_keys/www-data
  • кореневі клавіші будуть в /etc/ssh/authorized_keys/root

Щодо прав доступу, ці налаштування приймає sshd:

/etc/ssh/authorized_keysналежить root:rootі має режим 755. Ключові файли належать root:rootі мають режим 644.

Можуть працювати інші режими, але я їх не перевіряв.


3
+1, але я не ставлю інших. Встановіть право власності на% u файли користувачеві, щоб це не було необхідним.
Аарон Коплі

1
Хороше рішення проблеми, що зловмисні користувачі можуть додати більше відкритих ключів до своїх ~ / .ssh / санкціонованих_кіїв, що надають доступ іншим.
bbaassssiiee

Я щойно підтвердив, що режим 600 для файлу авторизованих ключів користувача не працює; це повинен бути режим 644
Луїс Е.

@bbaassssiiee Цей АБСОЛЮТНО НЕ вирішує цю проблему. Вони можуть просто поділитися своїм приватним ключем з тим, кому вони хочуть надати доступ (ця можливість, звичайно, може бути пом’якшена, але ця відповідь робить абсолютно нульовою, щоб пом'якшити її)
DylanYoung

1
@DylanYoung Я допускаю, що можливий обмін приватними ключами. Але з chattr я можу відкликати доступ для запису до файлів санкціонованих_ ключів, тому я можу поширювати виключно ці файли, захищаючи також один рядок у кожному файлі.
bbaassssiiee

15

Взагалі кажучи, я б не робив те, що ви пропонуєте. Це порушує загальні припущення (як, наприклад, ~/.ssh/authorized_keysробота з вашими користувачами) та вводить проблеми, про які ви вже згадували у своєму запитанні. Якщо ви бачите яскраві проблеми перед впровадженням, це означає, що ваше рішення не є ідеальним.

Я також думаю, що це ГОТОВА ідея, щоб усі мали доступ до облікового запису послуги: зараз це лише ви, і ви знаєте, що ви вносите зміни. Через 5 років, коли у вас є 5 адміністраторів, ви хочете дізнатися, хто що змінив, і копаючи журнали аудиту, щоб побачити, хто використовував який ключ, коли болить королівський біль.
Вам краще, щоб люди входили як sudoвласні, і використовували щось подібне для ескалації своїх привілеїв і робити все, що їм потрібно зробити.


Якщо ви все ще хочете централізувати SSH ключі, я пропоную заглянути в систему розгортання на зразок Puppet або radmind, щоб керувати / поширювати authorized_keysфайли у відповідні ~user/.ssh/каталоги (або зламати домашнє рішення, яке SCP встановлює їх на місце).
Під час розширення на декілька серверів ви можете заглянути в патч відкритого ключа LDAP для старих версій OpenSSH (або AuthorizedKeysCommandдирективи та відповідного сценарію в новій версії OpenSSH), щоб ви могли централізувати своїх користувачів і не потрібно розповсюджувати їх. їхні ключі по всій мережі, але це, ймовірно, для вас досить далеко.


1
+1 для аргументу обміну. Коротко кажучи, тому що мені знадобився момент, щоб усвідомити його наслідки: взагалі не повинно бути каталогів ~ www-data / .ssh, щоб не було загрози безпеці веб-браузера.
титон

Дякуємо за відгук! Якщо я вас правильно розумію. Я повинен мати ні , rootні www-dataдоступні через SSH ключ не є правильним?
Гевін Міллер

1
Мати ~www-data/.sshкаталог - це не страшна річ (з відповідними дозволами це не суттєвий ризик), але якщо ви збираєтесь використовувати, ~www-data/.sshто, мабуть, краще не мати вашого веб-корінця ~www-data(або переміщуйте веб-кореневище, або переміщуйте www-dataдомашній каталог). Диференціація користувачів є більшим аргументом ІМХО - я знаю, якщо я бачу jsmithвхід, я знаю, що це Джон Сміт. Якщо я бачу www-dataвхід у систему, мені потрібно копати більше, щоб дізнатися, хто це був.
voretaq7

Причина, чому мені знадобився ключ ssh для www-data, полягає в тому, що я використовую Beanstalk (інструмент SCM і розгортання) для виконання розгортань через SFTP. Чи повинен я тоді створити окремий рахунок для Beanstalk, щоб зробити ftp'ing? Яке б там було найкраще рішення?
Гевін Міллер

1
Так воно і є на більшості систем AuthorizedKeysFileв /etc/ssh/sshd_configдефолтів в %h/.ssh/authorized_keys. Ось %hзаповнювач домашнього каталогу. Що заважає вам встановити це /some/folder/ssh_keys_by_user/%h/або навіть /root/ssh_keys/%u. Ви можете навіть надати відповідному користувачу запису доступу до його окремого файлу там (і лише його), пов'язувати файл до стандартного місця (з ln -s /root/ssh_keys_by_user/username /home/username/.ssh/authorized_keys) і не порушувати аформовані припущення.
con-f-use
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.