2012-02-15 3 views
1

У меня есть машина для разработчика, и я установил ключ SSH, чтобы позволить им получить доступ к серверу. Публичные и закрытые ключи в .ssh явно видны человеку.Защита ключей SSH

Есть ли способ защитить эти ключи? Если я не хочу, чтобы эти ключи были скопированы на другой сервер, могу ли я сделать что-нибудь?

По умолчанию ssh-agent запускается под зарегистрированным пользователем, поэтому я, вероятно, не могу отнять права доступа пользователя к папке ~/.ssh.

Спасибо, Tabrez

+1

Нет, вам нечего делать, если вы храните ключ в файле. Существуют способы предотвращения копирования, если ключ хранится на аппаратном уровне (смарт-карта). – Zoredache

+0

SSH не предназначен для ограничения доступа на основе машин – madth3

+1

Я думаю, вы можете проверить 'man sshd_config' и настроить' HostCertificate' и/или 'Match', чтобы ограничить пользователя определенным исходящим хостом. – nicerobot

ответ

1

Вы хотите, чтобы позволить разработчику использовать ключ, но не копировать его.

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

  • Разработчик входит в систему на специальном сервере «ключ хранителя», где хранится ключ. Они могут войти на этот сервер, используя другой ключ SSH (а не тот, который вы пытаетесь контролировать), пароль, некоторая форма двухфакторной аутентификации или что-то еще, что вы выбираете, какой SSH поддерживает.
  • счет Застройщика на этом сервере настроен с принудительной командой или ограниченной оболочкой, которая продолжает процесс, осуществляя эти действия:
    • запускает новый SSH агент (работает на сервере ключей попечителя, конечно)
    • загружает управляемый ключ в этот агент
    • запускает соединение ssh с каким-либо другим сервером с включенной пересылкой агента.
  • Разработчик регистрируется на этом втором сервере (на котором у них должна быть учетная запись). Этот второй сервер, возможно, является сервером общего назначения, с которым вы уже работаете.

Разработчик теперь может войти в другие места с этого второго сервера, используя агент, работающий на ключевом хранилище, но у них никогда не было доступа к какой-либо оболочке или возможности проверить/скопировать файлы на ключ сервер хранителя.

Это решение связано с тем, что все сеансы разработчика передаются через ключ-хранилище, а также через второй общий сервер. Это может быть недостатком, если ключ хранителя сервера удален. Разработчику также сложно и неинтуитивно использовать эту возможность для передачи файлов (SCP или SFTP) обратно на их локальную машину.

Альтернативное решение предполагает создание программного обеспечения для создания локального агента агента SSH локально на машине разработчика, которая перенаправляет запрос агента SSH по выделенному соединению с реальным агентом на ключевом сервере-хранилище. С небольшой работой вы можете настроить выделенное соединение с сервером ключевого хранилища (я рекомендую использовать SSH-соединение), автоматически запускать простую подоболочку на машине разработчика, в которой есть сокет агента stub ssh в своей среде, чтобы они могли «просто использовать это ", и это решение может быть очень функциональным и удобным для пользователя. Я сделал это сам, но это выходит за рамки ответа Stackoverflow.

+0

Привет, Celada - спасибо за ответ. Я в порядке с удаленной машиной и не имею механизм передачи файлов обратно на локальную машину разработчика. Как я могу защитить ключи на удаленной машине (где пользователь регистрируется через RDP или VNC)? Ssh-agent работает под привилегиями пользователя, и поэтому пользователь получает доступ к ~/.ssh. – Tabrez

+0

Пользователь не может взять на себя управление агентом или самими ключевыми файлами, потому что им не разрешено получать оболочку или запускать произвольные программы в ключевом хранилище. Когда они регистрируются в ключевом хранителе, они вынуждены использовать ограниченную оболочку. – Celada

Смежные вопросы