- Как добавлять репозитории программ и ключи подписей в Linux?
- Концепция репозиториев программ в Linux
- Добавление репозиториев в командной оболочке
- Использование графических утилит
- Добавление ключей подписи репозиториев
- Настройка аутентификации на основе SSH-ключей на сервере Linux
- Как работают SSH-ключи?
- Создание SSH-ключей
- Копирование открытого ключа на удаленный сервер
- 1: Копирование ключа с помощью ssh-copy-id
- 2: Копирование ключа с помощью SSH
- 3: Копирование открытого ключа вручную
- Аутентификация через SSH-ключи
- Отключение парольной аутентификации
Как добавлять репозитории программ и ключи подписей в Linux?
У начинающих пользователей Linux часто возникает вопрос, каким же образом установить какое-либо программное обеспечение (ПО), которого нет в стандартных репозиториях дистрибутива? Такая необходимость возникает по нескольким причинам. Например, необходимо использовать самую актуальную версию ПО в то время как в репозиториях всё ещё имеется более старая. Или же нужно использовать экзотические программные продукты, поддержка которых изначально не предусмотрена разработчиками дистрибутива. В данной статье будет изложено на некоторых примерах, каким образом добавлять репозитории в Linux и устанавливать стороннее ПО для Debian-систем, таких, как Ubuntu.
Концепция репозиториев программ в Linux
Как известно, философия распространения и поддержки ПО в Linux основана на репозиториях — специализированных хранилищах пакетов, содержащих файлы какого-либо ПО. Эти хранилища могут быть как удалёнными, так и локальными. Практически любой дистрибутив Linux снабжается стандартными репозиториями. Которые, в свою очередь, содержат ПО, собранное, оптимизированное и протестированное для данного дистрибутива. Доступ к репозиториям осуществляется с помощью систем управления пакетами (СУП), также специфичными для каждого дистрибутива. Например, для систем Ubuntu, да и вообще для Debian-ориентированных дистрибутивов в качестве стандартной СУП является утилита APT. Любая СУП позволяет (во всяком случае должна) искать, устанавливать, удалять пакеты, очищать их конфигурацию, определять зависимости и как не трудно догадаться — добавлять и удалять репозитории. Для всех перечисленных задач можно использовать как командную оболочку, так и графические утилиты с удобным и наглядным пользовательским интерфейсом.
Для обеспечения безопасности пользователей репозитории должны подписываться ключами шифрования. Чтобы гарантировать, что установка пакетов ПО производится из надёжного источника. Владельцы репозиториев, подписав его своим закрытым ключом, выкладывают в общий доступ соответствующий открытый ключ для этого репозитория. Открытый ключ необходим для добавления удалённого подписанного репозитория, это контролируется средствами СУП. Как правило, открытый ключ необходимо импортировать отдельно. На первый взгляд это не очевидно, однако необходимо для обеспечения безопасности системы.
Добавление репозиториев в командной оболочке
Как это ни странно, но эффективнее и удобнее производить управление репозиториями из командной оболочки. Как правило, в Debian-системах используется СУП APT, поэтому все представляемые далее команды будут относиться к этой системе управления пакетами.
Пусть требуется добавить репозиторий для загрузки и установки интегрированной среды разработки «CodeLite». Информацию о репозитории и даже исчерпывающие инструкции по его настройке в системе приведены на официальной странице Wiki проекта. Итак, с помощью команды apt-add-repository (используя sudo) нужно добавить адрес репозитория. Эта команда попытается добавить соответствующую запись в файл /etc/apt/sources.list :
Здесь следует обратить внимание на ту часть записи, в которой указывается версия дистрибутива (bionic), в данном случае это Ubuntu 18.04 Bionic Beaver. Для каждой из версий существуют свои особенности в сборке ПО и формировании для неё пакетов. Обычно разработчики делают сборки для нескольких версий дистрибутивов и указывают соответствующие ссылки для них. Это следует учитывать, иначе пакеты могут быть некорректно установлены.
Далее необходимо обновить индекс базы данных состояния пакетов, поскольку был добавлен новый репозиторий:
Теперь можно установить и сам пакет codelite:
В данном примере намеренно сначала добавляется репозиторий без импорта открытого ключа, чтобы продемонстрировать, что в случае отсутствия такого ключа APT заблокирует установку пакетов. При этом будет выдано соответствующее сообщение, предупреждающее, что репозиторий является непроверенным. О том, как добавлять ключи при настройке репозиториев, рассказывается в главе «Добавление ключей подписей репозиториев».
Необходимо также отметить, что вся информация о репозиториях для систем Ubuntu (а также и сами пакеты, которые можно найти и скачать вручную) хранится на ресурсе https://launchpad.net/. Хотя поиск и ручная навигация по данному ресурсу не самые удобные, но при желании найти то, что нужно вполне возможно. Например, страница с информацией о репозитории пакета yd-tools (графический индикатор для утилиты Яндекс.Диск) выглядит следующим образом:
Рис. 1: Сводная информация о репозитории на ресурсе launchpad.net для систем Ubuntu.
Как можно видеть, в данном случае выбрана ветка репозитория для версии Ubuntu 18.04 и соответствующие ей ссылки для загрузки готовых пакетов (и если нужно, также и архивов с исходными кодами) необходимо добавлять в файл /etc/apt/sources.list . Также указан отпечаток (Fingerprint — открытый ключ) для данного репозитория.
Использование графических утилит
В данном случае добавление репозиториев происходит далеко не так быстро, как в консоли. Но для новичков и малоопытных пользователей данный способ гораздо более прост и нагляден. В Ubuntu существуют различные менеджеры пакетов, такие как Muon (в основном для KDE), Synaptic (для любых окружений рабочего стола), а также стандартная графическая утилита «Программы и обновления» для окружения Unity. Все перечисленные инструменты объединяет наличие в главном меню пункта для настройки «Источников ПО» или «Другого ПО». Например, для Muon это выглядит так:
Рис. 2: Доступ к редактированию списка репозиториев в Muon для KDE
Редактирование списка репозиториев в Muon:
Рис. 3: Диалог для редактирования списка репозиториев в Muon.
То же самое, но с использованием Synaptic. Доступ к редактированию репозиториев осуществляется через меню «Настройки» и далее, пункт «Репозитории»:
Рис. 4: Диалог управления репозиториями в Synaptic.
Теперь можно добавить все нужные репозитории (или удалить/отключить ненужные). Сохранить изменения и графическая утилита автоматически запустит обновление информации о пакетах. После этого с помощью встроенного поиска можно найти интересующий пакет и, отметив его для установки/удаления (или обновления) применить сделанные изменения.
Добавление ключей подписи репозиториев
Как уже было отмечено выше, в целях обеспечения безопасности пользователей, для загрузки пакетов из репозиториев необходимо импортировать в свою систему открытый ключ для этого репозитория. Если этого не сделать, то загрузка и установка пакетов будет временно заблокирована. А при попытке всё же их установить будет выдано сообщение примерно следующего вида:
Чтобы добавить нужный открытый ключ необходимы 3 вещи:
- Сам ключ (или последние его 8 символов), в данном случае это BE80DFE08E782DB0;
- Результат запроса к серверу ключей, на котором хранится закрытая часть ключа;
- Данные для добавления в систему открытого ключа.
Для второго пункта необходимо выполнить команду gpg с ключом «—keyserver». В качестве адреса нужно передать «keyserver.ubuntu.com»:
Данный вывод говорит о том, что запрос выполнен успешно. И теперь все необходимые данные для формирования открытого ключа есть. Теперь необходимо из данного набора данных выполнить экспорт открытой части ключа. И далее, добавить её в базу СУП APT. Это выполняется двумя командами, но удобнее их объединить сразу в один конвейер:
Теперь ключ добавлен и СУП сможет работать с репозиторием. Как видно, для добавления ключа использовалась команда APT apt-key add.
В заключение важно отметить, что при работе с ключами активно используется утилита gpg. Её значение для обеспечения безопасности и защиты данных среди свободных инструментов сложно переоценить. Умение работать с GPG, как можно видеть, существенно упрощает и работу с APT.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Настройка аутентификации на основе SSH-ключей на сервере Linux
SSH (secure shell) – это криптографический протокол для управления и взаимодействия с серверами. В случае с сервером Linux большая часть работы происходит в терминале через соединение SSH.
Существует несколько различных способов подключения к серверу по SSH. В этом руководстве мы рассмотрим аутентификацию на основе ключей SSH. Ключи SSH – это простой, но чрезвычайно безопасный способ входа на сервер.
Как работают SSH-ключи?
Существует несколько различных способов входа в SSH-сервер. В этом руководстве мы рассмотрим настройку аутентификации на основе ключей SSH. Ключи SSH – это простой, но чрезвычайно безопасный способ входа на ваш сервер.
Хотя пароли отправляются на сервер безопасным путем, как правило, они не достаточно сложные или слишком короткие, а потому в ходе повторяющейся атаки подбора их можно взломать. Современная вычислительная мощность в сочетании с автоматизированными сценариями позволяет взламывать аккаунты путем brute force атак. Конечно, есть и другие способы обеспечения дополнительной безопасности (fail2ban и т. п.), но ключи SSH являются надежной и безопасной альтернативой.
В аутентификации на основе ключей SSH используются два криптографических ключа. Каждая пара ключей состоит из открытого и закрытого ключа.
Закрытый ключ должен храниться в секрете. Если злоумышленник получит закрытый ключ, он сможет войти на серверы, связанные с этой парой ключей, без дополнительной аутентификации. В качестве дополнительной меры предосторожности ключ можно защитить парольной фразой.
Открытый ключ можно свободно распространять. Он позволяет зашифровывать сообщения, которые можно расшифровать только с помощью соответствующего закрытого ключа. Аутентификация по ключам основана на этом принципе.
Открытый ключ загружается на удаленный сервер, на котором нужно настроить аутентификацию по ключам SSH. Ключ добавляется в специальный файл
/.ssh/authorized_keys в учетной записи пользователя, с помощью которого нужно войти на сервер.
Когда клиент пытается аутентифицироваться с помощью SSH-ключей, сервер может проверить клиента на наличие у закрытого ключа. Если клиент может доказать, что ему принадлежит закрытый ключ, сервер запускает сеанс оболочки или выполняет требуемую команду.
Создание SSH-ключей
Для начала нужно сгенерировать пару ключей SSH на локальном компьютере.
Для этого существует утилита ssh-keygen, которая входит в стандартный набор инструментов OpenSSH. По умолчанию она создает пару 2048-битных ключей RSA, которые подходят в большинстве случаев.
Чтобы сгенерировать пару ключей на локальной машине, введите:
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
Утилита предложит выбрать место хранения ключей. По умолчанию ключи будут храниться в каталоге
/.ssh в домашнем каталоге текущего пользователя. Закрытый ключ будет называться id_rsa, а связанный с ним открытый ключ – id_rsa.pub.
Как правило, на этом этапе лучше всего хранить ключи в каталоге по умолчанию. Это позволит SSH-клиенту автоматически найти SSH-ключи при попытке аутентификации. Если вы хотите выбрать нестандартный путь к ключам, введите его сейчас; чтобы принять значение по умолчанию, нажмите Enter.
Если на локальной машине уже есть пара ключей, вы увидите сообщение:
/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?
Если вы перепишете существующие ключи, вы не сможете использовать их при аутентификации. Подтверждая перезапись, будьте очень внимательны: этот процесс нельзя отменить.
Created directory ‘/home/username/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Затем утилита предложит ввести парольную фразу для защиты ключа. Это действие опционально.
Вы можете задаться вопросом, какие преимущества дают ключи SSH, если все еще нужно вводить парольную фразу. Вот некоторые из преимуществ:
- Закрытый SSH-ключ (который можно защитить парольной фразой) никогда не бывает доступным в сети. Парольная фраза шифрует ключ на локальной машине. Это значит, что сетевые brute force атаки не смогут взломать парольную фразу и получить доступ к закрытому ключу.
- Закрытый ключ хранится в каталоге с ограниченным доступом. Клиент SSH не сможет распознать закрытые ключи, которые хранятся в открытых каталогах. Сам ключ также должен иметь ограниченные разрешения (права на чтение и запись должны быть только у владельца). Это означает, что другие пользователи в системе не могут его отследить.
- Чтобы взломать парольную фразу закрытого SSH-ключа, злоумышленник должен иметь доступ к системе, то есть доступ к вашей учетной записи пользователя или к учетной записи root. В таком случае парольная фраза может помешать злоумышленнику использовать другие ваши серверы. Это даст вам время на создание и внедрение новой пары ключей SSH.
Поскольку закрытый ключ никогда не отображается в сети и защищен с помощью ограниченных привилегий, этот файл не должен быть доступен никому, кроме вашего пользователя (и пользователя root). Парольная фраза служит дополнительным уровнем защиты в случае нарушения этих условий.
При этом парольная фраза остается опциональным уровнем безопасности. Если вы добавите парольную фразу, вам придется вводить ее каждый раз, когда вы используете этот ключ (хотя программное обеспечение агента SSH может автоматизировать этот процесс). Многие рекомендуют использовать парольную фразу, но если вы не хотите, вы можете просто нажать Enter, чтобы обойти этот запрос.
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key’s randomart image is:
+—[ RSA 2048]—-+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+——————+
Итак, теперь у вас есть пара SSH-ключей. Далее нужно добавить открытый ключ на удаленный сервер.
Копирование открытого ключа на удаленный сервер
Теперь нужно выгрузить открытый ключ на удаленный сервер.
Выбранный вами метод во многом зависит от имеющихся у вас инструментов и текущей конфигурации сервера. Мы предлагаем вам несколько методов, которые дают одинаковый конечный результат.
1: Копирование ключа с помощью ssh-copy-id
Утилита ssh-copy-id – самый простой и быстрый способ скопировать открытый ключ на сервер. Если эта утилита доступна, рекомендуется использовать ее.
В большинстве дистрибутивов утилита ssh-copy-id входит в стандартный набор инструментов OpenSSH, потому она может уже быть в локальной системе. Чтобы она сработала, у вас должна быть настроена простая парольная SSH-аутентификация.
Укажите в команде удаленный хост, к которому нужно подключиться, и аккаунт пользователя сервера. В этот аккаунт утилита скопирует открытый ключ.
Команда может вернуть:
The authenticity of host ‘111.111.11.111 (111.111.11.111)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Это значит, что локальная машина не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите yes и нажмите Enter, чтобы продолжить.
Затем утилита просканирует локальный аккаунт, найдет id_rsa.pub и запросит пароль удаленного пользователя.
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
username@111.111.11.111’s password:
Введите пароль (при вводе он не будет отображаться из соображений безопасности) и нажмите Enter. Утилита подключится к учетной записи на удаленном хосте, используя предоставленный пароль. Затем он скопирует содержимое ключа
/.ssh/id_rsa.pub в файл authorized_keys в домашнем каталоге
/.ssh удаленной учетной записи.
На экране появится вывод:
Number of key(s) added: 1
Now try logging into the machine, with: «ssh ‘username@111.111.11.111′»
and check to make sure that only the key(s) you wanted were added.
Теперь открытый ключ загружен на удаленный сервер.
2: Копирование ключа с помощью SSH
Если у вас нет утилиты ssh-copy-id, но есть парольный SSH-доступ к удаленному серверу, вы можете загрузить ключ с помощью SSH.
Для этого нужно вывести открытый SSH-ключ на локальном компьютере и передать его через SSH-соединение на удаленный сервер. Затем можно убедиться, что каталог
/.ssh существует в удаленном аккаунте, а затем вывести открытый ключ, скопированный в файл authorized_keys.
Используйте операторы перенаправления >>, чтобы вставить передаваемые данные, не перезаписывая весь файл. Команда добавит ключ в файл и не удалит другие ключи, если таковые существуют.
/.ssh/id_rsa.pub | ssh username@remote_host «mkdir -p
/.ssh/authorized_keys»
The authenticity of host ‘111.111.11.111 (111.111.11.111)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Это значит, что локальная машина не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите yes и нажмите Enter, чтобы продолжить.
Затем будет запрошен пароль удаленного пользователя.
После этого содержимое ключа
/.ssh/id_rsa.pub будет скопировано в файл authorized_keys в домашнем каталоге
/.ssh удаленной учетной записи.
3: Копирование открытого ключа вручную
Если у вас не настроена парольная аутентификация SSH, вам нужно будет скопировать ключ вручную.
Открытый ключ из файла id_rsa.pub нужно добавить в файл
/.ssh/authorized_keys на удаленной машине.
Чтобы вывести содержимое id_rsa.pub, введите на локальной машине:
/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Любым доступным методом получите доступ к удаленному хосту.
На удаленном хосте создайте каталог
Затем нужно создать файл authorized_keys и поместить в него ключ из id_rsa.pub.
Для этого можно использовать следующую команду:
Примечание: Вместо public_key_string укажите свой открытый ключ.
Аутентификация через SSH-ключи
Переместив открытый ключ на удаленный сервер, попробуйте подключиться к нему с помощью SSH-ключей.
Базовая команда выглядит так:
Если вы впервые подключаетесь к этому хосту, вы можете увидеть сообщение вроде этого:
The authenticity of host ‘111.111.11.111 (111.111.11.111)’ can’t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Это значит, что локальная машина не распознает удаленный хост. Введите yes и нажмите Enter, чтобы продолжить.
Если вы не настраивали парольную фразу для закрытого ключа, вы сразу же войдете в систему. Если вы создали парольную фразу для закрытого ключа, вам необходимо будет ввести ее сейчас. После этого должен быть создан новый сеанс оболочки для удаленного пользователя.
Отключение парольной аутентификации
Если вы смогли войти в свою учетную запись с помощью SSH-ключей без пароля, значит, вы успешно настроили аутентификацию на основе SSH-ключей для своей учетной записи. Однако механизм парольной аутентификации все еще включен, что означает, что ваш сервер по-прежнему уязвим к brute-force атакам.
Прежде чем выполнять этот раздел, убедитесь, что у учетной записи root или у пользователя с доступом sudo на удаленном сервере настроена аутентификация на основе ключей SSH. В ходе этого раздела все пароли будут заблокированы, поэтому важно обеспечить себе административный доступ в случае неполадок.
Итак, подключитесь к удаленному серверу с помощью SSH-ключей как пользователь root или sudo. Откройте конфигурационный файл демона SSH.
sudo nano /etc/ssh/sshd_config
Найдите директиву PasswordAuthentication, раскомментируйте ее и присвойте значение no. Теперь вы не сможете подключаться с помощью пароля.
Сохраните и закройте файл. Перезапустите сервис, чтобы обновить настройки:
# Ubuntu/Debian
sudo systemctl restart ssh
# CentOS/Fedora
sudo service sshd restart
Источник