Ограничение доступа для пользователей с помощью пары ключей: загадка .pem

вот моя проблема

У меня есть экземпляр ec-2 на AWS с Ubuntu Server. Во время первоначального запуска экземпляра я сгенерировал пару ключей, перейдя в консоль AWS --> Пары ключей --> Создать пару ключей. Он сгенерировал ключ abcxxxx.pem, и я его сохранил.

Вот где начинается проблема

  • Я возглавляю проект, в котором несколько разработчиков приходят и уходят. Недолго думая, я раздал свой файл .pem 2-3 разработчикам. С тех пор они покинули проект, и я хочу предоставить доступ к AWS только активным разработчикам. По сути, я не хочу, чтобы 2-3 разработчика (с файлом .pem) имели доступ к моей машине.

  • Для всех новых разработчиков (я больше не распространяю файл .pem) я даю доступ к машине AWS, вставляя туда public key в /home/ubuntu/.ssh/authorized_keys. Это дает им доступ к машине.

У меня два вопроса:

  1. Как я могу ограничить доступ к людям, у которых уже есть файл .pem? Повлияет ли удаление их открытого ключа из /home/ubuntu/.ssh/authorized_keys? ПРИМЕЧАНИЕ. У меня все еще есть ключ, и только у меня есть доступ к консоли AWS.
  2. Как новые разработчики могут получить доступ к машине AWS без файла .pem? (Единственное, что я делаю, это вставляю их открытый ключ в author_keys на AWS)
  3. Как мне внедрить систему, в которой у меня есть единственный доступ, и я имею дело с разработчиками, которые приходят и уходят из проекта?
  4. Все пользователи (включая меня), чей открытый ключ находится в author_keys на компьютере AWS, могут войти в систему без файла .pem. Как это возможно? Разве не всем нужен файл .pem для ssh?

Я действительно запутался в этом бизнесе с парой ключей (какова роль файла .pem?), и другие сообщения в Интернете, похоже, не помогают (даже поддержка AWS). Большинство сообщений в Интернете адресуют сценарии, в которых вы теряете ключ и запускаете новый экземпляр и т. д. и т. д. Я связался со службой поддержки AWS, и они просто прислали мне это ссылка. Я не понимаю, как это помогает.

Любое решение / подробный ответ будет действительно полезным.


person am3    schedule 11.04.2016    source источник


Ответы (2)


По большей части ваш вопрос касается администрирования пользователей и SSH в Ubuntu. Пара ключей, созданная с помощью консоли, используется только при первом запуске экземпляра. Он всегда доступен через метаданные экземпляра; вы можете увидеть это, выполнив следующую команду из оболочки на экземпляре EC2:

$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

который выводит:

сш-рса...бла-бла-бла...

При первом запуске вашего экземпляра EC2 этот ключ был скопирован в /home/ubuntu/.ssh/authorized_keys, потому что используемый вами Ubuntu AMI настроен для этого. Но это всего лишь условность. Это единственный случай, когда ключ будет автоматически скопирован куда-либо, поэтому с этого момента вы можете управлять файлом authorized_keys по своему усмотрению.

Что касается ваших конкретных вопросов,

  1. Если исходный открытый ключ, созданный вами на консоли, все еще находится в authorized_keys, то любой, у кого есть соответствующий файл PEM, все еще может войти в систему. Чтобы исправить это, вам нужно аккуратно удалить этот ключ из файла authorized_keys (например, сначала создав абсолютно уверен, что вы можете войти с другим ключом).
  2. Хотя у них может не быть PEM-файла, который вы загрузили из консоли AWS, они каким-то образом должны получить PEM-файл (или его грубый эквивалент) для одного из открытых ключей, которые вы добавили в authorized_keys.
  3. Есть много разных способов. Как упоминалось выше, это больше зависит от того, как вы хотите администрировать пользователей под убунту. Поскольку вы, кажется, хотите сохранить контроль над машиной, вы можете создать учетные записи пользователей для входа в систему каждого из разработчиков, а затем предоставить им ограниченные права на использование sudo в определенных случаях (при условии, что им это вообще нужно). Затем вы можете отозвать эти учетные записи, когда захотите.
  4. Насколько я понимаю, существует множество различных способов предоставить эквивалент файла PEM для ssh, и каким-то образом вы (и ваши разработчики) должны это делать. Я бы рекомендовал ознакомиться с документацией по ssh.

Надеюсь, это поможет!

person Jacob Gabrielson    schedule 12.04.2016
comment
Это было очень полезно. Как вы правильно заметили, curl дает вам открытый ключ, который был сгенерирован при запуске экземпляра. В какой-то момент я удалил этот ключ из моего author_keys (не зная приведенной выше информации). Но, к счастью, у меня был открытый ключ моего ноутбука/рабочего стола в author_keys, и, следовательно, я смог войти в систему. Я проверил это, удалив оба открытых ключа (мой ноутбук и первый сгенерированный открытый ключ) и попытался войти по SSH, но это не удалось. Пока у меня нет открытого ключа, который был впервые сгенерирован в моих author_keys, даже разработчики с ключом pvt не смогут войти в систему. Спасибо - person am3; 15.04.2016

Попробуйте это:
1) Вы не можете удалить ключ из author_keys без потери доступа к серверу. Открытый ключ доказывает серверу, что вы тот, за кого себя выдаете, когда вы авторизуетесь на сервере через SSH с помощью pem.

2) Новые разработчики передают ключ при подключении к машине по ssh. Это просто их ключ, и он передается неявно, в отличие от ключа, который вы использовали для запуска машины. Наличие их открытого ключа в author_keys сигнализирует серверу, что им разрешен доступ к машине, как только их ssh-клиент докажет, что у него есть закрытый ключ, соответствующий открытому ключу в авторизованном файле.

3) я бы просто создал дополнительных пользователей и настроил их для входа без пароля, настроив /home/newusername/.ssh/authorized_keys почти так же, как вы настроили его для пользователя Ubuntu сегодня. когда они покидают проект, просто отключите и/или удалите аккаунты

4) Можно зайти без указания pem, но ключ все равно указываешь. Чтобы увидеть обмен ключами и то, как происходит аутентификация, выполните «ssh -vvv user@machinename», и вы увидите весь диалог ssh. Если вы не укажете ключ, ssh-клиент будет искать его в нескольких предопределенных местах. вы увидите, как клиент пытается использовать каждый из этих ключей (вы, вероятно, что-то берете из ~/.ssh/id_*). PEM — это не волшебный файл. Это просто ключи (он может содержать открытый ключ, открытый и закрытый ключ или открытый ключ и всю цепочку сертификатов).

Я бы порекомендовал вам прочитать о криптографии с открытым/закрытым ключом, чтобы понять, как это работает.

https://en.wikipedia.org/wiki/Public-key_cryptography

https://www.youtube.com/watch?v=svRWcx7dT8g

https://staff.washington.edu/dittrich/misc/ssh/

person Mircea    schedule 12.04.2016
comment
Спасибо за ссылки и ответ. - person am3; 15.04.2016